mito’s blog

IT技術メインの雑記。思い立ったが吉日。

[Terraform] terraform consoleで変数の値を確認したり、関数を使ってみる

はじめに

apply後の確認に使ったり、関数の検証に使用しています。


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"
>  


$ 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
>  


> "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.