広告

Terraform-Data Sources

GCP

Data Sourcesは外部の情報、または他のTerraformで定義した情報をTerraform内に持ち込むために使用されます。

また、リソース(resource block)によって作成されているリソース(managed resources)も、データの取得もできます。
区別としては、resourceブロックはリソースの作成、更新、削除が行われるに対して、dataブロックはデータの取得のみが発生します。

data sourcesの定義

data sourcesの定義は、dataブロックで定義します。

書き方:

data "<data_source>" "<local_nanme>" {
  # 中身で、取得対象リソースに対して、取得するデータを定義する
  # 取得可能な情報は、各providerのresourceブロックに定義できる情報を参照してください。
}
  • <data_source>:取得するData Sourcesリソースの種類の指定。providerごとに指定する内容が違います。
  • <local_nanme>:モジュール内の名前、モジュール外では識別できません。
  • providersdataブロック内にprovidersの指定が可能
  • lifecycledataブロック内にlifecycleブロックを記述することは可能
    • 今後機能提供するためのものなので、現時点は何もできません

注意:

  • <data_source><local_nanme>の組み合わせはモジュール内で一意でなければなりません。
  • 取得情報が他のリソースと依存関係ある場合、dataブロック内でdepends_on定義を使用することも可能です。ただ推奨はしません。
  • Data resources support count and for_each meta-arguments as defined for managed resources, with the same syntax and behavior.

local-only Data sources

Data Sourcesの取得の多くはネットワーク経由でAPIから取得するものですが、ローカルで処理して使用するData sourcesもあります。

local-only Data sources例:

The behavior of local-only data sources is the same as all other data sources, but their result data exists only temporarily during a Terraform operation, and is re-calculated each time a new plan is created.
local-only Data sourcesは一時的な情報です。planが更新されるたびに再処理されます。

data sourcesの使用

参考:https://www.terraform.io/docs/providers/google/d/compute_instance.html

data sourceからデータを呼び出すには、data.<data_source>.<local_nanme>.<指定のデータ>で呼び出します

# providerブロックは省略している

# Data Source定義
data "google_compute_instance" "exist_instance" {
    name = "test-instance-sample01"  # このGCEが事前に作成されていることが必要
    zone = "asia-northeast1-a"
}

# Data source定義で取得したGCEインスタンスの情報をすべて出力する
# Resourceからデータを取得すると比べて、`data.`が追加されたぐらいです。
output "source_data_sample01_all_info" {
    value       = data.google_compute_instance.exist_instance  # data.<data_source>.<local_nanme>でデータを呼び出す
    sensitive   = false
    description = "value from data source"
    depends_on  = []
}

# GCEインスタンスのプライベートIPを出力する
output "source_data_sample01_ip_info" {
    # Data source定義で取得したGCEインスタンスの情報をすべて出力する
    value       = data.google_compute_instance.exist_instance.network_interface[0].network_ip
    sensitive   = false
    description = "value from data source"
    depends_on  = []
}

GCP権限管理参考

権限参考:https://cloud.google.com/iam/docs/understanding-roles?hl=ja

TerraformでGCP権限管理する:https://www.terraform.io/docs/providers/google/r/google_project_iam.html

既存ユーザー権限一覧は以下のgcloudコマンドで確認できます。

gcloud projects get-iam-policy <Project_ID>

コメント

タイトルとURLをコピーしました