Esta página descreve o processo de utilização do DM Convert para converter as suas configurações do Deployment Manager no modelo de recursos do Kubernetes (KRM) ou no Terraform.
Configure o seu ambiente
Configure as variáveis de ambiente
Guarde as seguintes variáveis de ambiente, que o resto deste guia usa:
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"
Configure as suas ferramentas
Tem de ter acesso às seguintes ferramentas:
gcloud
docker
kubectl
bq
Se usar o Cloud Shell para executar o DM Convert, já tem acesso aos mesmos.
Converta as suas configurações
A um nível elevado, migra a configuração do Deployment Manager para o Terraform ou o KRM da seguinte forma:
Preparar uma implementação do Gestor de Implementações para conversão.
Converter a configuração para o formato HCL (linguagem de configuração da HashiCorp, para o Terraform) ou KRM (modelo de recursos do Kubernetes).
Usando o Terraform ou o Config Connector para aplicar a configuração convertida.
Abandonar a implementação do Deployment Manager existente.
Prepare a implementação existente
O DM Convert funciona com ficheiros de configuração e modelos do Deployment Manager. Ao longo do guia, estes ficheiros são criados e guardados localmente como entrada para a ferramenta DM Convert.
Pode criar um ficheiro de configuração ou adquirir uma configuração a partir de uma implementação em direto.
Converta um ficheiro de configuração
Pode usar a seguinte configuração de exemplo para experimentar o conversor. Substitua
PROJECT_ID
pelo ID do seu Google Cloud projeto e guarde
o conteúdo abaixo num ficheiro denominado 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
Adquira uma configuração a partir de uma implementação em direto
Se quiser adquirir e converter a configuração de uma implementação ativa, pode obter a configuração expandida e guardá-la no disco executando os seguintes comandos, substituindo
DEPLOYMENT_NAME
pelo nome da implementaçã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
Converta a sua implementação
Para converter recursos em deployment.yaml
para o formato HCL ou KRM e guardá-los como resultados convertidos, execute o seguinte comando no mesmo diretório que deployment.yaml
com as substituições pretendidas:
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 o Terraform ouKRM
para o KRM.OUTPUT_FILE
: o nome do ficheiro no qual o resultado convertido é guardado.(Apenas Terraform)
OUTPUT_IMPORT_FILE
: o nome do ficheiro no qual os comandos de importação do Terraform são guardados. Se for especificada uma flagproject_id
, os comandos de importação são gerados com base nessa flag. Se não for especificado um sinalizadorproject_id
, os comandos de importação são gerados com base no atributoprojectId
da configuração do recurso.DEPLOYMENT_NAME
: o nome da implementação. Isto é relevante se estiver a usar modelos na configuração do Deployment Manager e também estiver a usar a variável de ambientedeployment
. Para mais informações, visite o artigo Usar uma variável de ambiente.
Veja as conversões
# Print output file
cat OUTPUT_FILE
Aplique a configuração convertida
Terraform
Configure 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, pode usar o Terraform para criar recursos implementando diretamente a configuração convertida.
Implemente a configuração convertida através do 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
(Opcional) Importe recursos existentes
Se estiver a converter uma implementação existente e quiser usar o Terraform para gerir os respetivos recursos sem reimplementar, pode fazê-lo através da funcionalidade de importação do Terraform.
Para esta secção, vai usar deployment.yaml
para 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 guardados em OUTPUT_IMPORT_FILE
.
Para rever o respetivo conteúdo, execute o seguinte comando:
cat OUTPUT_IMPORT_FILE
Para importar os recursos do 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 seu estado do Terraform, pode verificar se existem alterações entre o estado e a configuração do Terraform gerada executando o comando plan
do Terraform:
terraform plan
Isto produz o seguinte resultado:
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 esta alteração no plano do Terraform, uma vez que está a remover etiquetas específicas do Deployment Manager, ou seja, goog-dm
, que não são necessárias quando os recursos estão a ser geridos 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 sob a gestão do Terraform.
Por exemplo, se quiser verificar se o Terraform está realmente a gerir os recursos convertidos, pode fazê-lo alterando ligeiramente a configuração do Terraform, modificando o tempo de expiração da tabela predefinido no recurso google_bigquery_dataset.bigquerydataset
:
...
# change from 10 hrs to 12 hrs
default_table_expiration_ms = 43200000
...
Depois de fazer as alterações, pode aplicar a configuração do Terraform e usar a interface de linhas de comando (CLI) bq
para validar as alterações:
# 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'
O resultado que recebe deve corresponder aos valores fornecidos na configuração do Terraform atualizada, o que confirma que o Terraform está agora a gerir estes recursos.
KRM
Configure o Config Connector
Para acionar os recursos nos ficheiros de configuração do KRM, precisa de um cluster do Kubernetes com o Config Connector instalado. Para criar um cluster de teste, consulte o artigo Instalar com o suplemento do GKE.
No Cloud Shell, certifique-se de que as suas credenciais kubectl
estão configuradas para o cluster do GKE que quer usar. Substitua
GKE_CLUSTER
pelo nome do cluster e execute o seguinte comando:
gcloud container clusters get-credentials GKE_CLUSTER
Implemente a configuração do KRM convertida através do kubectl
Para implementar a configuração KRM convertida através do 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
Limpe 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 exemplo, execute o seguinte comando:
# If the resource was created via Config Connector:
kubectl delete -n CONFIG_CONNECTOR_NAMESPACE \
-f OUTPUT_FILE
Abandone a implementação de amostra do Deployment Manager
Para abandonar uma implementação em direto que converteu com êxito para KRM ou Terraform, execute:
gcloud deployment-manager deployments delete DEPLOYMENT_NAME --delete-policy ABANDON
Recursos suportados para conversão
Terraform
Para apresentar uma lista dos recursos suportados para 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 apresentar uma lista dos recursos suportados para 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
Passos seguintes
Reveja as práticas recomendadas e as recomendações para a configuração convertida.