이 페이지에서는 DM Convert를 사용하여 Deployment Manager 구성을 Kubernetes 리소스 모델(KRM) 또는 Terraform으로 변환하는 프로세스를 설명합니다.
환경 설정
환경 변수 설정
이 가이드의 나머지 부분에서 사용하는 다음 환경 변수를 저장합니다.
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"
도구 설정
다음 도구에 액세스할 수 있어야 합니다.
gcloud
docker
kubectl
bq
Cloud Shell을 사용하여 DM Convert를 실행하는 경우 이미 액세스 권한이 있는 것입니다.
구성 변환
개략적으로 다음을 수행하여 Deployment Manager 구성을 Terraform 또는 KRM으로 마이그레이션합니다.
변환을 위해 Deployment Manager 배포 준비
구성을 HCL(Terraform용 HashiCorp 구성 언어) 또는 KRM(Kubernetes 리소스 모델) 형식으로 변환
Terraform 또는 구성 커넥터를 사용하여 변환된 구성 적용
기존 Deployment Manager 배포 중단
기존 배포 준비
DM Convert는 Deployment Manager 구성 파일 및 템플릿에서 작동합니다. 이 가이드에서 이러한 파일은 DM Convert 도구의 입력으로 로컬로 생성 및 저장됩니다.
구성 파일을 직접 만들거나 라이브 배포에서 구성을 가져올 수 있습니다.
구성 파일 변환
다음 샘플 구성을 사용하여 변환기를 사용해 볼 수 있습니다. PROJECT_ID
를 Google Cloud 프로젝트 ID로 바꾸고 아래 콘텐츠를 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
실시간 배포에서 구성 가져오기
실시간 배포의 구성을 가져오고 변환하려는 경우 다음 명령어를 실행하여 확장된 구성을 검색하고 이를 디스크에 저장할 수 있습니다. 이때
DEPLOYMENT_NAME
을 배포 이름으로 바꿉니다.# 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
배포 변환
deployment.yaml
의 리소스를 HCL 또는 KRM 형식으로 변환하고 변환된 출력으로 저장하려면 deployment.yaml
과 동일한 디렉터리에서 원하는 대체로 다음 명령어를 실행합니다.
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
다음과 같이 바꿉니다.
OUTPUT_FORMAT
: 변환의 출력 형식입니다. Terraform의 경우TF
, KRM의 경우KRM
일 수 있습니다.OUTPUT_FILE
: 변환된 출력이 저장되는 파일의 이름입니다.(Terraform만 해당)
OUTPUT_IMPORT_FILE
: Terraform 가져오기 명령어가 저장되는 파일의 이름입니다.project_id
플래그를 지정하면 가져오기 명령어가 해당 플래그를 기반으로 생성됩니다.project_id
플래그를 지정하지 않으면 가져오기 명령어가 리소스 구성의projectId
속성을 기반으로 생성됩니다.DEPLOYMENT_NAME
: 배포 이름입니다. 이는 Deployment Manager 구성에서 템플릿을 사용하는 경우와deployment
환경 변수를 사용하는 경우에도 관련이 있습니다. 자세한 내용은 환경 변수 사용을 참조하세요.
전환 보기
# Print output file
cat OUTPUT_FILE
변환된 구성 적용
Terraform
Terraform 설정
# Configure default project
cat <<EOF > echo > main.tf
provider "google" {
project = "$PROJECT_ID"
}
EOF
Deployment Manager 리소스를 Terraform으로 변환한 후에는 Terraform을 사용하여 변환된 구성을 직접 배포하여 리소스를 만들 수 있습니다.
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
(선택사항) 기존 리소스 가져오기
기존 배포를 변환하는 경우 재배포하지 않고 Terraform을 사용하여 리소스를 관리하려는 경우 Terraform 가져오기 기능을 사용하면 됩니다.
이 섹션에서는 가져오기 프로세스에 deployment.yaml
을 사용합니다.
Terraform을 초기화합니다.
# NOTE: if Terraform state gets corrupted during testing,
# use init --reconfigure to reset backend
terraform init
가져오기 명령어가 생성되고 OUTPUT_IMPORT_FILE
에 저장됩니다.
콘텐츠를 검토하려면 다음 명령어를 실행합니다.
cat OUTPUT_IMPORT_FILE
deployment.yaml
의 리소스를 가져오려면 다음 명령어를 실행합니다.
# Make the import file executable
chmod +x OUTPUT_IMPORT_FILE
# Perform the import
./OUTPUT_IMPORT_FILE
Terraform 상태로 리소스를 가져온 후 Terraform plan
명령어를 실행하여 상태와 생성된 Terraform 구성 간에 변경사항이 있는지 확인할 수 있습니다.
terraform plan
그러면 다음과 같은 출력이 생성됩니다.
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.
리소스가 Terraform에서 관리되는 경우 필요하지 않은 Deployment Manager 특정 라벨(goog-dm
)을 삭제하므로 Terraform 계획에서 이 변경사항을 수락합니다.
Terraform 구성을 적용하려면 다음 명령어를 실행합니다.
# Accept changes by entering yes when prompted
terraform apply
이제 deployment.yaml
에 정의된 모든 리소스가 Terraform 관리 대상입니다.
예를 들어 Terraform이 실제로 변환된 리소스를 관리하고 있는지 확인하려면 google_bigquery_dataset.bigquerydataset
리소스에서 기본 테이블 만료 시간을 수정하여 Terraform 구성을 약간만 변경하면 됩니다.
...
# change from 10 hrs to 12 hrs
default_table_expiration_ms = 43200000
...
변경 후에는 Terraform 구성을 적용하고 bq
명령줄 인터페이스(CLI)를 사용하여 변경사항을 확인할 수 있습니다.
# 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'
표시되는 출력은 업데이트된 Terraform 구성에 제공된 값과 일치해야 하며, 그러면 Terraform이 현대 이러한 리소스를 관리하고 있음을 확인할 수 있습니다.
KRM
구성 커넥터 설정
KRM 구성 파일에서 리소스를 활성화하려면 구성 커넥터가 설치된 Kubernetes 클러스터가 필요합니다. 테스트 클러스터를 만들려면 GKE 부가기능으로 설치를 참조하세요.
Cloud Shell에서 사용할 GKE 클러스터에 대해 kubectl
사용자 인증 정보가 구성되어 있는지 확인합니다. GKE_CLUSTER
을 클러스터 이름으로 바꾸고 다음 명령어를 실행합니다.
gcloud container clusters get-credentials GKE_CLUSTER
kubectl
을 사용하여 변환된 KRM 구성 배포
kubectl
을 사용하여 변환된 KRM 구성을 배포하려면 다음 명령어를 실행합니다.
# 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
삭제
샘플 데이터 세트 및 테이블 삭제
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
샘플 구성에서 BigQuery 데이터 세트와 테이블을 삭제하려면 다음을 실행합니다.
# If the resource was created via Config Connector:
kubectl delete -n CONFIG_CONNECTOR_NAMESPACE \
-f OUTPUT_FILE
샘플 Deployment Manager 배포 중단
KRM 또는 Terraform으로 성공적으로 변환한 실시간 배포를 중단하려면 다음을 실행합니다.
gcloud deployment-manager deployments delete DEPLOYMENT_NAME --delete-policy ABANDON
변환에 지원되는 리소스
Terraform
Terraform에 지원되는 리소스를 나열하려면 다음 명령어를 실행합니다.
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
KRM에 지원되는 리소스를 나열하려면 다음 명령어를 실행합니다.
docker run --rm -it \
us-central1-docker.pkg.dev/dm-convert-host/deployment-manager/dm-convert:public-preview \
--output_format krm \
--list_supported_types
다음 단계
변환된 구성의 권장사항 및 추천을 검토합니다.