このページでは、DM 変換を使用して 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 変換を実行している場合は、ツールへのアクセス権がすでにあります。
構成の変換
大まかには、次の方法でDeployment Manager の構成をTerraform または KRM に移行します。
変換用の Deployment Manager のデプロイの準備。
構成を HCL(Terraform 用 HashiCorp 構成言語)または KRM(Kubernetes リソースモデル)のいずれかの形式に変換する。
Terraform または Config Connector を使用して、変換された構成を適用する。
既存の Deployment Manager のデプロイを破棄する。
既存のデプロイを準備する
DM 変換は、Deployment Manager の構成ファイルとテンプレートを操作します。このガイドを通して、これらのファイルは、DM 変換ツールの入力としてローカルに作成、保存します。
構成ファイルは、手動で作成することや、実際のデプロイから取得することができます。
構成ファイルを変換する
コンバータを試すには、次のサンプル構成を使用します。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.
Deployment Manager 固有のラベル(goog-dm
など)が削除されるため、Terraform プランでこの変更を承認します。これらのラベルは、リソースが Terraform によって管理されるようになると不要になります。
Terraform 構成を適用するには、次のコマンドを実行します。
# Accept changes by entering yes when prompted
terraform apply
これで、deployment.yaml
で定義されたすべてのリソースが Terraform の管理下に置かれます。
たとえば、Terraform が実際に変換されたリソースを管理していることを確認するには、Terraform 構成にわずかな変更を加えて、google_bigquery_dataset.bigquerydataset
リソースのデフォルトのテーブル有効期限を変更します。
...
# 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
Config Connector を設定する
KRM 構成ファイルのリソースをアクチュエートするには、Config Connector がインストールされた 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
次のステップ
変換された構成のベスト プラクティスと推奨事項を確認する。