今回はnullについてです。
■ はじめに
「null」・・・。
なんとなく、意味はわかるけどきちんと調べたことがなかった(もしかしたら調べるほどのものでもないのかもしれないけど)、私は調べたので、、、ここに備忘を兼ね記載致します。
■ null とは
多少の語弊があるかもですが、
「terraformの引数や変数を定義したくないときに使う」ことが多いです。
例えば、以下のコードの場合(=変数が未定義の場合にデフォルト値を設定する例)
variable "example_variable" {
type = string
default = null
description = "example_variable"
}
var.example_variable が他の場所(plan/apply実行時に明示的に変数を渡してあげたり、var-filesで変数定義ファイルを指定していないときが該当。)で定義されていないときにはnull が指定されるため、未定義時のエラー回避を行うことができます。
「default = "test"」 のように何か意味のある値を入れることももちろんできますが、何も定義したくないときなどで null が使えます。
■ null の利用パターン
いくつか代表的なものを記載致します。
1.変数が未定義の場合にデフォルト値を設定する
これは、前述のパターンのため、コードは割愛
2.リソースが作成されていない場合にデフォルト値を設定する
data "aws_subnet" "example" {
id = "subnet_id"
}
resource "aws_instance" "example" {
subnet_id = try(data.aws_subnet.example.id, null)
# 他のリソースの設定
}
data.aws_subnet.exampleが取得できない場合、
aws_instance.example の subnet_id プロパティには null が設定されます。
aws_instanceのsubnet_id はOptional のため割愛することができ、サブネットIDを指定せずに null を定義することで subnet_idが未定義になったときのエラーを回避することができます。
3.プロパティが存在しない場合にデフォルト値を設定する
resource "aws_s3_bucket_notification_configuration" "example" {
bucket = "example-bucket"
lambda_function {
function_arn = "lambda_function_arn"
filter_suffix = try(var.suffix, null)
}
}
lambda_function.filter_suffix プロパティが未定義の場合、 null が設定されます。filter_suffix プロパティが存在する場合、その値が設定されます。
以上です。