Esta página descreve o processo de uso do DM Convert para converter as configurações do Deployment Manager no modelo de recursos do Kubernetes (KRM) ou no Terraform.
Configurar o ambiente
Configurar as variáveis de ambiente
Salve as seguintes variáveis de ambiente, que são usadas no restante deste guia:
export PROJECT_ID=$(gcloud config get-value project) \
export DM_CONVERT_IMAGE="us-central1-docker.pkg.dev/\
dm-convert-host/deployment-manager/dm-convert:public-preview"
Configurar suas ferramentas
Você precisa ter acesso às seguintes ferramentas:
gcloud
docker
kubectl
bq
Se você usa o Cloud Shell para executar a conversão direta, já tem acesso a eles.
Converter suas configurações
Em geral, você migra sua configuração do Deployment Manager para o Terraform ou o KRM da seguinte maneira:
Preparar uma implantação do Deployment Manager para a conversão.
converter a configuração no formato HCL (HashiCorp, para Terraform) ou formato KRM (Kubernetes Resource Model).
Como usar o Terraform ou o Config Connector para aplicar a configuração convertida.
Como abandonar a implantação atual do Deployment Manager.
Preparar a implantação atual
O DM Convert opera em arquivos de configuração e modelos do Deployment Manager. Ao longo do guia, esses arquivos serão criados e salvos localmente como entrada para a ferramenta DM Convert.
Você pode criar um arquivo de configuração ou adquirir uma configuração de uma implantação ativa.
Converter um arquivo de configuração
Você pode usar a configuração de amostra a seguir para testar o conversor. Substitua
PROJECT_ID
pelo ID do projeto do Google Cloud e salve
o conteúdo abaixo em um arquivo chamado deployment.yaml
:
resources:
- name: bigquerydataset
type: bigquery.v2.dataset
properties:
datasetReference:
datasetId: bigquerydataset
projectId: PROJECT_ID
defaultTableExpirationMs: 36000000
location: us-west1
- type: bigquery.v2.table
name: bigquerytable
properties:
datasetId: bigquerydataset
labels:
data-source: external
schema-type: auto-junk
tableReference:
projectId: PROJECT_ID
tableId: bigquerytable
metadata:
dependsOn:
- bigquerydataset
Adquirir uma configuração de uma implantação ativa
Se você quiser adquirir e converter a configuração de uma implantação ativa, poderá recuperar a configuração expandida e salvá-la no disco executando os seguintes comandos, substituindo
DEPLOYMENT_NAME
pelo nome: implantação.# Configure your project/deployment DEPLOYMENT_NAME=DEPLOYMENT_NAME PROJECT_ID=PROJECT_ID # Fetch the latest manifest for the given deployment gcloud deployment-manager deployments describe $DEPLOYMENT_NAME \ --project $PROJECT_ID --format="value(deployment.manifest)" https://www.googleapis.com/deploymentmanager/v2/projects/$PROJECT_ID/global/deployments/bq/manifests/manifest-1618872644848 # The manifest name is the last path segment from the URI # in the above command output MANIFEST_NAME="manifest-1618872644848" # Save the expanded manifest to deployment.yaml gcloud deployment-manager manifests describe $MANIFEST_NAME \ --deployment $DEPLOYMENT_NAME --project $PROJECT_ID \ --format="value(expandedConfig)" > deployment.yaml
Converter a implantação
Para converter os recursos em deployment.yaml
para o formato HCL ou KRM e salvá-los como
saídas convertidas, execute o seguinte comando no mesmo diretório que
deployment.yaml
com as substituições desejadas:
CONVERTED_RESOURCES=OUTPUT_FILE
docker run --rm -it --workdir=/convert \
--volume=$(pwd):/convert \
$DM_CONVERT_IMAGE \
--config deployment.yaml \
--output_format OUTPUT_FORMAT \
--output_file OUTPUT_FILE \
--output_tf_import_file OUTPUT_IMPORT_FILE \
--deployment_name DEPLOYMENT_NAME \
--project_id $PROJECT_ID
Faça as seguintes substituições:
OUTPUT_FORMAT
: o formato de saída da conversão. Pode serTF
para Terraform ouKRM
para KRM.OUTPUT_FILE
: o nome do arquivo em que a saída convertida é salva.(Somente Terraform)
OUTPUT_IMPORT_FILE
: o nome do arquivo em que o Os comandos de importação do Terraform são salvos. Se uma flagproject_id
for especificada, os comandos de importação serão gerados com base nessa flag. Se uma sinalizaçãoproject_id
não for especificada, os comandos de importação serão gerados com base no atributoprojectId
da configuração do recurso.DEPLOYMENT_NAME
: o nome da implantação. Isso é relevante se você estiver usando modelos na configuração do Deployment Manager e também a variável de ambientedeployment
. Para mais informações, acesse Como usar uma variável de ambiente.
Conferir as conversões
# Print output file
cat OUTPUT_FILE
Aplicar a configuração convertida
Terraform
Configurar o Terraform
# Configure default project
cat <<EOF > echo > main.tf
provider "google" {
project = "$PROJECT_ID"
}
EOF
Depois de converter os recursos do Deployment Manager para o Terraform, é possível usar o Terraform para criar recursos implantando diretamente a configuração convertida.
Implantar a configuração convertida usando o Terraform
# NOTE: if Terraform state gets corrupted during testing,
# use init --reconfigure to reset backend
terraform init
echo "*************** TERRAFORM PLAN ******************"
terraform plan
echo "************** TERRAFORM APPLY ******************"
terraform apply
Importar recursos existentes (opcional)
Se você estiver convertendo uma implantação atual e quiser usar o Terraform para gerenciar os recursos dele sem reimplantar, poderá fazer Portanto, usando o recurso de importação do Terraform.
Nesta seção, você vai usar deployment.yaml
para o
o processo de importação.
Inicialize o Terraform:
# NOTE: if Terraform state gets corrupted during testing,
# use init --reconfigure to reset backend
terraform init
Os comandos de importação são gerados e salvos em OUTPUT_IMPORT_FILE
.
Para analisar o conteúdo dele, execute o seguinte comando:
cat OUTPUT_IMPORT_FILE
Para importar os recursos de deployment.yaml
,
execute o seguinte comando:
# Make the import file executable
chmod +x OUTPUT_IMPORT_FILE
# Perform the import
./OUTPUT_IMPORT_FILE
Depois de importar os recursos para o estado do Terraform, é possível verificar se há mudanças entre o estado e a configuração gerada do Terraform executando o comando plan
do Terraform:
terraform plan
Isso produz a seguinte saída:
Terraform will perform the following actions:
# google_bigquery_dataset.bigquerydataset will be updated in-place
~ resource "google_bigquery_dataset" "bigquerydataset" {
...
~ labels = {
# the label value will be based on the deployment name and may not
# match
- "goog-dm" = "bq-for-import" -> null
}
...
}
# google_bigquery_table.bigquerytable will be updated in-place
~ resource "google_bigquery_table" "bigquerytable" {
...
~ labels = {
# the label value will be based on the deployment name and may not
# match
- "goog-dm" = "bq-for-import" -> null
}
...
}
Plan: 0 to add, 2 to change, 0 to destroy.
Aceite essa mudança no plano do Terraform, já que ela remove
rótulos específicos do Deployment Manager, ou seja, goog-dm
, que não são necessários
quando os recursos são gerenciados pelo Terraform.
Para aplicar a configuração do Terraform, execute o seguinte comando:
# Accept changes by entering yes when prompted
terraform apply
Agora todos os recursos definidos em deployment.yaml
estão em
o gerenciamento do Terraform.
Por exemplo, se você quiser verificar se o Terraform está de fato gerenciando a
os recursos convertidos, basta fazer uma pequena alteração no arquivo
da tabela modificando o prazo de validade padrão da tabela
Recurso google_bigquery_dataset.bigquerydataset
:
...
# change from 10 hrs to 12 hrs
default_table_expiration_ms = 43200000
...
Depois de fazer as mudanças, é possível aplicar a configuração do Terraform e usar a interface de linha de comando (CLI) bq
para verificar as mudanças:
# Accept changes by entering yes when prompted
terraform apply
# Access the dataset properties via bq to verify the changes
bq show --format=prettyjson bigquerydataset | jq '.defaultTableExpirationMs'
A saída recebida deve corresponder aos valores fornecidos na configuração atualizada do Terraform, confirmando que o Terraform agora está gerenciando esses recursos.
KRM
Configurar o Config Connector
Para ativar os recursos nos arquivos de configuração do KRM, você precisa de um cluster do Kubernetes com o Config Connector instalado. Para criar um cluster de teste, consulte Como instalar com o complemento do GKE.
No Cloud Shell, verifique se as credenciais kubectl
estão configuradas para
o cluster do GKE que você quer usar. Substitua
GKE_CLUSTER
pelo nome do cluster e execute o
seguinte comando:
gcloud container clusters get-credentials GKE_CLUSTER
Implante sua configuração de KRM convertida usando kubectl
.
Para implantar a configuração de KRM convertida usando kubectl
, execute os seguintes comandos:
# Ensure that the namespace is annotated to create resources in the correct
# project/folder/organization. https://cloud.google.com/config-connector/docs/how-to/install-upgrade-uninstall#specify
kubectl apply -n CONFIG_CONNECTOR_NAMESPACE \
-f OUTPUT_FILE
# Wait for the resources to become healthy
kubectl wait -n CONFIG_CONNECTOR_NAMESPACE \
--for=condition=Ready \
--timeout=5m -f OUTPUT_FILE
Limpar
Limpar o conjunto de dados e a tabela de amostra
Terraform
# NOTE: if Terraform state gets corrupted during testing,
# use init --reconfigure to reset backend
echo "*************** TERRAFORM INIT ******************"
terraform init
# Remove delete protection on BigQuery table
sed -i "/resource \"google_bigquery_table\"/a deletion_protection=\"false\"" \
OUTPUT_FILE
terraform apply
echo "*************** TERRAFORM DESTROY ****************"
terraform destroy
KRM
Para limpar o conjunto de dados e a tabela do BigQuery da configuração de amostra, execute:
# If the resource was created via Config Connector:
kubectl delete -n CONFIG_CONNECTOR_NAMESPACE \
-f OUTPUT_FILE
Abandonar a implantação de amostra do Deployment Manager
Para abandonar uma implantação ativa que você converteu para KRM ou Terraform, execute:
gcloud deployment-manager deployments delete DEPLOYMENT_NAME --delete-policy ABANDON
Recursos com suporte para conversão
Terraform
Para listar os recursos compatíveis com o Terraform, execute o seguinte comando:
docker run --rm -it \
us-central1-docker.pkg.dev/dm-convert-host/deployment-manager/dm-convert:public-preview \
--output_format tf \
--list_supported_types
KRM
Para listar os recursos compatíveis com o KRM, execute o seguinte comando:
docker run --rm -it \
us-central1-docker.pkg.dev/dm-convert-host/deployment-manager/dm-convert:public-preview \
--output_format krm \
--list_supported_types
Próximas etapas
Analise as práticas recomendadas e recomendações para a configuração convertida.