分别部署多个AWS Lambda

时间:2018-11-13 05:51:32

标签: python-3.x amazon-web-services aws-lambda serverless-framework aws-step-functions

我正在将无服务器框架1.32.0与AWS Lambdas和Python 3.6结合使用。我想以一种单独的方式部署多个Lambda,因为目前我只能对目录中的每个Lambda进行一次部署,这可能会在不久的将来与许多Lambda混淆。

这是我当前的项目结构:

└── cat_service
    │   
    ├── hello_cat
    │   ├── hello_cat-functions.yml
    │   └── service.py
    │   
    ├── random_cat_fact
    │   ├── random_cat_fact-functions.yml
    │   └── service.py
    │   
    └── serverless.yml

serverless.yml

service: cat-service 

provider:
  name: aws
  runtime: python3.6
  stage: dev
  stackName: cat-service
  deploymentBucket:
    name: test-cat-bucket
  role: arn:aws:iam::#{AWS::AccountId}:role/lambda-cat-role
  cfnRole: arn:aws:iam::#{AWS::AccountId}:role/cloudformation-cat-role

functions:
  - ${file(lambdas/hello_cat/hello_cat-functions.yml)}

stepFunctions:
  stateMachines:
    catStateMachine:
      definition:
        Comment: "Get cat hello"
        StartAt: hello_cat
        States:
          hello_cat:
            Type: Task
            Resource: "arn:aws:lambda:#{AWS::Region}:#{AWS::AccountId}:function:${self:service}-${opt:stage}-hello_cat"
            End: true

plugins:
  - serverless-step-functions
  - serverless-pseudo-parameters

hello_cat-functions.yml

msc_cat_facts:
  handler: service.handler
  name: ${self:service}-${opt:stage}-msc_cat_facts

问题在于,当我使用serverless deploy --stage dev进行部署时,它会压缩整个项目并且不会分隔lambda,因此AWS控制台中的实际Lambda显示为hello_cat但包含了整个项目结构,而不是将每个lambda文件都分离到其自己的目录中。

是否有一种方法可以仅使用一个serverless.yml在同一项目中部署单独的lambda?

谢谢。

2 个答案:

答案 0 :(得分:2)

您需要将无服务器配置为package individually

为此,请在您的serverless.yaml中添加以下内容:

package:
  individually: true

答案 1 :(得分:0)

除了包含到serverless.yml中(如@thomasmichaelwallace所建议的那样)之外,

package:
    individually: true

尝试将处理函数的路径更改为 hello_cat-functions.yml , 从handler: service.handler到:

msc_cat_facts:
   handler: hello_cat/service.handler
   name: ${self:service}-${opt:stage}-msc_cat_facts