6

我的 CodeBuild 中有一个 buildspec.yml 文件,我想从 EC2 Systems Manager Parameter Store 中读取值。CodeBuild 支持通过parameter-store规范文件中的属性执行此操作。

问题是,我不知道如何使用在执行 buidlspec 之前设置的环境变量。

这是一个例子:

version: 0.2
env:
  variables:    
    RUNTIME: "nodejs8.10"
  #parameter-store vars are in the format /[stage]/[repo]/[branch]/[eyecatcher]/key
  parameter-store: #see https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec-ref-syntax
    LAMBDA_EXECUTION_ROLE_ARN: "/${STAGE}/deep-link/${BRANCH}/GetUri/lambdaExecutionRoleArn"
    ENV_SAMPLE_KEY: "/${STAGE}/deep-link/${BRANCH}/GetUri/key1"

phases:
  install:
    commands:  
      ...

如您所见,我正在使用 AWS 最佳实践来命名 EC2 Systems Manager Parameter Store 键。我想在我的所有阶段重复使用这个构建规范,所以硬编码不是一种选择。我在Value字符串中使用的变量EnvironmentVariables在我的 CodeBuild 项目中填充 - 因此它们在规范运行之前可用。

如何使用非硬编码的内容动态填充Value参数存储?Keys

4

3 回答 3

11

CodeBuild 现在支持此变量扩展以用于参数存储用例。您可以在构建规范中定义任何环境变量,并在路径中引用该变量以获取参数存储。

version: 0.2
env:
  variables:
    stage: PRE_PROD
  parameter-store:
    encryptedVar: CodeBuild-$stage
phases:
  build:
    commands:
      - echo $encryptedVar
于 2020-02-15T00:51:28.853 回答
6

我发现这个 StackOverflow 帖子- 不幸的是,您描述的功能似乎不存在。
如果能够使用类似于 CloudFormation 模板中的功能的参数和函数,那就太好了。

于 2018-05-21T15:32:59.930 回答
0

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html

它没有明确说明,但我猜你可以在任何用于构建解析字符串的 cloudformation 模板中使用 !Sub,并在 ParameterOverride 中使用它来传递到常规参数块中的构建规范而不是参数 -存储块

于 2019-03-20T04:49:12.640 回答