标签: aws-lambda

使用node-gyp进行本机绑定的交叉编译节点模块

我正在使用AWS Lambda,它涉及创建我的node.js脚本的存档,包括该node_modules文件夹并将其上传到他们的基础架构以运行.

这种方法很好,除了涉及具有本机绑定的节点模块(使用node-gyp).由于绑定已在我的本地计算机(OS X)上进行编译和项目存档,因此它与AWS(Amazon Linux)服务器不兼容.

如何交叉编译/安装节点模块(特别是node-sqlite3),这样当我将其上传到另一个服务器时,它会运行吗?

cross-compiling amazon-web-services node.js node-gyp aws-lambda

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

aws-lambda无法找到模块

从zip文件上传代码时,我在aws-lambda控制台中不断收到此错误.我尝试上传其他zip文件,但它们正常工作..js文件在zip文件中名为"CreateThumbnail.js".我相信处理程序也正确命名为"CreateThumbnail.handler".node_modules子目录也已设置.任何人都有任何想法?

{
  "errorMessage": "Cannot find module 'CreateThumbnail'",
  "errorType": "Error",
  "stackTrace": [
  "Function.Module._resolveFilename (module.js:338:15)",
  "Function.Module._load (module.js:280:25)",
  "Module.require (module.js:364:17)",
  "require (module.js:380:17)"
  ]
}
Run Code Online (Sandbox Code Playgroud)

javascript amazon-web-services node.js aws-lambda

20
推荐指数
5
解决办法
3万
查看次数

AWS Lambda的源代码管理和部署

有没有人想出一个很好的源代码控制解决方案并将代码部署到AWS Lambda?我真的很讨厌我必须一直压缩文件并上传它们.有没有更好的方法来做这个也许是一个根据Lambda的变化推送代码的服务?

amazon-web-services aws-lambda

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

如何在AWS Lambda上使用环境变量?

我正在编写一个我希望作为AWS Lambda函数运行的应用程序,但也遵守Twelve-Factor应用程序指南.特别是第三部分.配置需要使用环境变量进行配置.

但是,我找不到为AWS Lambda实例设置环境变量的方法.谁能指出我正确的方向?

如果无法使用环境变量,请推荐一种方法来使用环境变量进行本地开发,并将它们转换为可以使用AWS中的应用程序代码访问的有效配置系统.

谢谢.

environment-variables amazon-web-services aws-lambda

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

AWS lambda - 每次执行后释放/ tmp存储

我有4个lambda函数,将同时调用(由SNS),SNS事件的频率为5分钟.每个函数处理大量数据和图像(~300MB),因此我将它们存储在/tmp文件夹中(500MB限制).

在函数开始时,我在清理/tmp文件夹中写了一些代码,以确保它不会内存不足(因为我已经知道AWS lambda有时会重用以前的容器来提高性能).

我手动检查它(创建消息并通过SNS发布到4个lambda函数),它工作正常.

但是当它自动运行(每5分钟调用一次)时,结果并不像我期望的那样.第一次执行很好,但接下来的时间,4个甚至4个lambda函数中的1个抛出与"内存不足"相关的错误:"设备上没有空间",无法加载lib,...

以前,我使用nodejs(4.3)它两种情况都很好.

但由于某种原因我必须更改为python,主流和创建数据的挂载是相同的.但它在自动运行时失败了.

我认为这个问题来自前一个容器(重用容器)的缓存,我检查了/tmpclean(ls -alh /tmp)之后没有文件但是当检查存储(df /tmp)时它显示使用的是77%.

任何关于制作干净/tmp文件夹或解决方案的建议都非常感谢.谢谢!

编辑:我用来清理/tmp文件夹的代码:

from subprocess import call
...
call('rm -rf /tmp/*', shell=True)
Run Code Online (Sandbox Code Playgroud)

python node.js aws-sdk aws-lambda

20
推荐指数
2
解决办法
6915
查看次数

如何使来自 Lambda 的批处理中的特定 SQS 消息失败?

我有一个带有 SQS 触发器的 Lambda。当它被击中时,来自 SQS 的一批记录进来(我认为通常一次大约 10 个)。如果我从处理程序返回失败的状态代码,将重试所有 10 条消息。如果我返回成功代码,它们都会从队列中删除。如果这 10 条消息中有 1 条失败,而我只想重试那一条怎么办?

exports.handler = async (event) => {

    for(const e of event.Records){
        try {
            let body = JSON.parse(e.body);
            // do things
        }
        catch(e){
            // one message failed, i want it to be retried
        }        
    }

    // returning this causes ALL messages in 
    // this batch to be removed from the queue
    return {
        statusCode: 200,
        body: 'Finished.'
    };
};
Run Code Online (Sandbox Code Playgroud)

我是否必须手动将该消息重新添加回队列?或者我可以从我的处理程序返回一个状态,指示一条消息失败并应该重试?

amazon-sqs amazon-web-services node.js aws-lambda

