Importa y exporta de forma masiva recursos existentes de Google Cloud

En esta página, se describe el comando config-connector bulk-export y cómo usarlo para exportar recursos de Google Cloud a archivos YAML de Config Connector que puedes importar luego a Config Connector.

config-connector bulk-export usa la funcionalidad Exportar de Cloud Asset Inventory para descubrir los recursos existentes de Google Cloud. Puedes proporcionar una exportación de Cloud Asset Inventory o config-connector puede realizar la exportación en tu nombre.

Cloud Asset Inventory exporta estructuras JSON. Cada estructura tiene el nombre del recurso, su tipo de inventario de elementos y sus recursos principales: proyectos, carpetas y organización. Para descubrir los tipos que admite el inventario de elementos, consulta Tipos de elementos admitidos.

Antes de comenzar

  1. Instala config-connector tool

  2. Si quieres usar la herramienta de config-connector para exportar directamente desde Cloud Asset Inventory, habilita la API de Cloud Asset Inventory en tu proyecto de Google Cloud Identity con gcloud.

    gcloud services enable cloudasset.googleapis.com
    

Ejemplo de exportación masiva

En este ejemplo, se crea un PubSubTopic con la herramienta de línea de comandos de gcloud y, luego, se importa en Config Connector.

  1. Crea un tema llamado sample-topic con la herramienta de línea de comandos de gcloud:

    gcloud pubsub topics create sample-topic
    

    Recibirás la confirmación de que se creó el tema.

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

    En el resultado, PROJECT_ID se reemplaza por tu proyecto de Google Cloud.

  2. Obtén el nombre del recurso de Google Cloud del tema y guárdalo en una variable de entorno con el siguiente comando:

    TOPIC_RESOURCE_NAME=$(gcloud pubsub topics describe sample-topic --format "value(name)")
    
  3. Para identificar objetos, la herramienta de config-connector usa estructuras JSON de Cloud Asset Inventory. Guarda la estructura JSON del elemento de tema en una variable de entorno:

    TOPIC_ASSET='{"name":"//pubsub.googleapis.com/'"${TOPIC_RESOURCE_NAME}"'","asset_type":"pubsub.googleapis.com/Topic"}'
    
  4. Pasa el elemento a config-connector bulk-export mediante la ejecución del siguiente comando:

    echo ${TOPIC_ASSET} | config-connector bulk-export
    

    El resultado es un recurso Config Connector en formato YAML.

    ---
    apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
    kind: PubSubTopic
    metadata:
      annotations:
        cnrm.cloud.google.com/project-id: PROJECT_ID
      name: sample-topic
    ...
    

    En el resultado, PROJECT_ID se reemplaza por tu proyecto de Google Cloud.

  5. Puedes pasar este recurso a Config Connector con kubectl apply -f -. Para pasar el recurso de forma directa, ejecuta el siguiente comando:

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

    Reemplaza CC_NAMESPACE por el espacio de nombres desde el que Config Connector administra los recursos.

    Config Connector adquiere el recurso.

  6. Confirma que Config Connector administra el recurso con kubectl describe:

    kubectl describe pubsubtopic sample-topic --namespace CC_NAMESPACE
    

    Reemplaza CC_NAMESPACE por el espacio de nombres desde el que Config Connector administra los recursos.

Realice una limpieza

Puedes borrar tu PubSubTopic con config-connector bulk-export y kubectl delete.

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

Reemplaza CC_NAMESPACE por el espacio de nombres desde el que Config Connector administra los recursos.

Descubre recursos para importar

Cuando importas recursos, puedes realizar una exportación de Cloud Asset Inventory y proporcionar los resultados a config-connector bulk-export o hacer que config-connector bulk-export realice uno en tu nombre.

Importa desde una exportación de Cloud Asset Inventory

Puedes proporcionar una exportación de inventario de elementos si proporcionas una ruta a un archivo local que contiene la exportación o canaliza los resultados de una exportación a config-connector en STDIN.

Importa desde un archivo local

Puedes proporcionar una exportación de inventario de elementos a config-connector bulk-export mediante un archivo local con el parámetro --input.

config-connector bulk-export --input ASSET_INVENTORY_EXPORT

Reemplaza ASSET_INVENTORY_EXPORT por el nombre de archivo de exportación de Cloud Asset Inventory.

Importa desde STDIN

Para proporcionar una exportación de inventario de activos en STDIN, canaliza los resultados de una exportación a config-connector bulk-export. Por ejemplo, si tu exportación se encuentra en un archivo local llamado export.json, canaliza el contenido del archivo a config-connector bulk-export sin proporcionar ninguno de los parámetros de exportación.

cat export.json | config-connector bulk-export

Cómo filtrar una exportación de Asset Inventory en STDIN

