【GCP】既存プロジェクトをTerraform形式で出力する

この記事では、Google Cloud Shellを利用して、Google Cloudの既存プロジェクトをTerraform形式で出力する手順について共有しています。

2024年05月15日

普段、個人開発でFirebaseを使っているものの、毎回同じ作業でプロジェクトを作成していることもあり、少々面倒くささを感じています。

今回は既存プロジェクトのリソースをTerraform形式で出力する方法について共有したいと思います。

下準備

Google Cloud Shellは、Google Cloud Platform(GCP)より提供されている、オンラインの開発環境です。ブラウザから直接アクセスでき、さまざまなツールがプリインストールされています。

こちらからコンソールに入り作業していきます。

Config ConnectorのCLIをインストール

通常のgcloud CLIでは、リソースの一括エクスポートができません。まずはConfig ConnectorのCLIを使えるようにしておく必要があります。

Config Connector は、Kubernetes を使用して Google Cloud リソースを管理できるオープンソースの Kubernetes アドオンです。
https://cloud.google.com/config-connector/docs/overview?hl=ja

まず、次のコマンドを実行してConfig Connector CLIをインストールします

gcloud components install config-connector

何らかの理由で上記のコマンドが失敗する場合は、以下のコマンドを使用して、必要なパッケージを直接インストールすることができます

sudo apt-get install google-cloud-sdk-config-connector

Cloud Asset API

Cloud Asset APIは、Google Cloudリソースの情報を取得、分析、エクスポートするためのAPIです。
IAMの設定をするため有効にしておきます。

Cloud Asset API では、プロジェクト レベルまたは組織レベルでアクセス制御を構成できます。 たとえば、プロジェクト内のすべての Cloud Asset Inventory リソースへのアクセス権をデベロッパーのグループに付与することができます。
https://cloud.google.com/asset-inventory/docs/access-control?hl=ja

以下のコマンドを使用して、Cloud Asset APIを有効にします

gcloud services enable cloudasset.googleapis.com

IAMの設定

Firebaseなどでプロジェクトを作成している場合、特定のサービスアカウント(gcp-sa-cloudasset.iam.gserviceaccount.com)が存在しないことがあります。

その場合は以下のコマンドで予め作成しておきましょう。

gcloud beta services identity create --service=cloudasset.googleapis.com --project=YOUR_PROJECT_ID

次に、以下のコマンドで各種権限を付与していきます。

gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
  --member=serviceAccount:service-YOUR_PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
  --role=roles/servicenetworking.serviceAgent
 gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
   --member=serviceAccount:service-YOUR_PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
   --role=roles/storage.objectAdmin

Terraform形式で出力

最後に、outputsディレクトリを作成しTerraform形式でリソースを出力していきます。

以下のコマンドで出力用のディレクトリを作成します

mkdir outputs

次に、以下のコマンドでリソースを出力します

gcloud beta resource-config bulk-export \
  --path=./outputs \
  --project=YOUR_PROJECT_ID \
  --resource-format=terraform

以上です。ここからterragruntで使えるように整形する予定なので、機会があれば共有してみようと思います。

筆者情報
IT業界経験6年目のフルスタックエンジニア。
フロントエンドを軸として技術を研鑽中でございます。