Como importar e exportar recursos do Google Cloud em massa

Nesta página, descrevemos o comando config-connector bulk-export e como usá-lo para exportar recursos do Google Cloud para arquivos YAML do Config Connector que podem ser importados posteriormente para o Config Connector.

config-connector bulk-export usa a funcionalidade de Exportação do Inventário de recursos do Cloud para descobrir recursos existentes do Google Cloud. É possível providenciar uma exportação do Inventário de recursos do Cloud ou config-connector pode realizar a exportação em seu nome.

O Inventário de recursos do Cloud exporta estruturas JSON. Cada estrutura tem o nome do recurso, o tipo de inventário e os recursos ancestrais: projetos, pastas e organização. Para descobrir os tipos compatíveis com o inventário de recursos, consulte Tipos de recursos compatíveis.

Antes de começar

  1. Instale o config-connector tool

  2. Se você quiser usar a ferramenta config-connector para exportar diretamente do Config Connector, ative a API Cloud Asset Inventory no projeto do Google Cloud Identity com gcloud.

    gcloud services enable cloudasset.googleapis.com
    

Exemplo de exportação em massa

Neste exemplo, você cria um PubSubTopic com a ferramenta de linha de comando gcloud e importa-o para o Config Connector.

  1. Crie um tópico chamado sample-topic com a ferramenta de linha de comando gcloud:

    gcloud pubsub topics create sample-topic
    

    Você recebe a confirmação de que o tópico foi criado.

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

    Na saída, PROJECT_ID é substituído pelo projeto do Google Cloud.

  2. Consiga o nome do recurso do Google Cloud do tópico e salve-o em uma variável de ambiente com o seguinte comando:

    TOPIC_RESOURCE_NAME=$(gcloud pubsub topics describe sample-topic --format "value(name)")
    
  3. Para identificar objetos, a ferramenta config-connector usa estruturas JSON do Cloud Asset Inventory. Salve a estrutura JSON do recurso do tópico em uma variável de ambiente:

    TOPIC_ASSET='{"name":"//pubsub.googleapis.com/'"${TOPIC_RESOURCE_NAME}"'","asset_type":"pubsub.googleapis.com/Topic"}'
    
  4. Transmita o recurso para config-connector bulk-export executando o seguinte comando:

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

    A saída é um recurso do Config Connector no formato YAML.

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

    Na saída, PROJECT_ID é substituído pelo projeto do Google Cloud.

  5. Você pode transmitir esse recurso para o Config Connector com kubectl apply -f -. Para transmitir o recurso diretamente, execute o seguinte comando:

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

    Substitua CC_NAMESPACE pelo namespace do qual o Config Connector gerencia recursos.

    O Config Connector adquire o recurso.

  6. Confirme se o Config Connector está gerenciando o recurso com kubectl describe:

    kubectl describe pubsubtopic sample-topic --namespace CC_NAMESPACE
    

    Substitua CC_NAMESPACE pelo namespace do qual o Config Connector gerencia recursos.

Como fazer a limpeza

É possível excluir o PubSubTopic com config-connector bulk-export e kubectl delete.

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

Substitua CC_NAMESPACE pelo namespace do qual o Config Connector gerencia recursos.

Como descobrir recursos para importar

Ao importar recursos, é possível realizar uma exportação do Inventário de recursos do Cloud e fornecer os resultados para config-connector bulk-export ou fazer com que config-connector bulk-export execute uma em seu nome.

Como importar de uma exportação do Inventário de recursos do Cloud

Você pode fornecer uma exportação de inventário de recursos com um caminho para um arquivo local contendo a exportação ou canalizando os resultados de uma exportação para config-connector no STDIN.

Como importar de um arquivo local

Você pode fornecer uma exportação de inventário de recursos para config-connector bulk-export usando um arquivo local com o parâmetro --input.

config-connector bulk-export --input ASSET_INVENTORY_EXPORT

Substitua ASSET_INVENTORY_EXPORT pelo nome do arquivo da exportação do Inventário de recursos do Cloud.

Importação do STDIN

Para fornecer uma exportação de inventário de recursos no STDIN, canalize os resultados de uma exportação para config-connector bulk-export. Por exemplo, se a exportação estiver em um arquivo local chamado export.json, canalize o conteúdo do arquivo para config-connector bulk-export sem fornecer nenhum dos parâmetros de exportação.

cat export.json | config-connector bulk-export

