🕌

[Terraform小ネタ] zip前のファイルの変更を検知して更新があればzip化する

2021/09/05に公開

前提

Lambda用じゃないです。

課題

CodeBuild で zip 化した buildspec.yml をアップロードする必要があるが、単純に Data Souce の archive_file だと、毎回Zip化が行われる。

そしてビルドする OS が同じなら sha が同じなので問題ないが、CIを回していると sha が異なってしまい、毎回違う zip と認識される。そうすると archive_file と連動している resource にも影響がでるので何とか改善したい問題。

どこかの記事で resource "null_resource" を使う例を見たけど locals で表現することが推奨されるようになったので、新たに記録しておく。

hcl
resource "null_resource" "trigger" {
  triggers = {
    index = filebase64sha256("${path.module}/codebuild/buildspec.yml")
  }
}

locals {
  zip_name    = "buildspec.zip"
  trigger_id  = null_resource.trigger.id
  source_file = "${path.module}/codebuild/buildspec.yml"
}

data "archive_file" "buildspec" {
  type        = "zip"
  output_path = ".terraform/${local.zip_name}"
  source_file = local.source_file
}

Discussion