如何使SAM模板文件在两个不同的环境中工作?

时间:2019-05-19 11:56:06

标签: amazon-web-services aws-lambda aws-api-gateway

我正在使用AWS SAM将lambda部署到AWS。我创建了一个template.yaml文件,SAM将使用此文件来生成打包的Yaml。它工作正常,但我不知道如何为两个环境prodstaging制作相同的模板文件。我想为不同的环境更改lambda函数名称和API网关paht。例如,我想将其命名为mylambda-prod用于生产,并将mylambda-staging命名为暂存。函数名称以硬编码方式在模板文件中定义。以下是我的模板文件。如何使函数名称和API网关路径具有动态性?我知道我可以定义两个不同的模板文件,但是我正在寻找一种更好的方法。

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: hello-world/
      Handler: app.lambdaHandler
      Runtime: nodejs8.10
      Events:
        HelloWorld:
          Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
          Properties:
            Path: /hello
            Method: post

1 个答案:

答案 0 :(得分:0)

我认为您不能更改函数名称,但可以动态分配路径,并结合使用Map和Parameters来基于不同的参数值使用不同的值。像这样的东西:

Parameters: 
  Environment: 
  Type: String
  Default: dev
Mappings: 
  PathsMap:
     dev:
       path1: /hello1
       path2: /hello2
     prd:
       path1: hello11
       path2: /hello12

在函数定义中,您可以像这样分配路径

Path: !FindInMap [ PathsMap, !Ref Environment, path1]

您可以在部署模板时覆盖参数值