Closed2

[terraform]template_fileでS3にアップロード

myabaoumyabaou

template_file関数を利用し
ファイル生成→zip化→S3へアップロードという処理をterraformで実装しています。

現状だとapply時にzipファイルが生成されないため、
apply → ファイル生成&zip化
再度applyしS3にアップロードと2回applyを実行する必要があります。
2回目のapplyを失念してしまう可能性を考慮し、
一度のapplyでzip化→S3へのアップロードというとこまで
実施できるようにしたいのですが、実装したことがあるかた
いますか?
いればどのように実装しているかアドバイスいただきたいです。

  • コード中身(一部省略)
resource "aws_s3_bucket" "src" {
  bucket = "${var.project}-${var.env}-codedeploy"
  acl    = "private"
  versioning {
    enabled = true
  }

}

data "template_file" "codedeploy" {

  for_each = toset(var.default_config.file_list)
  template = file("${path.module}/template_deploy/${each.value}")
  vars = {
    parametername = var.default_config.parametername
    sourcedir     = var.default_config.sourcedir
  }
}

resource "local_file" "codedeploy" {
  for_each = toset(var.default_config.file_list)
  content  = data.template_file.codedeploy[each.key].rendered
  filename = "./${var.default_config.output_dir}/${each.value}"
}

data "archive_file" "appspec" {
  type        = "zip"
  source_dir  = "./${var.default_config.output_dir}"
  output_path = "./${var.default_config.output_dir}.zip"

  depends_on = [local_file.codedeploy]
}



resource "aws_s3_bucket_object" "deploy" {
  bucket = aws_s3_bucket.src.id
  key    = "${var.default_config.output_dir}.zip"
  source = data.archive_file.appspec.output_path

  etag = filemd5("${data.archive_file.appspec.output_path}")

  depends_on = [
    data.archive_file.appspec,
    local_file.codedeploy
  ]
}

myabaoumyabaou

template_fileのプロバイダーは今後使わなくなりそうなので
クローズ。
今後はtemplatefile Functionに置き換えやね。

このスクラップは2022/03/14にクローズされました