Terraform
https://gyazo.com/80c32d339bd3c95e05f10b4ffa8e0ce0
AWSやAzureやGCPの設定をコードで書ける
HCLの主要ブロック
provider
resource
data
variable
output
locals
module
コマンド(の一部)
--
参考
resource同士で依存関係がある場合、どういう順番で作成するべきかを判断する
また可能な限り並列にリリースを作成するので速い
create_before_destroyを使う
instance_refreshを使うべき(?)
文法
count
code:tf
resource "aws_iam_user" "example" {
count = length(var.user_names)
}
古い書き方っぽい
不便そうmrsekut.icon
そもそもcountが関数的なものでなくattributeなのが意味不明すぎ
配列の内容を変更したときに作り直されてしまう罠とかある
条件分岐
for_each
collectionに対してループして、each.keyとeach.valueでアクセスできる
code:tf
resource "aws_iam_user" "example" {
for_each = toset(var.user_names)
name = each.value
}
for
[for <ITEM> in <LIST> : <OUTPUT>]
code:tf
output "short_upper_names" {
}
リスト内包表記的
文字列ディレクティブ
%{...}
↑$ではなく
文字列内でインラインの制御構文(for, if, etc.)を使える
arrays[*]
gitignore
code:.gitignore
.terraform
*.tfstate
*.tfstate.backup
なんか文法の名前らしい
<<-EOFとEOFは、\nを入れなくても複数行にわたる文字列を渡せる
こんなものまであるんだ
不満mrsekut.icon
静的解析がやや弱い
されるのはされる
resource名のtypoとかが検出されていない
aws_launch_configuration.example.nameのように参照する時に、
aws_launch_configuration.exampleの定義には一見nameというものがないのに参照できるのが難しい
暗黙のattributeのようなものが存在している
それを一覧する術がない
例えばtsならgo to definitionして型定義ファイルを見れば一覧できるわけだがそういうのがない
Terraformのコードからダイアグラム図を生成する良さげなツールがない
Style Guide
Stacks
BETA
Files and Directories
Syntax
Resources
Data Sources
Variables and Outputs
Modules
Moved block
Terraform block
Backend block
Checks
Import
Expressions
Functions
State
Tests
Upgrading to Terraform v1.11
v1.x Compatibility Promises