标签: serverless-framework

如何以DRY方式定义变量

假设我有写入S3存储桶的功能.所以存储桶名称显然是一个"变量",不应该硬编码到函数中(例如,对于dev与prod可能是不同的存储桶).

现在,如果我希望函数能够访问它,我需要在至少两个地方使用存储桶名称:

  1. 在功能的IAM策略中(允许访问存储桶).
  2. 在功能本身.

对于#1,我可以使用变量,并参考在s-module(或在v0.4 :)中调用的任何IAM策略中的变量.

对于#2,我可以使用env var,我可以在运行时在函数代码中访问它的值.

但我当然不希望两次定义变量(一次使用sls env set和一次在s-variables文件中).那不是很干.但是,我没有看到在定义envars时引用变量的方法,反之亦然.

我怎么能在一个地方定义桶名?

serverless-framework

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

如何在Serverless 1.0中更改aws凭据?

我尝试使用带有多个AWS凭据的Serverless 1.0.(在我的电脑上,安装了1.3.0)

我发现一些描述"admin.env"可以更改堆栈溢出或github问题中的凭据,但我找不到如何编写以及将admin.env放在何处.admin.env有什么好的文件吗?

amazon-web-services serverless-framework

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

使用AWS Lambda编译本机代码(npm install)的软件包

我需要使用sharp包来调整Lambda函数中的图像大小,但它在我的Windows机器上执行"npm install"时会构建本机代码,这肯定不适用于托管Lambda的Amazon Linux服务器.

使用无服务器时,建议的解决方法是什么?

lambda aws-lambda serverless-framework serverless-architecture sharp

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

在无服务器lambda中返回HTTP错误代码的正确方法是什么

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

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

使用DeletionPolicy保留创建的无服务器服务更新Dynamodb表

我在使用无服务器框架时遇到一些问题,因为我不小心在另一个服务上使用了相同名称的服务。

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

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

AWS-无服务器脱机框架上是否提供API密钥?

我使用无服务器脱机开发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

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

如何使用AWS APIGateway和Lambda返回多个cookie?

我试图通过APIGateway将两个cookie从Lambda返回给客户端(Postman).我提到了aws博客,可以向客户端返回1个cookie.

https://aws.amazon.com/jp/blogs/compute/simply-serverless-using-aws-lambda-to-expose-custom-cookies-with-api-gateway/

但我不知道返回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

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

将AppSync和Amazon RDS与无服务器-graphql一起使用

有一个很好的存储库,其中包含不同无服务器方案的示例实现。

现在,我正在努力将AppSync和Amazon RDS结合使用。我尝试了独立rds的实现,以及存储库中提供的appsync示例。这些工作就像一种魅力。但是,如果您想组合使用这些技术,显然存在许多差异和困难。我使用了rds目录中的架构,解析器和处理程序函数,并将其与appsync lambda实现结合在一起。我调整了映射模板并更新了serverless.yml文件。

我可以成功部署整个appsync服务和所有资源,而不会出现任何错误。我可以从graphiql访问graphql端点并进行查询。但是当我从appsync控制台尝试时,我得到null作为响应。我想这与映射模板有关,但我不太确定。

是否有人对此特定组合有任何建议或可行的示例?

amazon-rds node.js graphql serverless-framework aws-appsync

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

DynamoDB w / Serverless,使用Fn :: GetRef引用全局二级索引

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

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

导出Lambda ARN

我想导出使用无服务器框架创建的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

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