【Terraform】Terraform ~ 基本編 / Data Sources ~

■ はじめに

https://dk521123.hatenablog.com/entry/2023/05/03/000000

の続き。

Terraform の Data Sources(データソース) について扱う。

目次

【1】データリソース - data
【2】利用例
【3】サンプル
 例1:AWS S3
 例2:AWS Region
【4】filter
 1)サンプル

【1】データリソース - data

* 読み取り専用のリソースで
 Data Sources を定義すると、Terraform で定義されたリソース情報を参照可能
 => 既に作成済みのリソースなどの情報を取得できる

https://developer.hashicorp.com/terraform/language/data-sources

【2】利用例

* 手動で作成したVPCのID情報などを取得する

【3】サンプル

例1:AWS S3

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/s3_bucket

data "aws_s3_bucket" "selected" {
  bucket = "your-s3-bucket-name"
}

# 使い方
locals {
  s3_arn = data.aws_s3_bucket.selected.arn
}

例2:AWS Region

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/region

data "aws_region" "current" {
  current = true
}

locals {
  # AWS Region
  aws_region = data.aws_region.current.name
  # account id
  aws_account_id = data.aws_caller_identity.current.account_id
}

provider.tf

# Configure the AWS Provider
provider "aws" {
}

【4】filter

* filterを使って、リソースを絞り込むことが可能
 => 以下のサンプルを見れば、分かると思う

https://qiita.com/yuta_vamdemic/items/be3cf73c8df29a52f5ec

1)サンプル

例1:VPC情報を取得する
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/vpc

# Filter でVPC名「demo-vpc」を指定して
# NameタグからVPC情報を取得する例
data "aws_vpc" "vpc" {
  filter {
    name   = "tag:Name"
    values = ["demo-vpc"]
  }
}

# 使い方
locals {
  # 上で取得したVPC情報「data.aws_vpc.vpc」から「id」を取得して
  # vpc_id に設定した例
  vpc_id = data.aws_vpc.vpc.id
}

例2:Subnet一覧情報を取得する(複数Filter)
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/subnets

data "aws_subnets" "private_subnets" {
  # 第一段階として、VPC ID でフィルタを掛ける
  filter {
    name   = "vpc-id"
    values = [local.vpc_id] # 例1の local の中にある vpc_id を指定
  }
  # 第二段階として、Subnet名が「demo-subnet-private*」 でフィルタを掛ける
  filter {
    name   = "tag:Name"
    values = ["demo-subnet-private*"]
  }
}

関連記事

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 ~ tfstate / Backend ~
https://dk521123.hatenablog.com/entry/2023/05/05/004939
Terraform ~ 基本編 / 変数 ~
https://dk521123.hatenablog.com/entry/2023/12/24/173633
Terraform ~ テンプレート ~
https://dk521123.hatenablog.com/entry/2023/05/22/101325
Terraform ~ Terraformあれこれ ~
https://dk521123.hatenablog.com/entry/2023/05/15/205352
Terraform ~ tfenv / バージョン管理 ~
https://dk521123.hatenablog.com/entry/2023/01/14/000000