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>
:モジュール内の名前、モジュール外では識別できません。providers
:data
ブロック内にprovidersの指定が可能lifecycle
:data
ブロック内にlifecycle
ブロックを記述することは可能- 今後機能提供するためのものなので、現時点は何もできません
注意:
<data_source>
と<local_nanme>
の組み合わせはモジュール内で一意でなければなりません。- 取得情報が他のリソースと依存関係ある場合、
data
ブロック内でdepends_on
定義を使用することも可能です。ただ推奨はしません。 - Data resources support
count
andfor_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例:
<data_source>
:template_file
:bashファイルなどのスクリプトをデータとして使用するlocal_file
:ローカルPCのファイルのデータを読み取るaws_iam_policy
:Generates an IAM policy document in JSON format.
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>
コメント