python 脚本获取 google adwords 报告,它在我的本地计算机中按预期工作,但是当部署在 AWS Lambda 函数中时,出现以下错误
{
"errorMessage": "[Errno 30] Read-only file system: '/home/sbx_user1051'",
"errorType": "OSError",
"stackTrace": [
[
"/var/task/lambda_function.py",
24,
"lambda_handler",
"report_downloader = client.GetReportDownloader(version='v201809')"
],
[
"/var/task/googleads/adwords.py",
370,
"GetReportDownloader",
"return ReportDownloader(self, version, server)"
],
[
"/var/task/googleads/adwords.py",
1213,
"__init__",
"self.proxy_config, self._namespace, self._adwords_client.cache)"
],
[
"/var/task/googleads/common.py",
819,
"__init__",
"transport = _ZeepProxyTransport(timeout, proxy_config, cache)"
],
[
"/var/task/googleads/common.py",
667,
"__init__",
"cache = zeep.cache.SqliteCache()"
],
[
"/var/task/zeep/cache.py",
77,
"__init__",
"self._db_path = path if path else _get_default_cache_path()"
],
[
"/var/task/zeep/cache.py",
155,
"_get_default_cache_path",
"os.makedirs(path)" …Run Code Online (Sandbox Code Playgroud) 我的 Rails 应用程序使用 AWS SDK v3 调用 lambda 函数,如下所示
lambda_client = Aws::Lambda::Client.new(client_config)
lambda_return_value = lambda_client.invoke(
{
function_name: function_name,
invocation_type: 'RequestResponse',
log_type: 'None',
payload: generated_payload,
}
Run Code Online (Sandbox Code Playgroud)
我的大多数 lambda 函数都成功执行,但即使 lambda 完全执行,耗时超过 60 秒的函数也会在 ruby 端导致以下异常
A Seahorse::Client::NetworkingError occurred in background at 2019-07-11 00:47:18 -0500 :
Net::ReadTimeout
Run Code Online (Sandbox Code Playgroud)
我已阅读文档,但找不到为 lambda 调用设置更长超时的方法。有什么想法如何让 ruby 等待调用而不是超时?
根据AWS文档所述,默认情况下每个账户一次可以执行1000个并发Lambda函数。当然,这是一个软限制,可以根据请求进行更改。
现在,我的问题是如何监控并发 Lambda 函数执行?
我假设这应该(以某种方式)使用 CloudWatch 来完成。在CloudWatch 的Metrics部分中,遵循以下路径:
All > Lambda > Across All Functions
Run Code Online (Sandbox Code Playgroud)
您可以通过名称查找指标ConcurrentExecutions。我押注于这一点,但与此同时,我没有根据我所做的测试得到数字。在我们到达那里之前,图表上显示的该指标的值不是整数,所以我猜我在这里遗漏了一些东西。但那很好。让我告诉你我进行的测试。
我在 EC2 实例上创建了一个简单的 NodeJs 脚本,如下所示:
const AWS = require('aws-sdk');
const https = require('https');
const sslAgent = new https.Agent({
keepAlive: true,
maxSockets: 200,
rejectUnauthorized: true,
});
sslAgent.setMaxListeners(0);
AWS.config.update({
region: 'us-east-1',
httpOptions: {
agent: sslAgent,
},
});
const lambda = new AWS.Lambda();
function call() {
return lambda.invoke({
FunctionName: "test",
Payload: JSON.stringify({
wait: 5000,
}),
}).promise();
}
(async () => {
let …Run Code Online (Sandbox Code Playgroud) 我目前有一个正在更新 DynamoDB 表的 AWS Lambda 函数,并且我需要另一个需要在数据更新后运行的 Lambda 函数。在这种情况下,使用 DynamoDB 触发器而不是使用第一个触发器调用第二个 Lambda 有什么好处吗?
看来,编程调用可以让我更好地控制何时调用 Lambda(即,我可以在调用之前等待多个更新发生),并且从 DynamoDB Stream 读取数据需要花钱,而简单地调用 Lambda 则不需要。
那么,在这里使用触发器有什么好处吗?或者我自己调用 Lambda 会更好吗?
我有一个 lambda 函数,我在其中发送电子邮件,并且邮件模板作为对象从 S3 存储桶中获取。我已经在我的计算机本地运行了代码并且工作正常。当我将其粘贴到 lambda 函数中时,它显示以下错误。
Response:
{
"errorMessage": "Parameter validation failed:\nInvalid type for parameter Message.Body.Html.Data, value: b\"<html>\\n<head></head>\\n<body>\\n <h1>Amazon SES Test (SDK for Python)</h1>\\n <p>This email was sent with\\n <a href='https://aws.amazon.com/ses/'>Amazon SES</a> using the\\n <a href='https://aws.amazon.com/sdk-for-python/'>\\n AWS SDK for Python (Boto)</a>.</p>\\n</body>\\n</html>\", type: <class 'bytes'>, valid types: <class 'str'>",
"errorType": "ParamValidationError",
"stackTrace": [
[
"/var/task/lambda_function.py",
65,
"lambda_handler",
"Source=SENDER,"
],
[
"/var/runtime/botocore/client.py",
314,
"_api_call",
"return self._make_api_call(operation_name, kwargs)"
],
[
"/var/runtime/botocore/client.py",
586,
"_make_api_call",
"api_params, operation_model, context=request_context)"
],
[
"/var/runtime/botocore/client.py",
621,
"_convert_to_request_dict",
"api_params, …Run Code Online (Sandbox Code Playgroud) I am facing a strange issue on AWS Lambda in which my API calls fail with a 502 error,
I checked the CloudWatch logs, and in these cases, not even my 1st line of code which is logging the event object is getting printed
The function call is not reaching the DAO layer of my code for sure.
The logs are showing the following trace -
2019-07-25T08:03:55.668Z 2329a426-a841-4ce2-91ed-1000c623ba14 Error: Quit inactivity timeout
at Quit.<anonymous> (/opt/layer/node_modules/mysql/lib/protocol/Protocol.js:160:17)
at emitNone (events.js:106:13)
at Quit.emit …Run Code Online (Sandbox Code Playgroud) 我有一个 Lambda 函数,其配置位于外部源(例如 S3)中。
为了节省一些计算时间,该函数在第一次执行时加载配置并将其保存在内存中。
我希望能够告诉此 Lambda 函数的所有正在运行的实例按需重新加载配置。
在下面的代码片段中,当事件具有“reload”属性时,Lambda 函数会重新加载配置。但显然只有一个正在运行的实例获得该事件。
// Function to process events
var processEvent = function(event,callback) {
// process event
}
// Function to update configuration
var config; // global object representing configuration
var updateConfiguration = function(callback) {
// ... load asynchronously from S3
}
// Handle events
exports.handler = function(event, context, callback) {
if (event.reload) {
updateConfiguration(callback); // load configuration
} else if (!config) {
updateConfiguration(function() { // load …Run Code Online (Sandbox Code Playgroud) 我正在使用 aws lambda 和 python 设置一个无服务器 python 应用程序,用于将 csv 文件转换为 excel。
我想将 csv 文件和 Excel 模板文件上传到 s3 存储桶中。然后使用模板文件创建一个 Excel 文件。
我已使用 boto3 成功将 csv 数据读入我的应用程序。现在我想将内容写入excel模板文件中。
我怎样才能做到这一点?
我在某处读到,我们可以将模板文件复制到 s3 中的 /tmp 中并可以写入其中。如果是这样,怎么可能?
我不明白我的授权有什么问题。
我有一个 Hello 函数,它只返回一条简单的静态消息。如果我在没有设置“Authorizer”的情况下部署,它就可以工作。我已经在邮递员上进行了测试。当我尝试添加授权者时,问题就出现了。
我的 Cognito 已完全正常工作。在我的前端,我可以注册,然后登录,然后从此登录会话获取令牌。
当我去邮差测试时,我总是得到“未经授权”的答案。在 Postman 上,我测试了 GET 方法,在“标头”选项卡上,我添加了“授权”属性,并粘贴了我从登录会话中获得的令牌值。我还在一些地方推荐的前缀“bearer”的值字段上对此进行了测试。没有成功。
过去一周我一直在努力解决这个问题。请,任何帮助都将非常有用。
serverless.yml
provider:
name: aws
runtime: nodejs10.x
stage: dev
region: eu-west-1
environment:
MY_TABLE: ${self:custom.myStage}_${self:custom.settings.tb_items}
MY_STAGE: ${self:custom.myStage}
MY_DOMAIN: ${self:custom.myDomain}
iamRoleStatements:
- Effect: "Allow"
Action:
- "dynamodb:GetItem"
- "dynamodb:PutItem"
- "dynamodb:UpdateItem"
- "dynamodb:DeleteItem"
- "dynamodb:Scan"
Resource: "*"
functions:
hello:
handler: ${self:custom.pathFunc}/phraseOption.hello
events:
- http:
method: GET
path: hello
cors: true
integration: lambda-proxy
authorizer:
type: COGNITO_USER_POOLS
authorizerId:
Ref: ApiGatewayAuthorizer
resources:
Resources:
CognitoUserPool:
Type: "AWS::Cognito::UserPool"
DeletionPolicy: Retain
Properties:
MfaConfiguration: OFF
UserPoolName: ${self:custom.myStage}_aePool …Run Code Online (Sandbox Code Playgroud) unauthorized amazon-cognito aws-lambda aws-api-gateway serverless-framework
bool = tempFile.createNewFile();
Run Code Online (Sandbox Code Playgroud)
上面的代码行抛出 java.io.IOException: 只读文件系统,我们尝试在 aws lambda 函数(java spring boot)中创建文件,但无法创建文件?
aws-lambda ×10
python-3.x ×2
amazon-s3 ×1
boto3 ×1
broadcast ×1
events ×1
java ×1
mysql ×1
node.js ×1
npm ×1
openpyxl ×1
python ×1
ruby ×1
spring-boot ×1
unauthorized ×1
xlsx ×1