Google Cloudにリソースをデプロイしたら、Terraform を使用して Infrastructure as Code(IaC)を管理する必要があります。Google では、プロジェクト、フォルダ、組織内のリソースの Terraform コードを生成するためのツールを提供しています。
ロール
アセットを Terraform にエクスポートするために必要な権限を取得するには、組織、フォルダ、またはプロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
- 
  
  
    
      Service Usage ユーザー(roles/serviceusage.serviceUsageConsumer)
- 
            既存のバケットに状態を書き込む場合(--storage-path=BUCKET):- ストレージのオブジェクト作成者(roles/storage.objectCreator)
- ストレージ オブジェクト閲覧者(roles/storage.objectViewer)
 
- ストレージのオブジェクト作成者(
- 
            新しいバケットに状態を書き込んでいる場合:
              
  
  
    
      Storage オブジェクト閲覧者 (roles/storage.objectViewer)
ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
始める前に
- 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.」
始める前にの手順に沿って作業を進めてください。