如何使SAM模板文件适用于两个不同的环境



我正在使用 AWS SAM将我的lambda部署到AWS。我创建了一个template.yaml文件,SAM将使用此文件生成包装的YAML。它可以正常工作,但我不知道如何为两个环境prodstaging制作相同的模板文件。我想为不同的env更改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

我认为您可以更改功能名称,但是您可以动态分配路径并使用映射和参数的组合来基于不同的参数值具有不同的值。这样的东西:

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

和在您的功能定义中,您分配了这样的路径

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

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

最新更新