🚀

Terraformでスクリプトを実行する方法まとめ

2021/10/02に公開

スクラップにまとめてたのが、検索上位にきてたので記事化しました👍

  • 一度だけの実行で良い場合
  • 複数回の実行が必要な場合

でやり方が変わります。

一度だけの実行で良い場合

provisionerを利用する

resource "aws_instance" "web" {
  # ...

  provisioner "local-exec" {
    command = "echo The server's IP address is ${self.private_ip}"
  }
}

特徴

  • デフォルトは初回のリソース作成時の作成完了後に動作する
  • オプション指定when=destroyで削除時の削除直前に動作する
  • リソースの更新時に実行するのは無理そう

https://www.terraform.io/docs/language/resources/provisioners/syntax.html#destroy-time-provisioners

複数回の実行が必要な場合

null_resourceを使う

resource "null_resource" "run_script" {
  triggers = {
    ここに更新契機のパラメータ
  }
  
 provisioner "local-exec" {
    command = "スクリプト実行のためのコマンド"
  }
}

特徴

  • triggerに指定したパラメータの更新タイミングで毎回実行できる
  • sha256関数と組み合わせるとファイル更新時に走らせる実装も可能

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

https://discuss.hashicorp.com/t/re-triggering-shell-script-in-terraform/2988/2

Discussion