【问题标题】:Configuration of environment variables for different AWS Lambda aliases in CloudFormation templateCloudFormation 模板中不同 AWS Lambda 别名的环境变量配置
【发布时间】:2018-10-29 00:37:32
【问题描述】:

我为我的 AWS Lambda 函数创建了 CloudFormation 模板,我需要为不同的 lambda 别名指定不同的环境变量值。 我的模板如下所示:

AWSTemplateFormatVersion: "2010-09-09"

Transform: "AWS::Serverless-2016-10-31"

Description: Lambda function configuration

Resources:
  EndpointLambda:
    Type: "AWS::Lambda::Function"
    Properties:
      FunctionName: "endpoint-lambda"
      Handler: "com.test.aws.RequestHandler::handleRequest"
      Runtime: java8
      Code:
        S3Bucket: "lambda-functions"
        S3Key: "test-endpoint-lambda-0.0.1.jar"
      Description: Test Lambda function
      MemorySize: 256
      Timeout: 60
      Environment:
        Variables:
          ES_HOST: test-es-host-url
          ES_ON: true
          ES_PORT: 443
          ES_PROTOCOL: https
          REDIS_URL: test-redis-host-url

  QaLambdaAlias:
    Type: "AWS::Lambda::Alias"
    Properties:
      FunctionName: !Ref EndpointLambda
      FunctionVersion: 1
      Name: "QA"
      Description: "QA alias"

  ProdLambdaAlias:
    Type: "AWS::Lambda::Alias"
    Properties:
      FunctionName: !Ref EndpointLambda
      FunctionVersion: 1
      Name: "Prod"
      Description: "Production alias"

如您所见,我有两个别名 - QA 和 Prod 以及一堆环境变量。我在 lambda 函数声明中指定了具有公共值的变量。但我需要为 QA 别名 env 声明。与 QA 和 Prod 别名相关的变量值 - Prod 环境的值。有什么想法我该怎么做?

【问题讨论】:

  • 最好为 2 个不同的环境创建 2 个 lambda 函数。
  • @ittus 为什么比使用别名更好?
  • 安全最佳实践是为不同的环境设置不同的帐户,以最大限度地减少“爆炸半径”,以防出现安全漏洞。如果有人入侵了您的一个帐户(即环境),那么他们将无法访问其他帐户。
  • @Jeshan Babooa 说得好,谢谢!

标签: amazon-web-services aws-lambda yaml amazon-cloudformation


【解决方案1】:

您可以使用CloudFormation Parameters 来执行此操作。举个简单的例子:

Parameters:
  LambdaRuntime:
    Type: String
    Default: 'java8'
    Description: What Lambda runtime do we use?

Resources:
  QaLambdaAlias:
    Type: "AWS::Lambda::Alias"
    Properties:
      FunctionName:
        Ref: EndpointLambda
      FunctionVersion: 1
      Name: "QA"
      Description: "QA alias"
      Runtime:
        Ref: LambdaRuntime

然后,如果您想使用不同的参数,当您通过 CLI 部署时,您可以使用 parameter-overrides 覆盖,如下所示:

aws cloudformation deploy --stack-name MyStack --template-file \
CloudFormation/MyStack.yaml --capabilities CAPABILITY_IAM \
--parameter-overrides LambdaRuntime=nodejs8.10

【讨论】:

  • 另外,您还可以使用 YAML 锚点来重用重复的 CloudFormation sn-ps。 AWS 没有正式支持它,但正如我在 Github 上描述的那样,有一种方法可以做到:github.com/awslabs/serverless-application-model/issues/228
  • 但我无法为别名指定环境变量。当我尝试将“Environment”属性添加到“AWS::Lambda::Alias”时出现错误 - “Encountered unsupported property Environment”。
猜你喜欢
  • 2018-04-30
  • 2017-12-17
  • 1970-01-01
  • 2020-02-04
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 2018-04-05
相关资源
最近更新 更多