Como filtrar uma exportação do Inventário de recursos em STDIN

Para filtrar uma exportação de inventário de recursos, use a ferramenta jq e a barra vertical para inserir os resultados em config-connector bulk-export. Por exemplo, se você quiser importar apenas recursos do PubSubTopic do arquivo EXPORT_FILE, execute o seguinte comando:

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

Como exportar um inventário com o Config Connector

A ferramenta config-connector bulk-export pode exportar recursos de uma hierarquia de recursos do Google Cloud.

Como exportar seu projeto

Para exportar todos os recursos do projeto, use o parâmetro --project.

config-connector bulk-export --project PROJECT_ID

Substitua PROJECT_ID pelo ID do projeto do Google Cloud.

Como exportar sua pasta

Para exportar todos os recursos de uma pasta, use o parâmetro --folder.

config-connector bulk-export --folder FOLDER_NUMBER

Substitua FOLDER_NUMBER pelo número da pasta do Google Cloud.

Como exportar sua organização

Para exportar todos os recursos da sua organização, use o parâmetro --organization.

config-connector bulk-export --organization ORGANIZATION_ID

Substitua ORGANIZATION_ID pelo ID da organização do Google Cloud.

Local no Cloud Storage

O local de saída da exportação do inventário de recursos é um URI do Cloud Storage. Quando config-connector bulk-export realiza uma exportação, ele usa um bucket do Cloud Storage. Por padrão, config-connector bulk-export cria um bucket temporário. Também é possível especificar o nome do bucket.

Bucket temporário do Cloud Storage

Se você não fornecer o parâmetro --storage-key, config-connector bulk-export criará um bucket temporário do Cloud Storage em seu nome. O bucket será excluído quando a exportação for concluída.

Como especificar um bucket temporário

Para especificar um bucket, use um URI do Cloud Storage com o parâmetro storage-key. Se o URI for apenas o nome do bucket, um nome será gerado para o objeto de armazenamento de exportação. Se o URI for um caminho completo para um objeto de armazenamento, o caminho completo será usado.

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

Saída

A saída do comando config-connector bulk-export é o recurso do Config Connector no formato YAML. O arquivo YAML é gravado no STDOUT por padrão. É possível direcionar a saída de recursos para arquivos com a opção output.

Saída para um único arquivo

Quando você define o parâmetro --output, config-connector bulk-export grava os resultados em um único arquivo se uma das seguintes condições for verdadeira:

  • O arquivo especificado por output existe e é um arquivo regular.
  • O arquivo especificado por output não existe e o diretório pai representado por output existe.

Saída para um diretório

config-connector grava os resultados em vários arquivos quando o parâmetro --output é um diretório que termina em um /. config-connector bulk-export cria um arquivo por recurso, e os nomes dos arquivos correspondem aos nomes dos recursos.

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

Substitua PROJECT_ID pelo ID do projeto do Google Cloud.

Por exemplo, para exibir recursos do projeto my-project para o diretório sample, execute o seguinte comando:

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

Opções de linha de comando

O comando config-connector bulk-export tem as seguintes opções:

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: arquivo de entrada do Inventário de recursos do Cloud.
  • --output: um caminho de arquivo de saída opcional que desativa a saída padrão. Quando um arquivo é gerado, o resultado contém toda a saída do comando. Quando um diretório, ele conterá um novo arquivo para cada recurso na saída.
  • --storage-key: bucket de destino temporário do Cloud Storage para exportação.
  • --project: ID do projeto do Google Cloud a ser exportado
  • --folder: ID da pasta do Google Cloud a ser exportada
  • --organization: ID da organização do Google Cloud a ser exportada.
  • --oauth2-token: um token OAUTH2 como a identidade do Google Cloud. Por padrão, config-connector usa as credenciais padrão do SDK do Cloud.
  • --on-error: controle o comportamento quando ocorrer um erro recuperável. As opções são "continuar", "parar" ou "ignorar".
    • halt: interrompe a execução em qualquer erro (padrão)
    • continue: continue processando recursos, imprima o erro para STDERR
    • ignore: continue processando recursos e não imprima o erro
  • --iam-format: especifica o tipo de saída dos recursos do Cloud IAM com sua exportação. As opções são policy (padrão), policymember ou none.
  • --filter-deleted-iam-members: especifica se você quer filtrar os principais do IAM excluídos. As opções são true ou false. O valor padrão é false.
  • --verbose: ativa o registro detalhado.

A seguir