Amazon web services 在定义单个AWS::Serverless::函数的SAM模板中指定多个API阶段和Lambda别名

Amazon web services 在定义单个AWS::Serverless::函数的SAM模板中指定多个API阶段和Lambda别名,amazon-web-services,aws-lambda,aws-serverless,aws-sam,aws-sam-cli,Amazon Web Services,Aws Lambda,Aws Serverless,Aws Sam,Aws Sam Cli,我的目标是什么 我正在尝试编写一个(单个)SAM模板,用于获取由Api网关事件触发的Lambda函数 我希望有多个API阶段(比如“dev”、“testing”、“prod”),并希望每个阶段都映射到具有相同名称的Lambda别名上 我不希望在每次部署时生成新的lambda版本,我喜欢手动设置每个lambda别名使用的lambda版本。当然,“dev”别名意味着指向$LATEST代码版本 我尝试了什么,得到了什么 我修改了经典的“hello_world”模板,如下所示。 现在,当第一次部署(比如

我的目标是什么 我正在尝试编写一个(单个)SAM模板,用于获取由Api网关事件触发的Lambda函数

我希望有多个API阶段(比如“dev”、“testing”、“prod”),并希望每个阶段都映射到具有相同名称的Lambda别名上

我不希望在每次部署时生成新的lambda版本,我喜欢手动设置每个lambda别名使用的lambda版本。当然,“dev”别名意味着指向$LATEST代码版本

我尝试了什么,得到了什么

我修改了经典的“hello_world”模板,如下所示。 现在,当第一次部署(比如部署到“dev”)时,一切似乎都按预期工作。 但是,如果我尝试部署到“测试”阶段,那么这个新阶段的API将响应,而“开发”阶段的API将停止响应

我错过了什么

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  zzzz

  Sample SAM Template for zzzz

# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
  Function:
    Timeout: 3

Parameters:
  StageAliasName:
    Description: stage / alias name to be used in this deploy
    Type: String
    AllowedValues:
      - prod
      - stage
      - dev
      - v1
    Default: dev

Resources:
  ApiGatewayApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: !Ref StageAliasName

  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.lambda_handler
      Runtime: python3.8
      AutoPublishAlias: !Ref StageAliasName
      FunctionName: zzz
      Environment:
        Variables:
          stage: !Ref StageAliasName
      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:
            RestApiId: !Ref ApiGatewayApi
            Path: /hello
            Method: GET
#            Auth:
#              ApiKeyRequired: true



Outputs:
  # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function
  # Find out more about other implicit resources you can reference within SAM
  # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api
#  HelloWorldApi:
#    Description: "API Gateway endpoint URL for Prod stage for Hello World function"
#    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/"
  HelloWorldFunction:
    Description: "Hello World Lambda Function ARN"
    Value: !GetAtt HelloWorldFunction.Arn
  HelloWorldFunctionIamRole:
    Description: "Implicit IAM Role created for Hello World function"
    Value: !GetAtt HelloWorldFunctionRole.Arn


我和你有同样的问题,发现这个:。看起来SAM取代了之前的阶段


这个jun chap执行一些手动步骤使其工作。很高兴知道它能工作,但有点破坏了“基础架构即代码”,我想我将使用ansible为不同的环境生成不同版本的模板,然后运行它。

感谢@ident的回复。我知道如何使用其他工具来实现这一点,但我认为必须有一种方法在模板中定义这一切:这就是我要寻找的。