标签: serverless-framework

S3 签名 URL 在参数通过之前就过期了

我正在尝试为 S3 存储桶对象生成签名 URL,最大过期时间为 604800 秒或 7 天。然而,经过测试,我发现链接在 24 小时内就会过期。经过一番挖掘,我发现这篇文章声称只有当 aws-sdk 获得 IAM 用户授权并且 s3 库使用 AWS Signature v4 时,7 天到期才可用。

我肯定使用 v4:exports.getS3 = () => new AWS.S3({region : 'us-east-1', signatureVersion: 'v4'})

此外,据我所知,在使用 sdk 时,在没有任何其他操作的情况下,通过无服务器部署的 lambda 应该默认为我的 IAM 用户凭证:const AWS = require('aws-sdk')

这是上述文章:https://aws.amazon.com/premiumsupport/knowledge-center/presigned-url-s3-bucket-expiration/

我还定义了委托给我的用户的 IAM 角色以启用对 s3 的访问iamRoleStatements: - Effect: Allow Action: - dynamodb:* Resource: "*" - Effect: Allow Action: - ssm:* Resource: "*" - Effect: Allow Action: - s3:* Resource: "*"

我已经证实这并不像传递错误的参数那么愚蠢exports.getSignedURL = (key,bucket,method,expiration) …

amazon-s3 amazon-web-services aws-lambda serverless-framework

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

无服务器框架 TypeError:e 不是函数

我用来serverless-framework在 AWS 中安排任务。

我的应用程序结构是

|- src
   |- tasks
      |- analytics.task.js
|- tasks.js
|- serverless.yml
Run Code Online (Sandbox Code Playgroud)

的内容analytics.task.js

module.exports.run = (event, context, callback) => {
    console.log('Getting data...');

    console.log('success');
};
Run Code Online (Sandbox Code Playgroud)

出于测试目的,从运行方法中删除了所有其他代码。

内容tasks.js

const analyticsTask = require('./src/tasks/analytics.task');

module.exports.analytics = analyticsTask.run();
Run Code Online (Sandbox Code Playgroud)

和内容serverless.yml

functions:
  analyticsDataProcess:
    handler: tasks.analytics
    description: 'Send analytics data to the backend server'
    events:
      - schedule:
          name: analytics-data-process-task
          description: 'Send analytics data every minute'
          rate: rate(1 minute)
          enabled: true
Run Code Online (Sandbox Code Playgroud)

但是运行任务的时候却报错

