如何在 AWS CodeBuild 规范文件中为“parameter-store”使用动态密钥?

How to use dynamic key for `parameter-store` in AWS CodeBuild spec file?

我的 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 字符串中使用的变量在我的 CodeBuild 项目中填充为 EnvironmentVariables - 因此它们在规范运行之前可用。

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

我找到了 this Whosebug post - 很遗憾,您描述的功能似乎不存在。
如果能够使用类似于 CloudFormation 模板中的功能的参数和函数,那就太好了。

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

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

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

version: 0.2
env:
  variables:
    stage: PRE_PROD
  parameter-store:
    encryptedVar: CodeBuild-$stage
phases:
  build:
    commands:
      - echo $encryptedVar