Cette page décrit comment utiliser DM Convert pour convertir vos configurations Deployment Manager en modèle de ressource Kubernetes (KRM) ou Terraform.
Configurer votre environnement
Configurer vos variables d'environnement
Enregistrez les variables d'environnement suivantes utilisées par le reste de ce guide :
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"
Configurer vos outils
Vous devez avoir accès aux outils suivants :
gcloud
docker
kubectl
bq
Si vous utilisez Cloud Shell pour exécuter DM Convert, vous y avez déjà accès.
Convertir vos configurations
En règle générale, vous devez migrer votre configuration Deployment Manager vers Terraform ou KRM en procédant comme suit :
Préparer un déploiement Deployment Manager pour la conversion.
Convertir la configuration au format HCL (langage de configuration HashiCorp, pour Terraform) ou KRM (modèle de ressource Kubernetes).
Utiliser Terraform ou Config Connector pour appliquer la configuration convertie.
Abandonner le déploiement Deployment Manager existant.
Préparer votre déploiement existant
DM Convert fonctionne sur les modèles et les fichiers de configuration de Deployment Manager. Tout au long du guide, ces fichiers seront créés et enregistrés localement en tant qu'entrée pour l'outil DM Convert.
Vous pouvez créer vous-même un fichier de configuration ou acquérir une configuration à partir d'un déploiement en cours.
Convertir un fichier de configuration
Vous pouvez utiliser l'exemple de configuration suivant pour essayer le convertisseur. Remplacez PROJECT_ID
par l'ID de votre projet Google Cloud et enregistrez le contenu ci-dessous dans un fichier nommé 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
Obtenir une configuration à partir d'un déploiement en cours
Si vous souhaitez acquérir et convertir la configuration d'un déploiement en cours, vous pouvez récupérer la configuration étendue et l'enregistrer sur le disque en exécutant les commandes suivantes et en remplaçant
DEPLOYMENT_NAME
par le nom du déploiement.# 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
Convertir votre déploiement
Pour convertir les ressources au format HCL ou KRM dans deployment.yaml
et les enregistrer en tant que sorties converties, exécutez la commande suivante dans le même répertoire que deployment.yaml
avec les substitutions souhaitées:
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
Effectuez les substitutions suivantes :
OUTPUT_FORMAT
: format de sortie de la conversion. Il peut s'agir deTF
pour Terraform ou deKRM
pour KRM.OUTPUT_FILE
: nom du fichier dans lequel la sortie convertie est enregistrée.(Terraform uniquement)
OUTPUT_IMPORT_FILE
: nom du fichier dans lequel les commandes d'importation Terraform sont enregistrées. Si une optionproject_id
est spécifiée, les commandes d'importation sont générées en fonction de cette option. Si aucun indicateurproject_id
n'est spécifié, les commandes d'importation sont générées en fonction de l'attributprojectId
de la configuration de la ressource.DEPLOYMENT_NAME
: nom du déploiement. Cette information est utile si vous utilisez des modèles dans votre configuration Deployment Manager et que vous utilisez également la variable d'environnementdeployment
. Pour en savoir plus, consultez la section Utiliser une variable d'environnement.
Afficher les conversions
# Print output file
cat OUTPUT_FILE
Appliquer votre configuration convertie
Terraform
Configurer Terraform
# Configure default project
cat <<EOF > echo > main.tf
provider "google" {
project = "$PROJECT_ID"
}
EOF
Une fois que vous avez converti vos ressources Deployment Manager en Terraform, vous pouvez utiliser Terraform pour créer des ressources en déployant directement la configuration convertie.
Déployer votre configuration convertie à l'aide de 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
(Facultatif) Importer des ressources existantes
Si vous convertissez un déploiement existant et que vous souhaitez utiliser Terraform pour gérer ses ressources sans le redéployer, vous pouvez le faire à l'aide de la fonctionnalité d'importation de Terraform.
Pour cette section, vous utiliserez deployment.yaml
pour le processus d'importation.
Initialisez Terraform :
# NOTE: if Terraform state gets corrupted during testing,
# use init --reconfigure to reset backend
terraform init
Les commandes d'importation sont générées et enregistrées dans OUTPUT_IMPORT_FILE
.
Pour examiner son contenu, exécutez la commande suivante:
cat OUTPUT_IMPORT_FILE
Pour importer les ressources pour deployment.yaml
, exécutez la commande suivante:
# Make the import file executable
chmod +x OUTPUT_IMPORT_FILE
# Perform the import
./OUTPUT_IMPORT_FILE
Une fois les ressources importées dans votre état Terraform, vous pouvez vérifier si des modifications ont été apportées entre l'état et la configuration Terraform générée en exécutant la commande Terraform plan
:
terraform plan
Vous obtenez le résultat suivant:
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.
Acceptez cette modification dans le plan Terraform, car elle supprime les libellés spécifiques à Deployment Manager, c'est-à-dire goog-dm
, qui ne sont pas nécessaires une fois que les ressources sont gérées par Terraform.
Pour appliquer la configuration Terraform, exécutez la commande suivante:
# Accept changes by entering yes when prompted
terraform apply
Toutes les ressources définies dans deployment.yaml
sont désormais gérées par Terraform.
Par exemple, si vous souhaitez vérifier que Terraform gère bien les ressources converties, vous pouvez le faire en apportant une légère modification à la configuration Terraform en modifiant la date d'expiration par défaut de la table dans la ressource google_bigquery_dataset.bigquerydataset
:
...
# change from 10 hrs to 12 hrs
default_table_expiration_ms = 43200000
...
Une fois les modifications effectuées, vous pouvez appliquer la configuration Terraform et utiliser l'interface de ligne de commande (CLI) bq
pour vérifier les modifications:
# 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'
La sortie que vous recevez doit correspondre aux valeurs fournies dans la configuration Terraform mise à jour, ce qui confirme que Terraform gère désormais ces ressources.
KRM
Configurer Config Connector
Pour activer les ressources dans les fichiers de configuration KRM, vous avez besoin d'un cluster Kubernetes sur lequel Config Connector est installé. Pour créer un cluster de test, consultez la section Installer avec le module complémentaire GKE.
Dans Cloud Shell, assurez-vous que vos identifiants kubectl
sont configurés pour le cluster GKE que vous souhaitez utiliser. Remplacez GKE_CLUSTER
par le nom du cluster et exécutez la commande suivante :
gcloud container clusters get-credentials GKE_CLUSTER
Déployer votre configuration KRM convertie à l'aide de kubectl
Pour déployer votre configuration KRM convertie à l'aide de kubectl
, exécutez les commandes suivantes :
# 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
Effectuer un nettoyage
Nettoyer les exemples d'ensemble de données et de table
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
Pour nettoyer l'ensemble de données et la table BigQuery de l'exemple de configuration, exécutez :
# If the resource was created via Config Connector:
kubectl delete -n CONFIG_CONNECTOR_NAMESPACE \
-f OUTPUT_FILE
Abandonner l'exemple de déploiement Deployment Manager
Pour abandonner un déploiement en cours que vous avez réussi à convertir en KRM ou Terraform, exécutez :
gcloud deployment-manager deployments delete DEPLOYMENT_NAME --delete-policy ABANDON
Ressources compatibles pour la conversion
Terraform
Pour obtenir la liste des ressources compatibles avec Terraform, exécutez la commande suivante:
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
Pour lister les ressources compatibles avec KRM, exécutez la commande suivante:
docker run --rm -it \
us-central1-docker.pkg.dev/dm-convert-host/deployment-manager/dm-convert:public-preview \
--output_format krm \
--list_supported_types
Étapes suivantes
Consultez les bonnes pratiques et recommandations pour la configuration convertie.