Importação e exportação em massa de Google Cloud recursos existentes


Esta página descreve o comando config-connector bulk-export e como usá-lo para exportar Google Cloud recursos para ficheiros YAML do Config Connector que pode importar posteriormente para o Config Connector.

config-connector bulk-export usa a funcionalidade Export do Cloud Asset Inventory para descobrir recursos Google Cloud existentes. Pode fornecer uma exportação do Cloud Asset Inventory ou config-connector pode realizar a exportação em seu nome.

O Cloud Asset Inventory exporta estruturas JSON. Cada estrutura tem o nome do recurso, o respetivo tipo de inventário de recursos e os recursos antecessores: projetos, pastas e organização. Para descobrir os tipos suportados pelo inventário de recursos, consulte Tipos de recursos suportados.

Limitações

Nem todos os recursos suportam o comando bulk-export. Para obter uma lista dos recursos compatíveis, execute config-connector print-resources.

Antes de começar

  1. Instale o config-connector tool

  2. Se quiser usar a ferramenta config-connector para exportar diretamente do Cloud Asset Inventory, ative a API Cloud Asset Inventory no projeto da sua Google Cloud identidade com gcloud.

    gcloud services enable cloudasset.googleapis.com
    

Exemplo de exportação em massa

Neste exemplo, cria um PubSubTopic com a CLI do Google Cloud e, em seguida, importa-o para o Config Connector.

  1. Crie um tópico com o nome sample-topic com a CLI Google Cloud:

    gcloud pubsub topics create sample-topic
    

    Recebe uma 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 seu Google Cloud projeto.

  2. Obtenha o Google Cloud nome do recurso do tópico e guarde-o numa 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. Guarde a estrutura JSON do recurso de tópico numa variável de ambiente:

    TOPIC_ASSET='{"name":"//pubsub.googleapis.com/'"${TOPIC_RESOURCE_NAME}"'","asset_type":"pubsub.googleapis.com/Topic"}'
    
  4. Passe 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 seu Google Cloud projeto.

  5. Pode transmitir este 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 espaço de nomes a partir do qual o Config Connector gere os recursos.

    O Config Connector adquire o recurso.

  6. Confirme que o Config Connector está a gerir o recurso com kubectl describe:

    kubectl describe pubsubtopic sample-topic --namespace CC_NAMESPACE
    

    Substitua CC_NAMESPACE pelo espaço de nomes a partir do qual o Config Connector gere os recursos.

Limpar

Pode eliminar o seu 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 espaço de nomes a partir do qual o Config Connector gere os recursos.

Descobrir recursos a importar

Quando importa recursos, pode fazer uma exportação do Cloud Asset Inventory e fornecer os resultados à config-connector bulk-export ou pedir à config-connector bulk-export que faça uma em seu nome.

Importar a partir de uma exportação do Cloud Asset Inventory

Pode fornecer uma exportação do inventário de recursos indicando um caminho para um ficheiro local que contenha a exportação ou encaminhando os resultados de uma exportação para config-connector no STDIN.

Importar a partir de um ficheiro local

Pode fornecer uma exportação do inventário de recursos à config-connector bulk-export através de um ficheiro local com o parâmetro --input.

config-connector bulk-export --input ASSET_INVENTORY_EXPORT

Substitua ASSET_INVENTORY_EXPORT pelo nome do ficheiro da exportação do Cloud Asset Inventory.

A importar do STDIN

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

cat export.json | config-connector bulk-export

Filtrar uma exportação do inventário de recursos no STDIN

Para filtrar uma exportação do inventário de recursos, pode usar a ferramenta jq e canalizar para introduzir os resultados em config-connector bulk-export. Por exemplo, se quiser importar apenas recursos PubSubTopic do ficheiro EXPORT_FILE, execute o seguinte comando:

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

Exportar um inventário com o Config Connector

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

Exportar o projeto

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

config-connector bulk-export --project PROJECT_ID

Substitua PROJECT_ID pelo seu Google Cloud projeto.

Exportar a 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 Google Cloud número da pasta.

Exportar a 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 sua Google Cloud organização.

Localização do Cloud Storage

A localização de saída da exportação do inventário de recursos é um URI do Cloud Storage. Quando config-connector bulk-export faz uma exportação, usa um contentor do Cloud Storage. Por predefinição, config-connector bulk-export cria um contentor temporário. Também pode especificar o nome do contentor.

Contentor temporário do Cloud Storage

Se não fornecer o parâmetro --storage-key, o config-connector bulk-export cria um contentor do Cloud Storage temporário em seu nome. O contentor é criado na localização predefinida para contentores de armazenamento: a US multirregião. O contentor é eliminado quando a exportação estiver concluída.

Especificar um segmento temporário

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

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

Resultado

O resultado do comando config-connector bulk-export são recursos do Config Connector no formato YAML. Por predefinição, o ficheiro YAML é escrito em STDOUT. Pode direcionar o resultado dos recursos para ficheiros com a opção output.

Produção num único ficheiro

Quando define o parâmetro --output, config-connector bulk-export escreve os respetivos resultados num único ficheiro se uma das seguintes condições for verdadeira:

  • O ficheiro especificado por output existe e é um ficheiro regular.
  • O ficheiro especificado por output não existe, mas o diretório principal representado por output existe.

Produza um ficheiro num diretório

config-connector escreve os respetivos resultados em vários ficheiros quando o parâmetro --output é um diretório que termina com um /. config-connector bulk-export cria um ficheiro por recurso e os nomes dos ficheiros correspondem aos nomes dos recursos.

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

Substitua PROJECT_ID pelo seu Google Cloud projeto.

Por exemplo, para gerar 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 da linha de comandos

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: ficheiro de entrada do Cloud Asset Inventory.
  • --output: um caminho de ficheiro de saída opcional que desativa a saída padrão. Quando é um ficheiro, o resultado contém toda a saída do comando; quando é um diretório, o diretório contém um novo ficheiro para cada recurso na saída.
  • --storage-key: contentor do Cloud Storage temporário de destino para exportação.
  • --project: Google Cloud ID do projeto a exportar
  • --folder: Google Cloud ID da pasta a exportar
  • --organization: Google Cloud ID da organização a exportar.
  • --oauth2-token: um token OAUTH2 como a Google Cloud identidade. Por predefinição, o config-connector usa as credenciais predefinidas da CLI Google Cloud.
  • --on-error: controla o comportamento quando ocorre um erro recuperável. As opções são "continue", "halt" ou "ignore".
    • halt: parar a execução em caso de erro (predefinição)
    • continue: continuar a processar recursos, imprimir o erro para STDERR
    • ignore: continue a processar recursos e não imprima o erro
  • --iam-format: especifica o tipo de recursos do IAM gerados com a sua exportação. As opções são policy (predefinição), policymember ou none.
  • --filter-deleted-iam-members: especifica se os diretores do IAM eliminados devem ser filtrados. As opções são true ou false. O valor predefinido é false.
  • --verbose: ativa o registo verboso.

O que se segue?