20
推荐指数
2
解决办法
6362
查看次数

将 lambda 目标角色添加到 Cloudformation 中的 AWS Eventbridge 规则失败

我正在尝试创建一个以 Lambda 函数作为目标的 AWS Eventbridge 规则。我可以很好地添加规则和目标,但是当我尝试通过RoleArnCloudformation 堆栈部署设置 lambda 权限时失败,并显示: RoleArn is not supported for target arn:aws:lambda:us-east-1:1234567890:function:contacts-lambda-consume-new-customer. (Service: AmazonCloudWatchEvents; Status Code: 400; Error Code: ValidationException; Request ID: xxxxx-ec5d-45e8-b45d-xxxxxx; Proxy: null)

这是我的 Cloudformation 堆栈代码:

  EventRuleNewCustomer: 
    Type: AWS::Events::Rule
    Properties: 
      Name: new-customer
      EventBusName: myEventBus
      # RoleArn: !Join ["", ["arn:aws:iam::",!Ref "AWS::AccountId", ":role/my-role"] ] #no error but doesn't add the permissions
      Description: "New customer event rule"
      EventPattern: 
        detail-type: 
          - "NewCustomer"
      State: "ENABLED"
      Targets: 
        - 
          Arn: !Join ["", ["arn:aws:lambda:" ,!Ref "AWS::Region", ":", !Ref "AWS::AccountId", ":function:contacts-lambda-consume-new-customer"] …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-cloudformation amazon-iam aws-lambda aws-event-bridge

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

/lib64/libc.so.6:找不到版本“GLIBC_2.32”

我正在使用基本示例在 Ubuntu 上构建 lambda。它构建时没有任何错误,但如果我在 aws 上上传并测试它,则会崩溃:

{
  "errorMessage": "RequestId: 7f4d0aca-125c-4032-98dd-9ff387e5252b Error: Runtime exited with error: exit status 1",
  "errorType": "Runtime.ExitError"
}
Run Code Online (Sandbox Code Playgroud)

日志输出为:

START
RequestId: 7f4d0aca-125c-4032-98dd-9ff387e5252b
Version: $LATEST.~.jwtauthorizeraws.jwtauthorizerawsapplication: /lib64/libc.so.6: version `GLIBC_2.32' not found (required by ./~.jwtauthorizerawsapplication)
END 
RequestId: 7f4d0aca-125c-4032-98dd-9ff387e5252b
REPORT
RequestId: 7f4d0aca-125c-4032-98dd-9ff387e5252b
Duration: 56.02 ms
Billed Duration: 57 ms
Memory Size: 128 MB
Max Memory Used: 7 MB   
RequestId: 7f4d0aca-125c-4032-98dd-9ff387e5252b
Error: Runtime exited with error: exit status 1
Runtime.ExitError
Run Code Online (Sandbox Code Playgroud)

aws-lambda spring-cloud-function graalvm-native-image

20
推荐指数
3
解决办法
4万
查看次数

无服务器框架:如何添加外部NPM包?

我的情况是我在向我的无服务器框架项目添加外部NPM包时遇到了一些麻烦(特定包是geopoint).

我去了无服务器项目的根文件夹并运行npm install geopoint --save.package.json已更新,dependencies": { "geopoint": "^1.0.1" }并创建了node_modules文件夹.

我的文件夹结构是这样的:
根项目文件夹
-functions
--geospatial
--- handler.js
-node_modules
--geopoint

在我的函数/ geospatial/handler.js中,我将geopoint模块声明为:

    var geopoint = require('geopoint');
    var geopoint = require('../../geopoint');
    var geopoint = require('../../../geopoint');
Run Code Online (Sandbox Code Playgroud)

lambda控制台返回错误:

    {
      "errorMessage": "Cannot find module '../../geopoint'",
      "errorType": "Error",
      "stackTrace": []
    }
Run Code Online (Sandbox Code Playgroud)

如何正确地将外部NPM模块添加到无服务器框架项目?

node.js aws-lambda serverless-framework

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

如何为无服务器-1.0.0框架定义/部署的API添加自定义域?

Serverless-1.0.0-rc.1支持部署可通过AWS API Gateway访问的API.

问题:我需要通过带有SSL证书的自定义域而不是随机分配的(URL https://qwertylgbtqert.execute-api....)来公开部署的API 吗?

可以从内部serverless.yml或无服务器框架完成吗?

这是我简单的服务serverless.yml定义:

service: my-service
provider:
  name: aws
  runtime: nodejs4.3

functions:
  generate:
    handler: handler.generate
    events:
      - http:
         method: get
         path: url
         cors: true
Run Code Online (Sandbox Code Playgroud)

有一个问题与此有关:答案在这里,但没有提供适用的答案.特别是如何从serverless.yml自身内部分配自定义域.

它认为是否有可能创建AWS :: Route53资源并利用它,但我不知道如何在无服务器中执行此操作.

amazon-web-services aws-lambda aws-api-gateway serverless-framework

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