背景
TerraformでCodePipelineをデプロイしてる
パイプラインのソースは適宜ブランチを修正して実行する運用
修正後にTerraformからデプロイしようとすると、ブランチ部分が変更箇所として出てきてしまう
ソースブランチの変更をTerraformで無視したい
確認環境
$ terraform -version
Terraform v0.12.26
やること
下記のようなlifecycleを追加してあげればOK
stageとactionの引数(下記だと両方0)はコードによって変更が必要
lifecycle {
ignore_changes = [stage[0].action[0].configuration["BranchName"]]
}
ignore_changesの中身の指定方法
下記のコードで考える
resource "aws_codepipeline" "hogehoge" {
...
stage {
name = "Source"
action {
name = "Source"
provider = "CodeCommit"
...
configuration = {
BranchName = "master"
...
}
}
}
stage {
name = "Build"
action {
name = "Build"
provider = "CodeBuild"
...
configuration = {
...
}
}
}
}
こちらのようなコードの場合を考えると、lifecycleの中にBranchNameまでたどれば無視できる
もちろんその上位で指定すればまとめて無視は可能だが、他の部分の変更も検知しなくなるので、基本はフルで指定することをオススメする
まずstageは2つあり、下記のような記載になってるので、配列として扱い、1番目になるので stage[0]
と指定するとCodeCommit側を指定できる
stage {
...
stage {
同じ要領でactionも下記のようになっていて、1個しかないので、1番目の stage[0].action[0]
と指定する
action {
次にconfigurationだが、下記のように =
で入っているので、連想配列として指定する必要があるので、 stage[0].action[0].configuration["BranchName"]
と指定すれば良い
configuration = {
BranchName = "master"
...
}
そのため、下記を追加すれば該当の場所を無視できる
resource "aws_codepipeline" "hogehoge" {
...
lifecycle {
ignore_changes = [stage[0].action[0].configuration["BranchName"]]
}
...
}