Halaman ini menjelaskan proses penggunaan DM Konversi untuk mengonversi konfigurasi Deployment Manager Anda ke Model Resource Kubernetes (KRM) atau Terraform.
Menyiapkan lingkungan Anda
Menyiapkan variabel lingkungan
Simpan variabel lingkungan berikut, yang digunakan di bagian lain panduan ini:
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"
Menyiapkan alat
Anda harus memiliki akses ke alat berikut:
gcloud
docker
kubectl
bq
Jika menggunakan Cloud Shell untuk menjalankan DM Convert, Anda sudah memiliki akses ke sana.
Mengonversi konfigurasi
Secara umum, Anda memigrasikan konfigurasi Deployment Manager ke Terraform atau KRM dengan:
Menyiapkan deployment Deployment Manager untuk konversi.
Mengonversi konfigurasi ke format HCL (bahasa konfigurasi HashiCorp, untuk Terraform) atau KRM (Model Resource Kubernetes).
Menggunakan Terraform atau Config Connector untuk menerapkan konfigurasi yang dikonversi.
Menghentikan deployment Deployment Manager yang ada.
Menyiapkan deployment yang ada
DM Convert beroperasi pada file konfigurasi dan template Deployment Manager. Di seluruh panduan ini, file ini akan dibuat dan disimpan secara lokal sebagai input untuk alat DM Convert.
Anda dapat membuat file konfigurasi sendiri atau mendapatkan konfigurasi dari deployment aktif.
Mengonversi file konfigurasi
Anda dapat menggunakan contoh konfigurasi berikut untuk mencoba konverter. Ganti
PROJECT_ID
dengan project ID Google Cloud Anda, dan simpan
konten di bawah ke file bernama 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
Mendapatkan konfigurasi dari deployment live
Jika ingin memperoleh dan mengonversi konfigurasi deployment aktif, Anda dapat mengambil konfigurasi yang diperluas dan menyimpannya ke disk dengan menjalankan perintah berikut, mengganti
DEPLOYMENT_NAME
dengan nama deployment.# 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
Mengonversi deployment
Untuk mengonversi resource dalam deployment.yaml
ke format HCL atau KRM dan menyimpannya sebagai
output yang dikonversi, jalankan perintah berikut di direktori yang sama dengan
deployment.yaml
dengan penggantian yang diinginkan:
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
Lakukan penggantian berikut:
OUTPUT_FORMAT
: Format output untuk konversi. Ini dapat berupaTF
untuk Terraform atauKRM
untuk KRM.OUTPUT_FILE
: Nama file tempat output yang dikonversi disimpan.(Khusus Terraform)
OUTPUT_IMPORT_FILE
: Nama file tempat perintah impor Terraform disimpan. Jika flagproject_id
ditentukan, perintah impor akan dibuat berdasarkan flag tersebut. Jika flagproject_id
tidak ditentukan, perintah impor akan dibuat berdasarkan atributprojectId
dari konfigurasi resource.DEPLOYMENT_NAME
: Nama deployment. Hal ini relevan jika Anda menggunakan template dalam konfigurasi Deployment Manager, dan juga menggunakan variabel lingkungandeployment
. Untuk mengetahui informasi selengkapnya, buka Menggunakan variabel lingkungan.
Melihat konversi
# Print output file
cat OUTPUT_FILE
Menerapkan konfigurasi yang dikonversi
Terraform
Menyiapkan Terraform
# Configure default project
cat <<EOF > echo > main.tf
provider "google" {
project = "$PROJECT_ID"
}
EOF
Setelah mengonversi resource Deployment Manager ke Terraform, Anda dapat menggunakan Terraform untuk membuat resource dengan langsung men-deploy konfigurasi yang dikonversi.
Men-deploy konfigurasi yang dikonversi menggunakan 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
(Opsional) Mengimpor resource yang ada
Jika Anda mengonversi deployment yang ada dan ingin menggunakan Terraform untuk mengelola resource-nya tanpa men-deploy ulang, Anda dapat melakukannya dengan menggunakan Fitur impor Terraform.
Untuk bagian ini, Anda akan menggunakan deployment.yaml
untuk
proses impor.
Lakukan inisialisasi Terraform:
# NOTE: if Terraform state gets corrupted during testing,
# use init --reconfigure to reset backend
terraform init
Perintah impor dibuat dan disimpan ke OUTPUT_IMPORT_FILE
.
Untuk meninjau kontennya, jalankan perintah berikut:
cat OUTPUT_IMPORT_FILE
Untuk mengimpor resource untuk deployment.yaml
, jalankan perintah berikut:
# Make the import file executable
chmod +x OUTPUT_IMPORT_FILE
# Perform the import
./OUTPUT_IMPORT_FILE
Setelah mengimpor resource ke status Terraform, Anda dapat memverifikasi
apakah ada perubahan antara status dan konfigurasi Terraform
yang dihasilkan dengan menjalankan perintah plan
Terraform:
terraform plan
Tindakan ini menghasilkan output berikut:
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.
Terima perubahan ini dalam rencana Terraform karena perubahan ini menghapus
label khusus Deployment Manager, yaitu goog-dm
yang tidak diperlukan
setelah resource dikelola oleh Terraform.
Untuk menerapkan konfigurasi Terraform, jalankan perintah berikut:
# Accept changes by entering yes when prompted
terraform apply
Sekarang semua resource yang ditentukan di deployment.yaml
berada di bawah
pengelolaan Terraform.
Misalnya, jika ingin memverifikasi bahwa Terraform memang mengelola resource yang dikonversi, Anda dapat melakukannya dengan melakukan sedikit perubahan pada konfigurasi Terraform dengan mengubah waktu habis masa berlaku tabel default di resource google_bigquery_dataset.bigquerydataset
:
...
# change from 10 hrs to 12 hrs
default_table_expiration_ms = 43200000
...
Setelah melakukan perubahan, Anda dapat menerapkan konfigurasi Terraform, dan
menggunakan antarmuka command line (CLI) bq
untuk memverifikasi perubahan:
# 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'
Output yang Anda terima harus cocok dengan nilai yang diberikan dalam konfigurasi Terraform yang diperbarui, yang mengonfirmasi bahwa Terraform kini mengelola resource ini.
KRM
Menyiapkan Config Connector
Untuk mengaktifkan resource dalam file konfigurasi KRM, Anda memerlukan cluster Kubernetes dengan Config Connector yang diinstal. Untuk membuat cluster pengujian, lihat Menginstal dengan add-on GKE.
Di Cloud Shell, pastikan kredensial kubectl
Anda dikonfigurasi untuk
cluster GKE yang ingin Anda gunakan. Ganti
GKE_CLUSTER
dengan nama cluster, lalu jalankan
perintah berikut:
gcloud container clusters get-credentials GKE_CLUSTER
Men-deploy konfigurasi KRM yang dikonversi menggunakan kubectl
Untuk men-deploy konfigurasi KRM yang dikonversi menggunakan kubectl
, jalankan perintah berikut:
# 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
Pembersihan
Membersihkan set data dan tabel contoh
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
Untuk membersihkan set data dan tabel BigQuery dari konfigurasi sampel, jalankan:
# If the resource was created via Config Connector:
kubectl delete -n CONFIG_CONNECTOR_NAMESPACE \
-f OUTPUT_FILE
Menghapus deployment Deployment Manager contoh
Untuk membatalkan deployment aktif yang berhasil Anda konversi ke KRM atau Terraform, jalankan:
gcloud deployment-manager deployments delete DEPLOYMENT_NAME --delete-policy ABANDON
Resource yang didukung untuk konversi
Terraform
Untuk menampilkan daftar resource yang didukung untuk Terraform, jalankan perintah berikut:
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
Untuk menampilkan daftar resource yang didukung untuk KRM, jalankan perintah berikut:
docker run --rm -it \
us-central1-docker.pkg.dev/dm-convert-host/deployment-manager/dm-convert:public-preview \
--output_format krm \
--list_supported_types
Langkah berikutnya
Tinjau praktik terbaik dan rekomendasi untuk konfigurasi yang dikonversi.