LoginSignup
1
0

More than 3 years have passed since last update.

TerraformからCodePipelineのソースブランチの変更を無視したい

Last updated at Posted at 2020-09-30

背景

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"]]
  }
...
}

参考

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0