既存の Google Cloud リソースの一括インポートとエクスポート
このページでは、config-connector bulk-export
コマンドと、そのコマンドを使用して Google Cloud リソースを Config Connector の YAML ファイルにエクスポートする方法について説明します。YAML ファイルは、その後 Config Connector にインポートできます。
config-connector bulk-export
は、Cloud Asset Inventory の エクスポート機能を使用して既存の Google Cloud リソースを検出します。Cloud Asset Inventory のエクスポートを提供することも、config-connector
がユーザーに代わってエクスポートを実行することもできます。
Cloud Asset Inventory は JSON 構造をエクスポートします。構造ごとに、リソースの名前、アセット インベントリのタイプ、祖先リソース(プロジェクト、フォルダ、組織)があります。アセット インベントリでサポートされているタイプを確認するには、サポートされているアセットタイプを参照してください。
始める前に
config-connector
ツールを使用して Cloud Asset Inventory から直接エクスポートする場合は、gcloud
で Google Cloud Identity のプロジェクトの Cloud Asset Inventory API を有効にします。gcloud services enable cloudasset.googleapis.com
一括エクスポートの例
この例では、Google Cloud CLI で PubSubTopic を作成し、Config Connector にインポートします。
Google Cloud CLI を使用して、
sample-topic
という名前のトピックを作成します。gcloud pubsub topics create sample-topic
トピックが作成されたという確認を受け取ります。
Created topic [projects/PROJECT_ID/topics/sample-topic].
この出力の
PROJECT_ID
は、Google Cloud プロジェクトに置き換えられます。次のコマンドを使用して、トピックの Google Cloud リソース名を取得し、環境変数に保存します。
TOPIC_RESOURCE_NAME=$(gcloud pubsub topics describe sample-topic --format "value(name)")
オブジェクトを識別するために、
config-connector
ツールは Cloud Asset Inventory JSON 構造を使用します。トピックのアセット JSON の構造を環境変数に保存します。TOPIC_ASSET='{"name":"//pubsub.googleapis.com/'"${TOPIC_RESOURCE_NAME}"'","asset_type":"pubsub.googleapis.com/Topic"}'
次のコマンドを実行して、アセットを
config-connector bulk-export
に渡します。echo ${TOPIC_ASSET} | config-connector bulk-export
出力は、YAML 形式の Config Connector リソースです。
--- apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic metadata: annotations: cnrm.cloud.google.com/project-id: PROJECT_ID name: sample-topic ...
この出力の
PROJECT_ID
は、Google Cloud プロジェクトに置き換えられます。このリソースを、
kubectl apply -f -
を使用して Config Connector に渡すことができます。リソースを直接渡すには、次のコマンドを実行します。echo ${TOPIC_ASSET} | config-connector bulk-export | kubectl apply -f - --namespace CC_NAMESPACE
CC_NAMESPACE は、Config Connector がリソースを管理する名前空間に置き換えます。
Config Connector がリソースを取得します。
kubectl describe
で Config Connector がリソースを管理していることを確認します。kubectl describe pubsubtopic sample-topic --namespace CC_NAMESPACE
CC_NAMESPACE
は、Config Connector がリソースを管理する名前空間に置き換えます。
クリーンアップ
PubSubTopic は config-connector bulk-export
と kubectl delete
で削除できます。
echo ${TOPIC_ASSET} | config-connector bulk-export | kubectl delete -f - --namespace CC_NAMESPACE
CC_NAMESPACE
は、Config Connector がリソースを管理する名前空間に置き換えます。
インポートするリソースの検出
リソースをインポートするときに、Cloud Asset Inventory のエクスポートを実行し、config-connector bulk-export
に結果を提供するか、config-connector bulk-export
にエクスポートを実行させることができます。
Cloud Asset Inventory のエクスポートからのインポート
Asset Inventory のエクスポートを提供するには、エクスポートを含むローカル ファイルへのパスを指定するか、エクスポートの結果をストリームの config-connector
にパイプします。
ローカル ファイルからのインポート
--input
パラメータでローカル ファイルを使用して、config-connector bulk-export
への Asset Inventory のエクスポートを指定できます。
config-connector bulk-export --input ASSET_INVENTORY_EXPORT
ASSET_INVENTORY_EXPORT
を、Cloud Asset Inventory エクスポートのファイル名に置き換えます。
STDIN からのインポート
STDIN に Asset Inventory を提供するには、エクスポートした結果を config-connector bulk-export
にパイプします。たとえば、エクスポートが export.json
という名前のローカル ファイルにある場合、エクスポート パラメータを指定せずにファイルの内容を config-connector bulk-export
にパイプ処理します。
cat export.json | config-connector bulk-export
STDIN での Asset Inventory のエクスポートのフィルタリング
Asset Inventory のエクスポートをフィルタリングするには、jq
ツールとパイプを使用して結果を config-connector bulk-export
に入力します。たとえば、ファイル EXPORT_FILE から PubSubTopic アセットのみをインポートする場合は、次のコマンドを実行します。
cat EXPORT_FILE | jq '. | select( .asset_type == "pubsub.googleapis.com/Topic" )' | config-connector bulk-export
config-connector を使用したインベントリのエクスポート
config-connector bulk-export
ツールは、Google Cloud のリソース階層からリソースをエクスポートできます。
プロジェクトのエクスポート
プロジェクトからすべてのリソースをエクスポートするには、--project
パラメータを使用します。
config-connector bulk-export --project PROJECT_ID
PROJECT_ID
は、Google Cloud プロジェクトに置き換えます。
フォルダのエクスポート
フォルダからすべてのリソースをエクスポートするには、--folder
パラメータを使用します。
config-connector bulk-export --folder FOLDER_NUMBER
FOLDER_NUMBER
を実際の Google Cloud フォルダ番号に置き換えます。
組織のエクスポート
組織からすべてのリソースをエクスポートするには、--organization
パラメータを使用します。
config-connector bulk-export --organization ORGANIZATION_ID
ORGANIZATION_ID
を Google Cloud プロジェクト ID に置き換えます。
Cloud Storage のロケーション
アセット インベントリのエクスポートの出力場所は、Cloud Storage URI です。config-connector bulk-export
は、エクスポートを実行するときに、Cloud Storage バケットを使用します。デフォルトでは、config-connector bulk-export
は一時バケットを作成します。バケット名を指定することもできます。
一時的な Cloud Storage バケット
--storage-key
パラメータを指定しない場合、ユーザーに代わって config-connector
bulk-export
が一時的な Cloud Storage バケットを作成します。バケットは、ストレージ バケットのデフォルト ロケーション(US
マルチリージョン)に作成されます。そのバケットはエクスポートが完了すると削除されます。
一時的なバケットの指定
バケットを指定するには、storage-key
パラメータで Cloud Storage URI を使用します。URI がバケットの名前のみの場合、エクスポート ストレージ オブジェクトの名前が生成されます。URI がストレージ オブジェクトへのフルパスの場合は、フルパスが使用されます。
config-connector bulk-export --storage-key gs://BUCKET_NAME
出力
config-connector bulk-export
コマンドは、YAML 形式の Config Connector リソースを出力します。その YAML ファイルは、デフォルトで STDOUT に書き込まれます。この出力は、output
オプションを使用して、ファイルに書き込むようにも指示できます。
1 つのファイルへの出力
--output
パラメータを設定すると、次のいずれかに該当する場合、config-connector bulk-export
はその結果を 1 つのファイルに書き込みます。
output
で指定されたファイルが存在し、regular
ファイルである。output
で指定されたファイルは存在せず、output
で表される親ディレクトリが存在する。
ディレクトリへの出力
--output
パラメータが /
で終わるディレクトリの場合、config-connector
は結果を複数のファイルに書き込みます。config-connector bulk-export
はリソースごとに 1 つのファイルを作成し、ファイル名はリソース名と一致します。
config-connector bulk-export --project PROJECT_ID --on-error continue --output OUTPUT_DIRECTORY/
PROJECT_ID
は、Google Cloud プロジェクトに置き換えます。
たとえば、プロジェクト my-project
から sample
ディレクトリにアセットを出力するには、次のコマンドを実行します。
config-connector bulk-export --project my-project --on-error continue --output sample/
サポートされているリソース
次のコマンドを実行すると、config-connector
ツールのリソースのリストをリソース名の形式とともに出力できます。
config-connector print-resources
コマンドライン オプション
config-connector bulk-export
コマンドには次のオプションがあります。
config-connector bulk-export
--input FILENAME \
--output FILENAME \
--storage-key gs://BUCKET_NAME \
--project PROJECT_ID \
--folder FOLDER_NUMBER \
--organization ORGANIZATION_ID \
--oauth2-token TOKEN \
--on-error [halt | continue | ignore] \
--iam-format [policy | policymember | none] \
--filter-deleted-iam-members [true | false] \
--verbose
--input
: Cloud Asset Inventory 入力ファイル。--output
: 標準出力を無効にする出力ファイルのパス(省略可)。ファイルの場合、結果にはすべてのコマンド出力が含まれます。ディレクトリの場合、出力リソースごとに新しいファイルがディレクトリに追加されます。--storage-key
: 一時的な Cloud Storage バケットをエクスポートの対象にします。--project
: エクスポートする Google Cloud プロジェクト ID--folder
: エクスポートする Google Cloud フォルダ ID--organization
: エクスポートする Google Cloud の組織 ID。--oauth2-token
: Google Cloud ID としての OAUTH2 トークン。デフォルトでは、config-connector
は Google Cloud CLI のデフォルト認証情報を使用します。--on-error
: 回復可能なエラーが発生したときの動作を制御します。オプションは「続行」、「停止」、「無視」です。halt
: エラーが発生すると実行を停止します(デフォルト)continue
: リソースの処理を続行し、エラーを STDERR に出力します。ignore
: リソースの処理を続行し、エラーを出力しません。
--iam-format
: エクスポートにより出力される IAM リソースの種類を指定します。指定できる値は、policy
(デフォルト)、policymember
、none
のいずれかです。--filter-deleted-iam-members
: 削除された IAM プリンシパルを除外するかどうかを指定します。true
かfalse
を指定できます。デフォルト値はfalse
です。--verbose
: 詳細ロギングを有効にします。
次のステップ
- Config Connector が既存の Google Cloud リソースを取得する方法を確認する。
- Cloud Asset Inventory と Cloud Storage へのアセットのエクスポートについて学習する。
- Config Connector がサポートするリソースについて学習する。