【问题标题】:Using AWS::CodeBuild::Project Environment variable in cloudformation template of repository在存储库的 cloudformation 模板中使用 AWS::CodeBuild::Project 环境变量
【发布时间】:2019-04-11 09:32:40
【问题描述】:

我想为 Lambda 函数创建一个持续交付管道。

如本docs所示,AWS::CodeBuild::Project的自定义环境变量可以在buildspec.yaml中使用如:

aws cloudformation package --template-file template.yaml --s3-bucket $MYEVVARKEY --output-template-file outputtemplate.yaml

还想在存储库的 SAM 模板中使用那些 CodeBuild Project 环境变量。如下所示,我尝试使用美元符号,但它没有将它作为键,而是作为文本:

# template.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  TimeFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: $MY_FN_NAME_ENV_VAR
      Role: $MY_ROLE_ARN_ENV_VAR
      Handler: index.handler
      Runtime: nodejs8.10
      CodeUri: ./

那么,是否可以在 SAM 模板中使用 CodeBuild Project 环境变量,如果可以,实现此目的所需的符号是什么?

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation aws-codebuild aws-sam


    【解决方案1】:

    CloudFormation 不能引用环境变量,不管是 SAM 还是plain。您可以做的是通过 CodeBuild buildspec.yaml 文件 (--parameters ParameterKey=name,ParameterValue=${MY_ENV_VAR}) 中的 shell 将环境变量作为参数传递。

    记得在Parameters部分添加相应的参数。

    如果你使用aws cloudformation deploy,那么你应该使用--parameter-overrides,这是一种更简单的形式:

    --parameter-overrides \
        YourParam=${YOUR_ENV_VAR} \
        Foo=Bar \
    

    【讨论】:

    • 谢谢,但你能告诉我这个parameters 标志可以在哪里使用吗? AWS CLI docs for aws cloudformation package 不要把它作为一个选项。
    • package 仅处理模板并解析部署包引用。之后您需要调用deploy,它实际执行模板,这就是您传递参数的时刻。我编辑了答案以包含 SAM 参数。
    • 是的,我使用cloudformation deploy,附录似乎就是我想要的?
    猜你喜欢
    • 2018-04-30
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 2019-09-05
    • 2017-06-25
    • 2020-02-04
    • 2017-06-17
    相关资源
    最近更新 更多