CodePipelineからCodeBuildに環境変数を追加するCloudFormationを定義してみた


はじめに

CodeBuildを共通化してCodePipelineにて環境変数を渡すだけで環境を分離したCI/CDを実現している方も多いと思います。
CodePipeline自体をCloudFormationでコード管理しており、CodePipelineからCodeBuildに環境変数を追加する際にどのようにテンプレートで表せばよいか格闘した記事です。

CodeBuild定義テンプレート

CloudFormationにおけるCodePipelineの定義はこちらに記載されてます。
CodeBuildの環境変数を定義する箇所は「Configuration」のプロパティであることはわかっていたが、記載方法が全くない!!

AWS CLIからCodePipelineの設定確認

という訳で、AWS CloudShellからAWS CLIを叩いてPipelineの情報を取ってきて調べた。
「configuration」プロパティに環境変数の情報があったので、これでテンプレも書けそうだ。

            {
                "name": "Build",
                "actions": [
                    {
                        "name": "Build",
                        "actionTypeId": {
                            "category": "Build",
                            "owner": "AWS",
                            "provider": "CodeBuild",
                            "version": "1"
                        },
                        "runOrder": 1,
                        "configuration": {
                            "EnvironmentVariables": "[{\"name\":\"TEST\",\"value\":\"test\",\"type\":\"PLAINTEXT\"}]",
                            "ProjectName": "test-build"
                        },
                        "outputArtifacts": [
                            {
                                "name": "OutputArtifact"
                            }
                        ],
                        "inputArtifacts": [
                            {
                                "name": "SourceArtifact"
                            }
                        ],
                        "region": "ap-northeast-1"
                    }
                ]
            },

テンプレート

EnvironmentVariablesの値が文字列であることに注意!!
初めに見た時に「なんだリストで書けばいいのか」と勘違いして失敗しました・・・
テンプレートはCodeBuildの箇所だけ抜粋してます。

      Stages:
        - Name: Build
          Actions:
            - Name: Build
              ActionTypeId:
                Category: Build
                Owner: AWS
                Version: 1
                Provider: CodeBuild
              Configuration:
                EnvironmentVariables: '[{"name":"TEST","value":"test","type":"PLAINTEXT"}]'
                ProjectName: !Ref CodeBuildProject
              RunOrder: 1
              InputArtifacts:
                - Name: SourceArtifact
              OutputArtifacts:
                - Name: OutputArtifact

意外とドキュメントを読んでもわからないこともあるので、仮でリソースを作成してみてAWS CLIから設定情報を確認するのが手っ取り早いと思います。
誰かしらの手助けになればと思います。