假设我有写入S3存储桶的功能.所以存储桶名称显然是一个"变量",不应该硬编码到函数中(例如,对于dev与prod可能是不同的存储桶).
现在,如果我希望函数能够访问它,我需要在至少两个地方使用存储桶名称:
对于#1,我可以使用变量,并参考在s-module(或在v0.4 :)中调用的任何IAM策略中的变量.
对于#2,我可以使用env var,我可以在运行时在函数代码中访问它的值.
但我当然不希望两次定义变量(一次使用sls env set和一次在s-variables文件中).那不是很干.但是,我没有看到在定义envars时引用变量的方法,反之亦然.
我怎么能在一个地方定义桶名?
我尝试使用带有多个AWS凭据的Serverless 1.0.(在我的电脑上,安装了1.3.0)
我发现一些描述"admin.env"可以更改堆栈溢出或github问题中的凭据,但我找不到如何编写以及将admin.env放在何处.admin.env有什么好的文件吗?
我需要使用sharp包来调整Lambda函数中的图像大小,但它在我的Windows机器上执行"npm install"时会构建本机代码,这肯定不适用于托管Lambda的Amazon Linux服务器.
使用无服务器时,建议的解决方法是什么?
lambda aws-lambda serverless-framework serverless-architecture sharp
我有一个用Node.JS编写的无服务器lambda函数.
返回错误代码的最佳/正确方法是什么?
我现在使用的模式(它的工作原理!)是:
module.exports.endpoint = (event, context, callback) => {
const response = {
statusCode: 404,
body: JSON.stringify({ message: 'Hello World!' })
};
callback(null, response);
}
Run Code Online (Sandbox Code Playgroud)
当我拨打电话时,例如从POSTMAN到我的终端,我得到:
Status: 404 Not Found 这正是我所期待的.
而且,在日志中我可以看到:
Serverless: GET / (?: get)
Serverless: [404] {"statusCode":404,"body":"{\"message\":\"Hello World!\"}"}
Run Code Online (Sandbox Code Playgroud)
这很好用.
令我困扰的是,我正在传递null错误.看看其他一些教程/示例我发现了以下模式:
https://aws.amazon.com/blogs/compute/error-handling-patterns-in-amazon-api-gateway-and-aws-lambda/
https://serverless.com/framework/docs/providers/aws/events/apigateway/
callback ("the sky is falling!");
callback("[BadRequest] Validation error: Missing field 'name'");
callback("[404] Not Found");
callback(new Error('[404] Not found'));
callback(JSON.stringify(myErrorObj));
所有这些都很有意义,你可以指定HTTP状态代码 - 但我最终获得的是HTTP状态代码200.当我查看日志时,我可以看到错误是在200之后:
Serverless: GET / (?: get)
Serverless: …Run Code Online (Sandbox Code Playgroud) node.js aws-lambda aws-api-gateway serverless-framework serverless
我在使用无服务器框架时遇到一些问题,因为我不小心在另一个服务上使用了相同名称的服务。
An error occurred: tableX - TableX already exists.
假设我有两个“ serverless.yml ”文件,两个文件的服务名称相同。其中一个(我们称其为“ test1 ”)具有资源(DynamoDB表),而另一个则没有(“ test2 ”)。像以下片段一样:
测试1
service: sandbox-core
provider:
name: aws
stage: core
runtime: nodejs6.10
region: sa-east-1
memorySize: 128
timeout: 300
resources:
Resources:
table3:
Type: 'AWS::DynamoDB::Table'
DeletionPolicy: Retain
Properties:
TableName: SandboxTable3
AttributeDefinitions:
-
AttributeName: provider
AttributeType: S
-
AttributeName: appId
AttributeType: S
KeySchema:
-
AttributeName: provider
KeyType: HASH
-
AttributeName: appId
KeyType: RANGE
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
table4:
Type: 'AWS::DynamoDB::Table'
DeletionPolicy: Retain
Properties:
TableName: SandboxTable4
AttributeDefinitions:
-
AttributeName: …Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-cloudformation amazon-dynamodb serverless-framework serverless
我使用无服务器脱机开发Web项目。
我需要API密钥才能访问无服务器 AWS Lamda上的资源。
我的服务和提供者都有一个serverless.yml 。
在Postman中,我访问了我的路由(http://127.0.0.1:3333/segments/UUID/test),并且没有任何错误(如Forbidden message),Lambda已执行...
test:
handler: src/Api/segment.test
events:
- http:
path: segments/{segmentUuid}/test
method: post
request:
parameters:
paths:
segmentUuid: true
private: true
Run Code Online (Sandbox Code Playgroud)
该路由不受私有保护。
yaml aws-lambda serverless-framework serverless serverless-framework-offline
我试图通过APIGateway将两个cookie从Lambda返回给客户端(Postman).我提到了aws博客,可以向客户端返回1个cookie.
但我不知道返回2种饼干.我试过这样,但没有工作.
return {
'cookie': 'aaa=bbb; secure' -> Okay, but just one cookie
# 'cookie': 'aaa=bbb; ccc=ddd; secure' -> ×
# 'cookie': ['aaa=bbb','ccc=ddd'] -> ×
}
Run Code Online (Sandbox Code Playgroud)
python amazon-web-services aws-lambda aws-api-gateway serverless-framework
有一个很好的存储库,其中包含不同无服务器方案的示例实现。
现在,我正在努力将AppSync和Amazon RDS结合使用。我尝试了独立rds的实现,以及存储库中提供的appsync示例。这些工作就像一种魅力。但是,如果您想组合使用这些技术,显然存在许多差异和困难。我使用了rds目录中的架构,解析器和处理程序函数,并将其与appsync lambda实现结合在一起。我调整了映射模板并更新了serverless.yml文件。
我可以成功部署整个appsync服务和所有资源,而不会出现任何错误。我可以从graphiql访问graphql端点并进行查询。但是当我从appsync控制台尝试时,我得到null作为响应。我想这与映射模板有关,但我不太确定。
是否有人对此特定组合有任何建议或可行的示例?
我有一个用DynamoDB表定义的API /服务。我有几个索引(定义为全局二级索引)来支持几个查询。我设计了具有GSI定义的表,以及看起来像正确的查询的表。但是,在进行查询时出现此异常:
{ AccessDeniedException: User: arn:aws:sts::OBSCURED:assumed-role/chatroom-application-dev-us-east-1-lambdaRole/chatroom-application-dev-getRoomMessages is not authorized to perform: dynamodb:Query on resource: arn:aws:dynamodb:us-east-1:OBSCURED:table/messages-table-dev/index/roomIndex
at Request.extractError (/var/task/node_modules/aws-sdk/lib/protocol/json.js:48:27)
at Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
at Request.emit (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (/var/task/node_modules/aws-sdk/lib/request.js:683:14)
at Request.transition (/var/task/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/var/task/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /var/task/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:685:12)
at Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:115:18)
message: 'User: arn:aws:sts::OBSCURED:assumed-role/chatroom-application-dev-us-east-1-lambdaRole/chatroom-application-dev-getRoomMessages is not authorized to perform: dynamodb:Query on resource: arn:aws:dynamodb:us-east-1:OBSCURED:table/messages-table-dev/index/roomIndex',
code: 'AccessDeniedException',
time: 2018-06-02T22:05:46.110Z,
requestId: 'OBSCURED',
statusCode: 400,
retryable: false,
retryDelay: 30.704899664776054 }
Run Code Online (Sandbox Code Playgroud)
在异常的最上方,它说我的getRoomMessages方法is not authorized to perform: dynamodb:Query on resource:的ARN并显示全局二级索引的ARN。
显然,我需要定义策略以授予访问全局二级索引的权限。但这还不清楚。我已经看到了有关DynamoDB的其他StackOverflow问题,他们抱怨文档零散,很难找到任何东西。我必须同意。“碎片化”一词太温和了。 …
amazon-dynamodb serverless-framework dynamodb-queries aws-serverless
我想导出使用无服务器框架创建的Lambda ARN,因为我需要在其他CF模板中使用此ARN
我在serverless.yml文件中定义了Outputs和Export。
resources:
Outputs:
ServiceLambdaFunctionQualifiedArn:
Export:
Name: MyServiceARN
Run Code Online (Sandbox Code Playgroud)
一切正常。
但是,导出包含Lambda版本ARN(即arn:aws:lambda:region:12345:function:servicename:2)。
这引起了问题,因为此ARN被其他CF使用,因此无法更新。
“导出MyServiceArn无法更新,因为xyz正在使用它”
有没有办法获得没有版本号的ARN?
谢谢你的帮助。
amazon-web-services aws-cloudformation aws-lambda serverless-framework
aws-lambda ×5
serverless ×3
node.js ×2
amazon-rds ×1
aws-appsync ×1
graphql ×1
lambda ×1
python ×1
serverless-framework-offline ×1
sharp ×1
yaml ×1