🐷
【CI/CD】tfcmtを導入してterraformのCI/CDを改善する
tfcmtとは
Plan/Apply結果をPR等に通知してくれる
おかげでいちいちCI/CDツールを見に行かなくて済
やる事
以前CodeBuildでCI/CDを組んだaws-terraformに
tfcmtを組んでPRに通知される様にします。
パラメータストアに環境変数の設定
Githubにアクセスする際に認証が必要なのでGITHUB_TOKENが必要になる。
今回はGithubで作成しAWSのパラメータストアに保存する。
- AWS にログイン → システムマネージャー → パラメータストア → パラメータの作成
- "名前"を入力
"安全な文字列"にチェック
"値"を入力
- パラメータを作成
参考資料:
コードの編集
パラメータストアの値をCodebuildから取得し、scriptsで使う
codebuild/buildspec-dryrun.yml
version: 0.2
env:
parameter-store:
GITHUB_TOKEN: "codebuild-github-token"
phases:
install:
commands:
- chmod +x ${CODEBUILD_SRC_DIR}/scripts/install.sh
- ${CODEBUILD_SRC_DIR}/scripts/install.sh
build:
commands:
- chmod +x ${CODEBUILD_SRC_DIR}/scripts/dryrun.sh
- ${CODEBUILD_SRC_DIR}/scripts/dryrun.sh
codebuild/buildspec-apply.yml
version: 0.2
env:
parameter-store:
GITHUB_TOKEN: "codebuild-github-token"
phases:
install:
commands:
- chmod +x ${CODEBUILD_SRC_DIR}/scripts/install.sh
- ${CODEBUILD_SRC_DIR}/scripts/install.sh
build:
commands:
- chmod +x ${CODEBUILD_SRC_DIR}/scripts/apply.sh
- ${CODEBUILD_SRC_DIR}/scripts/apply.sh
scripts/install.sh
#!/bin/sh
set -ex
TERRAFORM_VERSION="1.5.4"
TFCMT_VERSION="v4.4.3"
wget -q "https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip"
unzip -d /usr/local/bin "terraform_${TERRAFORM_VERSION}_linux_amd64.zip"
wget "https://github.com/suzuki-shunsuke/tfcmt/releases/download/${TFCMT_VERSION}/tfcmt_linux_amd64.tar.gz" -P /tmp
tar zxvf /tmp/tfcmt_linux_amd64.tar.gz -C /tmp
mv /tmp/tfcmt /usr/local/bin/tfcmt
scripts/dryrun.sh
#!/bin/sh
set -ex
terraform init -var USERID=${userID} -input=false -no-color -backend-config="key=terraform.tfstate" -backend-config="bucket=zukkie-terraform-state"
terraform validate -no-color
tfcmt plan -- terraform plan -no-color -var USERID=${userID}
scripts/apply.sh
#!/bin/sh
set -ex
terraform init -var USERID=${userID} -input=false -no-color -backend-config="key=terraform.tfstate" -backend-config="bucket=zukkie-terraform-state"
terraform validate -no-color
tfcmt apply -- terraform apply -auto-approve -no-color -var USERID=${userID}
Plan/Apply通して問題なければ結果がPRに通知される
最終的なコード
Discussion