HashiCorpはTerraform 0.12をこの夏にリリースする予定だ。このリリースには、コミュニティから待望されていた改善が含まれている。特に次のような変更が注目される。式の第1級のサポート、for
式、条件句だ。新しいバージョンにアップグレードする場合、破壊的な変更になる場合がある。
式の第1級のサポートによってTerraformのスクリプトはシンプルになる。また、この言語に追加の利点を提供する。現在のバージョンでは、式はダブルクォートで囲う必要があり、補間シーケンスとして扱う必要がある。0.12のリリースで、式は言語のネイティブな一部になり、次のように直接的に書けるようになる。
variable "ami" {}
# Terraform 0.11 and earlier
resource "aws_instance" "example" {
ami = "${var.ami}"
}
# Terraform 0.12
resource "aws_instance" "example" {
ami = var.ami
}
この変更によって[...]と{...}を使ったlistとmapの構文が式で直接書けるようになる。新しいfor
式と一緒に使うとlistとmapの動的なフィルタリングと変換が実現できる。if
節を使って結果のフィルタリングもできる。
# Terraform 0.12
output "instance_public_ip_addresses" {
value = {
for instance in aws_instance.example:
instance.id => instance.public
if instance.associate_public_ip_address
}
}
条件演算子( … ? … : …)はすでにTerraformにあるが、両方の戻り値が評価されなければならないため利用に限界がある。次のリリースでは、これが修正され、条件演算子は期待通りの動きをする。また、他の大きな改善として、条件演算子がどのような型でも利用できるようになる。
# Terraform 0.12
locals {
first_id = length(azurerm_virtual_machine.example) > 0 ? azurerm_virtual_machine.example[0].id : ""
}
Terraformの現在のバージョンでは、上の書き方は失敗する。式の結果がどうであれ両方の値を評価するからだ。
Terraformにこのような変更が加わることで構成ファイルの書き直しが必要になる。Terraformのコアチームは破壊的な変更が最小限になるようにしている、と話しているが、アップグレードガイドではバージョン0.12への移行の支援が準備されている。スクリプトの中でTerraformのバージョンを固定することが推奨されている。コアチームは今回のリリースのために構成の変更にフォーカスすることで破壊的な変更を最小限にしつつ、将来の機能についての素早い方向転換も実現できる、と考えている。コアチームは継続して今回の変更についてブログで発信し、今回の変更について、そして、未来の改善についてのコミュニティからのフィードバックを受け付けている。
Rate this Article
- Editor Review
- Chief Editor Action