Aws lambda 如何在';sam包/部署';?

Aws lambda 如何在';sam包/部署';?,aws-lambda,aws-serverless,Aws Lambda,Aws Serverless,我正在Jenkins包装我们的AWS SAM部署,作为CI/CD管道的一部分。例如,我只想在合并时将“live”别名添加到lambda,但我希望“branchbuilds”没有别名。这使得开发人员可以在AWS中测试代码,而不需要“实时”。除了在我运行“sam包/部署”之前替换template.yaml的一部分之外,还有其他方法可以实现这一点吗 --更新-- 看起来我可以使用参数在lambda中创建环境,但我不知道如何在它们之间切换。这看起来像: Parameters: MyEnv:

我正在Jenkins包装我们的AWS SAM部署,作为CI/CD管道的一部分。例如,我只想在合并时将“live”别名添加到lambda,但我希望“branchbuilds”没有别名。这使得开发人员可以在AWS中测试代码,而不需要“实时”。除了在我运行“sam包/部署”之前替换template.yaml的一部分之外,还有其他方法可以实现这一点吗

--更新-- 看起来我可以使用参数在lambda中创建环境,但我不知道如何在它们之间切换。这看起来像:

Parameters:
  MyEnv:
    Description: Environment of this stack of resources
    Type: String
    Default: testing
    AllowedValues: 
      - testing
      - prod
那么我可以引用这个w/:

    Environment:
      Variables:
        ENV: !Ref: MyEnv

如果有人知道如何在运行时切换这个参数,这就解决了我的问题。

我已经成功了。My template.yaml:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  sams-app
Globals:
  Function:
    Timeout: 3
Parameters:
  Stage:
    Type: String
    Description: Which stage the code is in
    Default: test
    AllowedValues:
      - test
      - prod
Resources:
  HelloWorldSQSFunction:
    Type: AWS::Serverless::Function 
    Properties:
      Role: arn:aws:iam::xxxxxxxxxxxx:role/service_lambda_default1
      CodeUri: hello_world/
      Handler: app.lambda_handler
      Runtime: python3.7
      AutoPublishAlias: !Ref Stage
      DeploymentPreference:
       Type: AllAtOnce
      Environment:
        Variables:
          STAGE: !Ref Stage
Outputs:
  HelloWorldSQSFunction:
    Description: "Hello World SQS Lambda Function ARN"
    Value: !GetAtt HelloWorldSQSFunction.Arn

我的lambda代码:

import json
import os

def lambda_handler(event, context):
    stage = os.environ['STAGE']
    print(f"My stage is: {stage}")

    return {
        "statusCode": 200,
    }
要在本地运行它(我使用Cloud9):

需要注意的一点是,这将导致“sam验证”失败。有关这方面的信息,请参阅:

特别感谢您对此帖子的评论:

DEVELOPER:~/environment/sams-app $ sam local invoke --parameter-overrides Stage=prod
Invoking app.lambda_handler (python3.7)

Fetching lambci/lambda:python3.7 Docker container image......
Mounting /home/ec2-user/environment/sams-app/hello_world as /var/task:ro,delegated inside runtime container
START RequestId: 85da81b1-ef74-1b7d-6ad0-a356f4aa8b76 Version: $LATEST
My stage is: prod
END RequestId: 85da81b1-ef74-1b7d-6ad0-a356f4aa8b76
REPORT RequestId: 85da81b1-ef74-1b7d-6ad0-a356f4aa8b76  Init Duration: 127.56 ms        Duration: 3.69 ms       Billed Duration: 100 ms Memory Size: 128 MB     Max Memory Used: 22 MB

{"statusCode":200}