Para filtrar una exportación de inventario de recursos, puedes usar la canalización y la herramienta jq para ingresar los resultados en config-connector bulk-export. Por ejemplo, si solo deseas importar elementos de PubSubTopic del archivo EXPORT_FILE, ejecuta el siguiente comando:

cat EXPORT_FILE | jq '. | select( .asset_type == "pubsub.googleapis.com/Topic" )' | config-connector bulk-export

Cómo exportar un inventario con config-connector

La herramienta de config-connector bulk-export puede exportar recursos desde una jerarquía de recursos de Google Cloud.

Exporta tu proyecto

Para exportar todos los recursos de tu proyecto, usa el parámetro --project.

config-connector bulk-export --project PROJECT_ID

Reemplaza PROJECT_ID con el proyecto de Google Cloud.

Exportar tu carpeta

Para exportar todos los recursos de una carpeta, usa el parámetro --folder.

config-connector bulk-export --folder FOLDER_NUMBER

Reemplaza FOLDER_NUMBER por tu número de carpeta de Google Cloud.

Exporta tu organización

Para exportar todos los recursos de tu organización, usa el parámetro --organization.

config-connector bulk-export --organization ORGANIZATION_ID

Reemplaza ORGANIZATION_ID por el ID de la organización de Google Cloud.

Ubicación de Cloud Storage

La ubicación de salida de la exportación del inventario de recursos es un URI de Cloud Storage. Cuando config-connector bulk-export realiza una exportación, usa un bucket de Cloud Storage. De forma predeterminada, config-connector bulk-export crea un bucket temporal. También puedes especificar el nombre del bucket.

Bucket temporal de Cloud Storage

Si no proporcionas el parámetro --storage-key, config-connector bulk-export crea un bucket temporal de Cloud Storage en tu nombre. El bucket se borra cuando se completa la exportación.

Especifica un bucket temporal

Para especificar un bucket, usa un URI de Cloud Storage con el parámetro storage-key. Si el URI es solo el nombre del bucket, se genera un nombre para el objeto de almacenamiento de exportación. Si el URI es una ruta de acceso completa a un objeto de almacenamiento, se usa la ruta de acceso completa.

config-connector bulk-export --storage-key gs://BUCKET_NAME

Resultado

El resultado del comando config-connector bulk-export es los recursos de Config Connector en formato YAML. El archivo YAML está escrito en STDOUT de forma predeterminada. Puedes dirigir la salida de los recursos a archivos con la opción output.

Salida a un solo archivo

Cuando configuras el parámetro --output, config-connector bulk-export escribe sus resultados en un solo archivo si se cumple una de las siguientes condiciones:

  • output especifica el archivo que existe y es un archivo regular.
  • output especifica el archivo que no existe y existe el directorio superior que representa output.

Salida a un directorio

config-connector escribe sus resultados en varios archivos cuando el parámetro --output es un directorio que termina en /. config-connector bulk-export crea un archivo por recurso y los nombres de archivo coinciden con los nombres de sus recursos.

config-connector bulk-export --project PROJECT_ID --on-error continue --output OUTPUT_DIRECTORY/

Reemplaza PROJECT_ID con el proyecto de Google Cloud.

Por ejemplo, para generar elementos desde el proyecto my-project al directorio sample, ejecuta el siguiente comando:

config-connector bulk-export --project my-project --on-error continue --output sample/

Opciones de línea de comandos

El comando config-connector bulk-export tiene las siguientes opciones:

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: archivo de entrada de Cloud Asset Inventory
  • --output: Es una ruta de archivo de salida opcional que inhabilita el resultado estándar. Cuando un archivo está en curso, el resultado contiene todos los resultados del comando. cuando un directorio contiene un archivo nuevo para cada recurso en el resultado
  • --storage-key: destino del bucket temporal de Cloud Storage para exportar
  • --project: ID del proyecto de Google Cloud para exportar
  • --folder: ID de la carpeta de Google Cloud para exportar
  • --organization: ID de la organización de Google Cloud para exportar.
  • --oauth2-token: un token OAUTH2 como la identidad de Google Cloud. De forma predeterminada, config-connector usa las credenciales predeterminadas del SDK de Cloud.
  • --on-error: controla el comportamiento cuando se produce un error recuperable Las opciones son “continuar”, “detener” o “ignorar”.
    • halt: detiene la ejecución de cualquier error (predeterminado)
    • continue: continúa procesando los recursos, imprime el error en STDERR
    • ignore: Continúa procesando los recursos y no imprime el error
  • --iam-format: especifica el tipo de resultado de los recursos de IAM con tu exportación. Las opciones son policy (predeterminado), policymember o none.
  • --filter-deleted-iam-members: Especifica si se deben filtrar los principales de IAM borrados. Las opciones son true o false. El valor predeterminado es false.
  • --verbose: Habilita el registro detallado.

¿Qué sigue?