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]