はじめに
apply後の確認に使ったり、関数の検証に使用しています。
- terraform console
- 変数の値や式の結果を確認することができます。
- Command: console | Terraform by HashiCorp
aws_instanceの情報を確認する
Consoleから確認することが手間なときや、ほしい情報をoutputで出力しているけどそのログが流れている時に使っています。
tfファイルの格納フォルダに移動します $ terraform console > aws_instance.Server { "ami" = "ami-0bcc04d20228d0cf6" "associate_public_ip_address" = false "availability_zone" = "ap-northeast-1a" "cpu_core_count" = 1 "cpu_threads_per_core" = 2 "instance_state" = "running" "instance_type" = "t3.medium" (略) } > aws_instance.Server.private_ip "192.168.XXX.XXX" > aws_instance.Node[*].private_ip [ "192.168.XXX.XXX", "192.168.XXX.XXX", ] > exit $
関数を使う
以下はよく使っています。
> path.root "." > > abspath(path.root) "/home/ec2-user/xxx" >
- templatefile
- 指定されたパスでファイルを読み取り、変数を使用して置換します。
- templatefile - Functions - Configuration Language | Terraform by HashiCorp
$ cat test.xml.tpl <abc> <123>${XXX}</123> </abc> $ terraform console > templatefile ("${path.root}/test.xml.tpl", {XXX=456}) <<EOT <abc> <123>456</123> </abc> EOT >
- chomp
- 文字列の最後にある改行文字を削除します。
- chomp - Functions - Configuration Language | Terraform by HashiCorp
- templatefileで置き換えたのですが、最後の改行が悪さをし意図した通りに動かなかったことがあるんです。
> "hello\n" <<EOT hello EOT > chomp("hello\n") "hello" > chomp("hell\no\n") <<EOT hell o EOT >
様々な関数がありますので、試してみてください。
https://www.terraform.io/language/functions
terraform consoleを閉じずに、terraform applyを実行すると
以下のエラーメッセージが出力されます。
terraform consoleを閉じると解決します。
│ Error: Error acquiring the state lock │ │ Error message: ConditionalCheckFailedException: The conditional request failed │ Lock Info: │ ID: XXXXXXXXXXXXXXXXXXXXX │ Path: XXXXXXXXXXXXXXXXXXXXX/terraform.tfstate │ Operation: OperationTypeInvalid │ Who: ec2-user@XXXXXXXX.ap-northeast-1.compute.internal │ Version: 1.1.7 │ Created: 2022-05-03 13:52:05.537742246 +0000 UTC │ Info: │ │ │ Terraform acquires a state lock to protect the state from being written │ by multiple users at the same time. Please resolve the issue above and try │ again. For most commands, you can disable locking with the "-lock=false" │ flag, but this is not recommended.