Terraformのdataとは何か?

Terraformには、dataキーワードが確保されています。このキーワードを用いることで、外部データを参照することが可能です。 ここでの外部データとは、各プロバイダーが発するクラウド・インフラストラクチャ・アプリ・およびサービスが発するデータのことです。

例えば、aws_availability_zonesを使用して、現在利用可能なリージョンを取得することができます。

data "aws_availability_zones" "az_available" {
  state = "available"
}

このaws_avilability_zonesには型があり、その型は各プロバイダーから提供されます。

補足1:べた書き(ハードコーディング)で対応する場合は、dataではなくmoduleで対応

上記のような利用可能なリージョンの一覧をべた書きで対応する場合は、dataキーワードではなくmoduleキーワードで対応する。

module "subnet" {
      azs = ["us-west-1b", "us-west-1c"]
}

terraformのdataの別の使い道:.tfstateファイルの状態を把握する

terraformでは、terraform_remote_stateを使用して、異なるterraformワークスペース.tfstateファイルの状態を確認することができます。

次の例では、兄弟のディレクトリに当たるamericaディレクトリにあるtf.stateファイルの状態を確認しています。

data "terraform_remote_state" "bitslovers_vpc" {
  backend = "local"
  config = {
    path = "../america/terraform.tfstate"
  }
}

あるいは.tfstateファイルの管理方法として、よく見かけるベストプラクティスでS3に保存し一元管理する手法についても、dataキーワードでサポートできます。

data "terraform_remote_state" "bitslovers_vpc" {
  backend = "s3"
  config = {
    bucket  = "bitslovers-remotestate"
    key     = "blog/us_east_1/dev/terraform.tfstate"
    region  = "us-east-1"
    encrypt = true
  }
}

そして読み込まれたdataを使用する際には、${data.terraform_remote_state.bitslovers_vpc.subnet_id}からアクセスできるのです。

resource "aws_instance" "bitslovers" {
  subnet_id = "${data.terraform_remote_state.bitslovers_vpc.subnet_id}"
}

ポイントは、読み込まれるsubnet_id目線ではリモートだろうがローカルだろうかを意識する必要がないという点です。

それらの切り替えはterraformのコマンドを実行するディレクトリの位置で調整が可能なのです。

Terraform

title:Terraformのdataの使い方【Terraform学習サイト】

category_script:True

Dear My Frends.: 個人開発宣伝ラボ - 個人開発者が間違った施策で時間を溶かさないための、心理学と実務知見のナレッジ共有コミュニティ