标签: aws-lambda

Google Adwords 脚本在 AWS Lambda 上运行:[Errno 30] 只读文件系统:“/home/sbx_user1051”

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)

python-3.x aws-lambda google-ads-api

1
推荐指数
1
解决办法
1468
查看次数

Ruby AWS 客户端 Lambda 调用 ReadTimeout

我的 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​​ 等待调用而不是超时?

ruby ruby-on-rails aws-lambda

1
推荐指数
1
解决办法
1080
查看次数

计算并发 Lambda 函数执行的数量

根据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)

amazon-web-services amazon-cloudwatch aws-lambda

1
推荐指数
1
解决办法
2825
查看次数

我什么时候应该使用 DynamoDB 触发器而不是用另一个触发器调用 Lambda?

我目前有一个正在更新 DynamoDB 表的 AWS Lambda 函数,并且我需要另一个需要在数据更新后运行的 Lambda 函数。在这种情况下,使用 DynamoDB 触发器而不是使用第一个触发器调用第二个 Lambda 有什么好处吗?

看来,编程调用可以让我更好地控制何时调用 Lambda(即,我可以在调用之前等待多个更新发生),并且从 DynamoDB Stream 读取数据需要花钱,而简单地调用 Lambda 则不需要。

那么,在这里使用触发器有什么好处吗?或者我自己调用 Lambda 会更好吗?

amazon-dynamodb aws-lambda amazon-dynamodb-streams

1
推荐指数
1
解决办法
1628
查看次数

AWS 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)

python amazon-web-services boto3 aws-lambda

1
推荐指数
1
解决办法
2万
查看次数

AWS Lambda Error: Quit inactivity timeout at Quit

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)

mysql amazon-web-services node.js npm aws-lambda

1
推荐指数
1
解决办法
2883
查看次数

如何将事件发送到 AWS Lambda 函数的所有正在运行的实例

我有一个 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)

events broadcast amazon-web-services aws-lambda

1
推荐指数
1
解决办法
582
查看次数

如何从 amazon s3 加载模板文件并将其加载到 openpyxl 工作簿中

我正在使用 aws lambda 和 python 设置一个无服务器 python 应用程序,用于将 csv 文件转换为 excel。
我想将 csv 文件和 Excel 模板文件上传到 s3 存储桶中。然后使用模板文件创建一个 Excel 文件。
我已使用 boto3 成功将 csv 数据读入我的应用程序。现在我想将内容写入excel模板文件中。
我怎样才能做到这一点?
我在某处读到,我们可以将模板文件复制到 s3 中的 /tmp 中并可以写入其中。如果是这样,怎么可能?

amazon-s3 xlsx python-3.x openpyxl aws-lambda

1
推荐指数
1
解决办法
6065
查看次数

无服务器框架 - 具有授权者 COGNITO_USER_POOLS 的 Lambda 函数始终返回“未经授权”

我不明白我的授权有什么问题。

我有一个 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

1
推荐指数
1
解决办法
1440
查看次数

java(spring boot)中的aws lambda函数无法创建文件?

 bool = tempFile.createNewFile();

Run Code Online (Sandbox Code Playgroud)

上面的代码行抛出 java.io.IOException: 只读文件系统,我们尝试在 aws lambda 函数(java spring boot)中创建文件,但无法创建文件?

java spring-boot aws-lambda

1
推荐指数
1
解决办法
2084
查看次数