普段、個人開発で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-connectorCloud 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.comIAMの設定
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.serviceAgentgcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
--member=serviceAccount:service-YOUR_PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
--role=roles/storage.objectAdminTerraform形式で出力
最後に、outputsディレクトリを作成しTerraform形式でリソースを出力していきます。
以下のコマンドで出力用のディレクトリを作成します
mkdir outputs次に、以下のコマンドでリソースを出力します
gcloud beta resource-config bulk-export \
--path=./outputs \
--project=YOUR_PROJECT_ID \
--resource-format=terraform以上です。ここからterragruntで使えるように整形する予定なので、機会があれば共有してみようと思います。