Terraformは条件付き属性をサポートしていますか?変数の値に応じた属性のみを使用したい。
例:
resource "aws_ebs_volume" "my_volume" {
availability_zone = "xyz"
size = 30
if ${var.staging_mode} == true:
snapshot_id = "a_specific_snapshot_id"
endif
}
上記のif
ステートメントで属性snapshot_id
を囲んでいるのが、私が探しているものです。 Terraformは、変数の値に基づくそのような属性の包含をサポートしていますか?.
Terraform 0.12(まだリリースされていません)も HCL2のサポート をもたらします。これにより、次のようなものでnull許容引数を使用できます。
resource "aws_ebs_volume" "my_volume" {
availability_zone = "xyz"
size = 30
snapshot_id = "staging_mode ? a_specific_snapshot_id : null"
}
Null可能引数は この0.12プレビューガイド で説明されています。
今のところ、0.12より前では、 Markus の answer がおそらく最善の策ですが、次のようなcount
をもっと明示的に示します。
resource "aws_ebs_volume" "staging_volume" {
count=${var.staging_mode ? 1 : 0}
availability_zone = "xyz"
size = 30
snapshot_id = "a_specific_snapshot_id"
}
resource "aws_ebs_volume" "non_staging_volume" {
count=${var.staging_mode ? 0 : 1}
availability_zone = "xyz"
size = 30
}
リソース名は一意である必要があることに注意してください。そうしないと、Terraformが文句を言います。 前の0.12三進式は遅延ではない のようにaws_volume_attachment
などを使用してEBSボリュームを参照する必要がある場合、これにより問題が発生するため、次のようなものが機能しません。
resource "aws_volume_attachment" "ebs_att" {
device_name = "/dev/sdh"
volume_id = "${var.staging_mode ? aws_ebs_volume.staging_volume.id : aws_ebs_volume.non_staging_volume.id}"
instance_id = "${aws_instance.web.id}"
}
それは、任意の時点で有効なのは1つだけである三項の両側を評価しようとするためです。 Terraform 0.12では、これは当てはまりませんが、null可能引数を使用すると、より簡単に解決できます。
私はそのような機能を認識していませんが、ケースがあまり複雑でない場合は、この機能を使用してモデル化できます。ブール値true
およびfalse
は1
および0
と見なされるため、カウント内で使用できます。だからあなたは使うかもしれません
provider "null" {}
resource "null_resource" "test1" {
count= ${var.condition ? 1 : 0}
}
resource "null_resource" "test2" {
count = ${var.condition ? 0 : 1}
}
output "out" {
value = "${var.condition ? join(",",null_resource.test1.*.id) : join(",",null_resource.test2.*.id) }"
}
count
属性により、2つのリソースのうち1つだけが作成されます。
値にはjoin
を使用する必要があります。これは、2つの値のいずれかの存在を適切に処理するためです。
ありがとう ydaetskcor 指摘してくれた その答え 変数処理の改善。