{
    "errorMessage": "e is not a function",
    "errorType": "TypeError",
    "stackTrace": …
Run Code Online (Sandbox Code Playgroud)

serverless-framework serverless

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

在 aws.com 上手动删除后无服务器 API 网关资源未返回

我试图删除GET在 AWS API Gateway 上手动创建的测试资源,但它删除了POST位于同一资源路径中的测试资源,现在当我sls deploy该 lambda 资源没有返回 API Gateway 的资源列表时:

functions:
  updateLibrary:
    environment:
      ...
    handler: updates/lambda.handler
    events:
      - http:
          path: library/updated
          method: post
          private: true
Run Code Online (Sandbox Code Playgroud)

缺少library/updated POST资源

AWS API Gateway 资源,缺少资源

开发阶段的旧部署与资源的样子library/updated POST

在此输入图像描述

sls deploy日志结果是什么:

functions:
  updateLibrary:
    environment:
      ...
    handler: updates/lambda.handler
    events:
      - http:
          path: library/updated
          method: post
          private: true
Run Code Online (Sandbox Code Playgroud)

我看到:

Serverless: Stack update finished...
Serverless: Invoke aws:info
Serverless: [AWS cloudformation 200 0.484s 0 retries] describeStacks({ StackName: '***********-********-***' })
Serverless: [AWS cloudformation …
Run Code Online (Sandbox Code Playgroud)

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

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

如何引用使用无服务器框架创建的 AWS lambda 函数的 Arn 和名称

我正在使用 Serverless Framework 创建 lambda 函数,并希望能够在 serverless.yml 的其他部分交叉引用其 Arn 和名称。

我很惊讶我发现这有多困难,因为如果 lambda 是通过普通的 CloudFormation 创建的,那么 !GetAtt 和 !Ref 似乎并不像我预期的那样工作。(AWS::Lambda::Function 返回 Ref 和 Fn::GetAtt 这将使这变得简单!)

我发现了一些帖子,其中提到了解决方案,但没有任何内容用简单的英语说明如何实现这一目标。

设置

无服务器.yml

...
functions:
  - ${file(functions/sendEmail.yml)}
...
Run Code Online (Sandbox Code Playgroud)

发送电子邮件.yml

sendEmail:
  handler: lambda-functions/send-email.handler
...
Run Code Online (Sandbox Code Playgroud)

尝试参考

阿恩

在模板的另一部分我尝试过:

...    
LambdaFunctionArn: !GetAtt sendEmail.Arn
Run Code Online (Sandbox Code Playgroud)

但是,当我部署时,我得到:

Error: The CloudFormation template is invalid: Template error: instance of Fn::GetAtt references undefined resource sendEmail
Run Code Online (Sandbox Code Playgroud)

我注意到最终的 CloudFormation 模板已将 sendEmail 转换为 sendEmailLambdaFunction,因此我尝试了:

LambdaFunctionArn: !GetAtt sendEmailLambdaFunction.Arn
Run Code Online (Sandbox Code Playgroud)

但收到类似的错误。

姓名

我也希望能够引用这个名字,但遗憾的是

!Ref sendEmail
Run Code Online (Sandbox Code Playgroud)

导致错误:

Error: The CloudFormation template is …
Run Code Online (Sandbox Code Playgroud)

aws-cloudformation aws-lambda serverless-framework

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

如何在 dotnet core lambda 中从 AWS 事件桥接收事件?

我无法找到如何使用 dotnet core(最好是 3.1)从 AWS 事件桥接收事件的示例。谢谢

amazon-web-services .net-core serverless-framework

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

将参数发送到AWS API网关websocket connect方法

我按照本教程使用 python、aws apigategay 和无服务器创建了一个小型聊天应用程序。连接到 Websocket 时,连接 ID 存储在数据库中。

一切都按预期进行,现在我希望能够通过角色连接到 Websocket,例如聊天允许客户和商店员工。

我正在尝试找到一种将参数发送到 connect 方法的方法,但到目前为止还没有运气。例如,当建立连接时,我想发送角色 ID 并存储在数据库中,以指定连接 ID 属于客户或存储员工。

我读到了有关 API 网关授权的内容,但问题是聊天将包含在已运行且不使用 AWS 授权的应用程序中。

有什么办法可以做到这一点吗?

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

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

如何将变量数组从 env.yml 发送到 serverless.yml?

我有一个env.yml文件,其中存储了一些应发送到serverless.yml. 我想将这个变量数组从 发送env.ymlserverless.yml

这。是我所拥有的env.yml

securityGroupIds:[sg-xxx]
subnetIds: [subnet-xx1, subnet-xx2, subnet-xx3, subnet-xx4]
Run Code Online (Sandbox Code Playgroud)

这就是我的serverless.yml

vpc:
      securityGroupIds: ${file(env.yml):securityGroupIds}
      subnetIds: ${file(env.yml):securityGroupIds}
Run Code Online (Sandbox Code Playgroud)

这就是我期待进入的serverless.yml东西sls print --stage dev

vpc:
      securityGroupIds:
        - sg-xxx
      subnetIds:
        - subnet-xx1
        - subnet-xx2
        - subnet-xx3
        - subnet-xx4
Run Code Online (Sandbox Code Playgroud)

它不起作用。我究竟做错了什么?

arrays yaml serverless-framework

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

无服务器框架 - JavaScript 堆内存不足

当我使用“无服务器离线”命令部署或 ru 服务时,我遇到了“JavaScript 堆内存不足”的问题。

我正在使用 Nestjs - 一个节点框架 - 并为节点 10x 构建项目。在我的终端上,我得到了下面的内容。

我发现了一些修复,例如

  1. 在终端上输入“node --max-old-space-size=1024 index.js”
  2. 使用这个包https://www.npmjs.com/package/increase-memory-limit
  3. 在 package.json 中的 script 标签上附加一些类似 ""scripts": { "webpacker": "node --max_old_space_size=4096" 的内容,这些不起作用。

有什么线索吗?

PS D:\m1_workspace\dw-api> serverless offline
Serverless: Compiling with Typescript...
Serverless: Using local tsconfig.json

<--- Last few GCs --->
al[21864:000001EF81231660]    20688 ms: Mark-sweep 1394.2 (1429.4) -> 1392.3 (1429.9) MB, 977.1 / 0.0 ms  (+ 0.0 ms in 62 steps since start of marking, biggest step 0.0 ms, walltime since start of marking …
Run Code Online (Sandbox Code Playgroud)

node.js aws-lambda serverless-framework nestjs

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

如何使用无服务器框架创建参数存储配置值?

我有以下使用无服务器框架项目的 serverless.yml 文件创建的队列:

resources:
  Resources:
    myAppSQSQueue:
      Type: "AWS::SQS::Queue"
      Properties:
        QueueName: "my-app-sqs-queue-${opt:stage, self:provider.stage}"
Run Code Online (Sandbox Code Playgroud)

如何获取创建的队列的 URL 并将其作为参数存储在 AWS Systems Manager 中?我需要将其存储在那里,以便该应用程序之外的其他应用程序知道如何访问它。

amazon-sqs serverless-framework aws-ssm aws-parameter-store

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

无服务器选项作为选项不起作用的默认值

您好,我正在尝试使用无服务器执行以下操作:如果我没有提供选项,我希望它选择另一个选项

${opt:fb,${opt:environment,'dev'}}
Run Code Online (Sandbox Code Playgroud)

然而,有些事情是错误的,因为这个错误总是在我打电话时出现sls deploy

A valid option to satisfy the declaration 'opt:fb,dev' could not be found.
Run Code Online (Sandbox Code Playgroud)

我不明白出了什么问题,因为显然它似乎正确选择了该值。能帮我一下吗?谢谢

serverless-framework serverless-architecture serverless aws-serverless

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