既存の 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 構造をエクスポートします。構造ごとに、リソースの名前、アセット インベントリのタイプ、祖先リソース(プロジェクト、フォルダ、組織)があります。アセット インベントリでサポートされているタイプを確認するには、サポートされているアセットタイプを参照してください。

始める前に

  1. config-connector tool をインストールします

  2. 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 にインポートします。

  1. Google Cloud CLI を使用して、sample-topic という名前のトピックを作成します。

    gcloud pubsub topics create sample-topic
    

    トピックが作成されたという確認を受け取ります。

    Created topic [projects/PROJECT_ID/topics/sample-topic].
    

    この出力の PROJECT_ID は、Google Cloud プロジェクトに置き換えられます。

  2. 次のコマンドを使用して、トピックの Google Cloud リソース名を取得し、環境変数に保存します。

    TOPIC_RESOURCE_NAME=$(gcloud pubsub topics describe sample-topic --format "value(name)")
    
  3. オブジェクトを識別するために、config-connector ツールは Cloud Asset Inventory JSON 構造を使用します。トピックのアセット JSON の構造を環境変数に保存します。

    TOPIC_ASSET='{"name":"//pubsub.googleapis.com/'"${TOPIC_RESOURCE_NAME}"'","asset_type":"pubsub.googleapis.com/Topic"}'
    
  4. 次のコマンドを実行して、アセットを 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 プロジェクトに置き換えられます。

  5. このリソースを、kubectl apply -f - を使用して Config Connector に渡すことができます。リソースを直接渡すには、次のコマンドを実行します。

    echo ${TOPIC_ASSET} | config-connector bulk-export | kubectl apply -f -  --namespace CC_NAMESPACE
    

    CC_NAMESPACE は、Config Connector がリソースを管理する名前空間に置き換えます。

    Config Connector がリソースを取得します。

  6. kubectl describe で Config Connector がリソースを管理していることを確認します。

    kubectl describe pubsubtopic sample-topic --namespace CC_NAMESPACE
    

    CC_NAMESPACE は、Config Connector がリソースを管理する名前空間に置き換えます。

クリーンアップ

PubSubTopic は config-connector bulk-exportkubectl 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-connectorGoogle Cloud CLI のデフォルト認証情報を使用します。
  • --on-error: 回復可能なエラーが発生したときの動作を制御します。オプションは「続行」、「停止」、「無視」です。
    • halt: エラーが発生すると実行を停止します(デフォルト)
    • continue: リソースの処理を続行し、エラーを STDERR に出力します。
    • ignore: リソースの処理を続行し、エラーを出力しません。
  • --iam-format: エクスポートにより出力される IAM リソースの種類を指定します。指定できる値は、policy(デフォルト)、policymembernone のいずれかです。
  • --filter-deleted-iam-members: 削除された IAM プリンシパルを除外するかどうかを指定します。truefalse を指定できます。デフォルト値は false です。
  • --verbose: 詳細ロギングを有効にします。

次のステップ