【Terraform】Terraform ~ local ~

■ はじめに

Terraform の 変数について扱う。

目次

【0】Terraform の変数
【1】local
【2】Hello world
【3】List

【0】Terraform の変数

* 以下の2種類。
~~~~
1)ローカル変数 - local
2)変数 - variable
~~~~

* 以下のサイト、すごくいい記事、、、

https://zenn.dev/sway/articles/terraform_biginner_varliable

* 変数については、以下の関連記事を参照

Terraform ~ variable / 入門編 ~
https://dk521123.hatenablog.com/entry/2025/09/19/093537

【1】local

* ローカル変数の定義
 => locals セクションで定義

https://developer.hashicorp.com/terraform/language/values/locals

【2】Hello world

locals.tf (ローカル変数の定義)

locals {
  content  = "hello world!!!?"
  filename = "hello.txt"
}

main.tf (呼び出し元)

# ローカル変数の参照
resource "local_file" "helloworld" {
  # local.<key>で参照できる
  content  = local.content
  # ${local.<key>}でも参照できる(文字列連結時に使える)
  filename = "${local.filename}"
}

【3】List

* 以下の関連記事で使用

https://dk521123.hatenablog.com/entry/2025/09/18/003116

locals.tf (ローカル変数の定義)

# 対象の既存バケット名リスト
locals {
  s3_buckets = [
    "your-existing-bucket-a",
    "your-existing-bucket-b",
    "your-existing-bucket-c"
  ]
}

s3.tf (呼び出し元)

# 既存バケットをデータソースでまとめて参照
data "aws_s3_bucket" "target" {
  for_each = toset(local.s3_buckets)
  bucket   = each.value
}

# Lambdaへのinvoke権限 (for_eachで全バケット分)
resource "aws_lambda_permission" "allow_s3" {
  for_each = data.aws_s3_bucket.target

  statement_id  = "AllowExecutionFromS3-${each.key}"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.s3_event.function_name
  principal     = "s3.amazonaws.com"
  source_arn    = each.value.arn
}

# S3イベント通知 → Lambda (for_eachで全バケット分)
resource "aws_s3_bucket_notification" "notify" {
  for_each = data.aws_s3_bucket.target

  bucket = each.value.id

  lambda_function {
    lambda_function_arn = aws_lambda_function.s3_event.arn
    events              = ["s3:ObjectCreated:*", "s3:ObjectRemoved:*"]
  }

  depends_on = [ aws_lambda_permission.allow_s3 ]
}

参考文献

https://qiita.com/ringo/items/3af1735cd833fb80da75
https://capsulecloud.io/terraform-variable

関連記事

Terraform ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/05/000224
Terraform ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/12/09/222057
Terraform ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/05/03/000000
Terraform ~ 基本編 / Module ~
https://dk521123.hatenablog.com/entry/2023/05/19/113544
Terraform ~ variable / 入門編 ~
https://dk521123.hatenablog.com/entry/2025/09/19/093537
Terraform ~ variable / 基本編 ~
https://dk521123.hatenablog.com/entry/2025/09/20/002058
Terraform ~ Terraformあれこれ ~
https://dk521123.hatenablog.com/entry/2023/05/15/205352