Google Cloud にリソースをデプロイしたら、Terraform を使用して Infrastructure as Code(IaC)を管理する必要があります。Google では、プロジェクト、フォルダ、組織内のリソースの Terraform コードを生成するためのツールを提供しています。
始める前に
Cloud Shell を準備します。
Cloud Shell を起動し、デプロイ対象のリソースの Terraform コードを生成するデフォルトの Google Cloud プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。
Cloud Shell で、Config Connector のコマンドライン インターフェース(CLI)をインストールします。
gcloud components install config-connector
Config Connector を使用すると、Google Cloud の Terraform 一括エクスポート ツールを使用できます。
ERROR: (gcloud.components.install) You cannot perform this action because the Google Cloud CLI component manager is disabled for this installation
が表示された場合は、代わりに次のコマンドを実行します。sudo apt-get install google-cloud-sdk-config-connector
Cloud Asset API を有効にします。
gcloud services enable cloudasset.googleapis.com
このエクスポートに使用するサービス アカウントを作成します。
gcloud beta services identity create --service=cloudasset.googleapis.com
Cloud Asset サービス エージェント(
gcp-sa-cloudasset.iam.gserviceaccount.com
)にroles/servicenetworking.serviceAgent
ロールがあることを確認します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \ --role=roles/servicenetworking.serviceAgent
Cloud Asset サービス エージェント(
gcp-sa-cloudasset.iam.gserviceaccount.com
)にroles/storage.objectAdmin
ロールがあることを確認します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \ --role=roles/storage.objectAdmin
制限事項
一部のリソースタイプは、Terraform Google プロバイダでサポートされていますが、Terraform 形式へのエクスポートではサポートされていません。Terraform 形式へのエクスポートでサポートされているリソースタイプを一覧表示するには、gcloud beta resource-config list-resource-types
コマンドを実行します。
プロジェクト構成全体を Terraform HCL コードにエクスポートする
gcloud beta resource-config bulk-export --resource-format=terraform
コマンドは、プロジェクト、フォルダ、または組織に構成されているリソースをエクスポートし、HCL コード形式で画面に出力します。
gcloud beta resource-config bulk-export \ --project=PROJECT_ID \ --resource-format=terraform
出力をディレクトリ構造に書き込む
プロジェクトの構成を出力するディレクトリをまだ作成していない場合は、作成します。
mkdir OUTPUT_DIRECTORY
プロジェクトの構成全体をディレクトリにエクスポートします。
gcloud beta resource-config bulk-export \ --path=OUTPUT_DIRECTORY \ --project=PROJECT_ID \ --resource-format=terraform
--path
フラグには、HCL コードの出力先を指定します。
コマンドを実行すると、各リソースの HCL コードが、次のディレクトリ構造内の別々の .tf
ファイルに出力されます。
OUTPUT_DIRECTORY/projects/PROJECT_ID/RESOURCE_TYPE
出力を 1 つのファイルに書き込む
出力を画面に表示しない場合や、個別の .tf
ファイルを作成しない場合は、次の例に示すように、すべての出力を 1 つのファイルに書き込むことができます。
gcloud beta resource-config bulk-export \ --resource-format=terraform \ --project=PROJECT_ID \ >> gcp_resources.tf
出力をフィルタリングする
一括エクスポート コマンドの出力をフィルタリングするには、リソースタイプを指定します。
フィルタリングするサポート対象のリソースタイプを一覧表示する
Terraform 形式へのエクスポートでサポートされているリソースタイプを一覧表示するには、gcloud beta resource-config list-resource-types
コマンドを実行します。
gcloud beta resource-config list-resource-types
必要であれば、出力をファイルに書き込みます。
gcloud beta resource-config list-resource-types >> strings.txt
出力では、Compute Engine VM のリソースタイプが次のように表示されます。
KRM KIND: ComputeInstance
KRM KIND:
接頭辞は無視できます。
単一のリソースタイプをエクスポートする
ComputeInstance
などの文字列を使用して、プロジェクトの特定のリソースタイプを HCL コード形式でエクスポートします。
gcloud beta resource-config bulk-export \ --resource-types=RESOURCE_TYPE \ --project=PROJECT_ID \ --resource-format=terraform
--resource-types
フラグには、出力するリソースタイプを指定します。
複数のリソースタイプをエクスポートする
VM インスタンスとファイアウォール ルールを HCL コード形式でエクスポートします。
gcloud beta resource-config bulk-export \ --resource-types=ComputeFirewall,ComputeInstance \ --project=PROJECT_ID \ --resource-format=terraform
エクスポートするリソースタイプをファイルに指定する
tf-output
という名前のディレクトリを作成します。cd && mkdir tf-output && cd tf-output
types.txt
という名前のファイルを作成し、リソースタイプのリストを追加します。次に例を示します。ComputeBackendBucket ComputeBackendService ComputeForwardingRule
--resource-types-file
フラグを指定してgcloud beta resource-config bulk-export
コマンドを実行します。gcloud beta resource-config bulk-export \ --resource-types-file=types.txt \ --path=tf-output \ --project=PROJECT_ID \ --resource-format=terraform
指定したリソースタイプがプロジェクトに含まれていない場合、コマンドは成功しますが、そのリソースタイプに関する出力はありません。
トラブルシューティング
次のエラーが表示された場合:
「Permission denied during export.Please ensure the Cloud Asset Inventory API is enabled.」
始める前にの手順に沿って作業を進めてください。