Amazon web services 如何使SAM模板文件适用于两种不同的环境?

Amazon web services 如何使SAM模板文件适用于两种不同的环境?,amazon-web-services,aws-lambda,aws-api-gateway,Amazon Web Services,Aws Lambda,Aws Api Gateway,我正在使用AWS SAM将lambda部署到AWS。我创建了一个模板。yaml文件和SAM将使用此文件生成打包的yaml。它工作正常,但我不知道如何为两个环境prod和staging创建相同的模板文件。我想为不同的环境更改lambda函数名和API网关paht。例如,我想将其命名为生产用的mylambda prod,而将其命名为暂存用的mylambda staging。函数名在模板文件中以硬编码方式定义。下面是我的模板文件。如何使函数名和API网关路径成为动态的?我知道我可以定义两个不同的模板文

我正在使用
AWS SAM
将lambda部署到AWS。我创建了一个
模板。yaml
文件和
SAM
将使用此文件生成打包的yaml。它工作正常,但我不知道如何为两个环境
prod
staging
创建相同的模板文件。我想为不同的环境更改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]
您可以在部署模板时覆盖参数值