【Terraform】Terraform ~ null_resource / terraform_data ~

■ はじめに

https://dk521123.hatenablog.com/entry/2023/05/23/002314

などで使う機会があった Terraform の null_resource について
ちゃんと理解する
勉強中に、terraform_data  ってのも知ったので、それもメモ。

目次

【1】null_resource
 1)用途
 2)構文
 3)使用例
【2】terraform_data
 1)用途

【1】null_resource

* 何もしないresource
 => 他のresourceができあがったことをトリガーとして、
  プロビジョニング(必要なものを準備すること)を行うことができる

https://registry.terraform.io/providers/hashicorp/null/latest/docs/resources/resource

1)用途

* 他のリソースの状態変化に合わせてコマンドを実行する

2)構文

resource "null_resource" "cluster" {
  # トリガーとなる条件を指定
  # 指定したリソースが変更されると、null_resource 内の provisioner の処理が実行される
  # Changes to any instance of the cluster requires re-provisioning
  triggers = {
    cluster_instance_ids = join(",", aws_instance.cluster[*].id)
  }

  # Bootstrap script can run on any instance of the cluster
  # So we just choose the first in this case
  connection {
    host = element(aws_instance.cluster[*].public_ip, 0)
  }

  # 実行したいコマンドを定義
  provisioner "remote-exec" {
    # Bootstrap script called with private_ip of each node in the cluster
    inline = [
      "bootstrap-cluster.sh ${join(" ",
      aws_instance.cluster[*].private_ip)}",
    ]
  }
}

3)使用例

https://dk521123.hatenablog.com/entry/2024/05/31/005406

# Step1: Lambdaレイアーの実ファイル作成準備
resource "null_resource" "prepare_to_make_demo_layer_file" {
  triggers = {
    "requirements_diff" = filebase64("${path.module}/../lambda/requirements.txt")
  }

  provisioner "local-exec" {
    command = <<-EOF
      rm -rf ${path.module}/../outputs/layer/ &&
      pip install -r ${path.module}/../lambda/requirements.txt -t ${path.module}/../outputs/layer/python
    EOF

    on_failure = fail
  }
}

【2】terraform_data

* Terraform 1.4 で導入

https://developer.hashicorp.com/terraform/language/resources/terraform-data

1)用途

[1] null_resource の代わりに使う
[2] replace_triggered_by に使用する

参考文献
https://zenn.dev/kou_pg_0131/articles/tf-1_4-terraform-data

参考文献

https://qiita.com/hayaosato/items/d6049cf68c84a26845d2
https://kazuhira-r.hatenablog.com/entry/2023/11/05/174542

関連記事

Terraform ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/05/000224
Terraform ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/12/09/222057
Terraform ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/05/03/000000