自由気ままに書いちゃおう

好きなことをつらつらと・・・

【Terraform】(初心者向け)null の使い方について

今回は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が未定義になったときのエラーを回避することができます。

Terraform Registry

 

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 プロパティが存在する場合、その値が設定されます。

 

 

以上です。