← All Articles

TerraformでローカルPCのコマンドを実行する

Posted on

はじめに

terraformdではローカルPCのコマンドを実行できないと思っていましたが、 provisionerのlocal-execで実行できることが分かったのでこちらにメモしておきます。

ポイントとして、teraform applyの度にコマンドを実行したかったので

triggersの中で変数に時刻を設定して、リソースが作り直されるようにしています。

ここのサンプルでは、[a.txt]を作成するだけですが、実装しだいで色々なことができそうです。

検証環境

■OS

macOS BigSur

■ Terraform

v1.1.7

ローカルにファイルを配置するだけのtfファイルを作成する

main.tfを作成して以下のterrafomのリソースを記載します。

resource "null_resource" "touch_a_txt" {
  triggers = {
    ## applyごとにコマンドが実行されるように設定
    always_run = "${timestamp()}"
  }

  provisioner "local-exec" {
    command = "touch a.txt"
  }
}

terraform apply を実行する

terraform apply を実行します。

そうするとコマンドラインでは以下のような結果になって、同じディレクトリに「a.txt」というファイルができているはずです。

% terraform apply  

Terraform used the selected providers to generate the following execution plan. Resource actions are
indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # null_resource.touch_a_txt will be created
  + resource "null_resource" "touch_a_txt" {
      + id       = (known after apply)
      + triggers = (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

null_resource.touch_a_txt: Creating...
null_resource.touch_a_txt: Provisioning with 'local-exec'...
null_resource.touch_a_txt (local-exec): Executing: ["/bin/sh" "-c" "touch a.txt"]
null_resource.touch_a_txt: Creation complete after 0s [id=8523764003773982442]

参考文献

local-exec Provisioner

How to always run local-exec with Terraform

技術Terraform