我正在尝试为 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
我用来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) 我试图删除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资源
开发阶段的旧部署与资源的样子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
我正在使用 Serverless Framework 创建 lambda 函数,并希望能够在 serverless.yml 的其他部分交叉引用其 Arn 和名称。
我很惊讶我发现这有多困难,因为如果 lambda 是通过普通的 CloudFormation 创建的,那么 !GetAtt 和 !Ref 似乎并不像我预期的那样工作。(AWS::Lambda::Function 返回 Ref 和 Fn::GetAtt 这将使这变得简单!)
我发现了一些帖子,其中提到了解决方案,但没有任何内容用简单的英语说明如何实现这一目标。
...
functions:
- ${file(functions/sendEmail.yml)}
...
Run Code Online (Sandbox Code Playgroud)
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) 我无法找到如何使用 dotnet core(最好是 3.1)从 AWS 事件桥接收事件的示例。谢谢
我按照本教程使用 python、aws apigategay 和无服务器创建了一个小型聊天应用程序。连接到 Websocket 时,连接 ID 存储在数据库中。
一切都按预期进行,现在我希望能够通过角色连接到 Websocket,例如聊天允许客户和商店员工。
我正在尝试找到一种将参数发送到 connect 方法的方法,但到目前为止还没有运气。例如,当建立连接时,我想发送角色 ID 并存储在数据库中,以指定连接 ID 属于客户或存储员工。
我读到了有关 API 网关授权的内容,但问题是聊天将包含在已运行且不使用 AWS 授权的应用程序中。
有什么办法可以做到这一点吗?
amazon-web-services aws-lambda aws-api-gateway serverless-framework
我有一个env.yml文件,其中存储了一些应发送到serverless.yml. 我想将这个变量数组从 发送env.yml到serverless.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)
它不起作用。我究竟做错了什么?
当我使用“无服务器离线”命令部署或 ru 服务时,我遇到了“JavaScript 堆内存不足”的问题。
我正在使用 Nestjs - 一个节点框架 - 并为节点 10x 构建项目。在我的终端上,我得到了下面的内容。
我发现了一些修复,例如
有什么线索吗?
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) 我有以下使用无服务器框架项目的 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 中?我需要将其存储在那里,以便该应用程序之外的其他应用程序知道如何访问它。
您好,我正在尝试使用无服务器执行以下操作:如果我没有提供选项,我希望它选择另一个选项
${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
aws-lambda ×5
serverless ×2
.net-core ×1
amazon-s3 ×1
amazon-sqs ×1
arrays ×1
aws-ssm ×1
nestjs ×1
node.js ×1
yaml ×1