DM Convert の使用に関するベスト プラクティス

Terraform の変換に関するベスト プラクティス

状態

状態ファイルには、Terraform が管理するリソースに関する情報が保存されます。デフォルトでは、Terraform はローカルの状態をディスクに保存します。リモートで状態を保存すると、分散コラボレーションのために、機密情報の保護、Terraform の継続的インテグレーション(CI)の実行が可能になります。

Deployment Manager テンプレートを Terraform に変換し、必要に応じてリソースをインポートしたら、Cloud Storage にリモートで状態を保存する手順に沿って行うことをおすすめします。

モジュール

複雑さを軽減し、整合性を適用して、構成の再利用性を��めるには、Terraform モジュールを使用してリソースのコレクションをカプセル化します。

モジュールを使用するには、次のいずれかを行います。

ほとんどのユースケースでは、公開モジュールを使用することをおすすめします。

カスタム モジュールの作成

  1. 構成を変換した後、モジュールに移動するリソースを特定します。

  2. これらのリソースの構成をモジュール ディレクトリに移動し、必要な変数をパラメータに変換します。

    次の例は、google_bigquery_datasetgoogle_bigquery_table をモジュールに移動する方法を示しています。

    # bq-module/main.tf
    resource "google_bigquery_dataset" "bigquerydataset" {
      provider = google-beta
    
      default_table_expiration_ms = 36000000
      location = "us-west1"
      dataset_id = var.dataset_id
      project = var.project_id
    }
    
    resource "google_bigquery_table" "bigquerytable" {
      provider = google-beta
    
      labels = {
        data-source = "external"
        schema-type = "auto-junk"
      }
      dataset_id = var.dataset_id
      project = var.project_id
      table_id = var.table_id
    
      depends_on = [
        google_bigquery_dataset.bigquerydataset
      ]
    }
    
    # bq-module/variables.tf
    variable "project_id" {
      description = "Project ID"
      type = string
    }
    
    variable "dataset_id" {
      description = "Dataset ID"
      type = string
    }
    
    variable "table_id" {
      description = "Table ID"
      type = string
    }
    
  3. エクスポートされた main.tf ファイルで、元の構成を、作成したモジュールに置き換えます。

    次の例は、前のステップで作成したモジュールを使用した置き換えを示しています。

    # main.tf
    module "bq" {
      source = "./bq-module"
    
      project_id = "PROJECT_ID"
      dataset_id = "bigquerydataset"
      table_id   = "bigquerytable"
    }
    
  4. ローカル モジュールを初期化するには、次のコマンドを実行します。

    terraform init
    
  5. リソースに関連付けられている Terraform の状態をモジュール インスタンスに移動します。

    モジュールを前のステップの例から移動するには、次のコマンドを実行します。

    terraform state mv google_bigquery_dataset.bigquerydataset module.bq.google_bigquery_dataset.bigquerydataset
    terraform state mv google_bigquery_table.bigquerytable module.bq.google_bigquery_table.bigquerytable
    

    この例では、移動からの出力は次のようになります。

    Move "google_bigquery_dataset.bigquerydataset" to "module.bq.google_bigquery_dataset.bigquerydataset"
    Successfully moved 1 object(s).
    Move "google_bigquery_table.bigquerytable" to "module.bq.google_bigquery_table.bigquerytable"
    Successfully moved 1 object(s).
    
  6. 次のコマンドを実行して、リソースが変更されていない��とを確認します。

    terraform plan
    

    コマンドの実行後に出力される例を次に示します。

    No changes. Your infrastructure matches the configuration.
    

公開済みモジュールを使用する

  1. 構成を変換した後、公開モジュール��移動�����リソース���特定します。

  2. ���ジュールのドキュメントでモジュールの構成オプションを確認します。

  3. 現在のリソース構成に、構成済みのモジュールのインスタンスを作成します。

    たとえば、google_bigquery_datasetgoogle_bigquery_table を公式の BigQuery モジュールに移動する場合、モジュールは次の例のようになります。

    module "bq" {
      source  = "terraform-google-modules/bigquery/google"
      version = "~> 5.0"
    
      project_id          = "PROJECT_ID"
      dataset_id          = "bigquerydataset"
      location            = "us-west1"
      deletion_protection = true
    
      tables = [
        {
          table_id           = "bigquerytable",
          friendly_name      = "bigquerytable"
          time_partitioning  = null,
          range_partitioning = null,
          expiration_time    = null,
          clustering         = [],
          schema             = null,
          labels = {
            data-source = "external"
            schema-type = "auto-junk"
          },
        }
      ]
    }
    
  4. ローカル モジュールを初期化するには、次のコマンドを実行します。

    terraform init
    
  5. モジュールのソースコードを読んで、アップストリーム モジュール内のリソース アドレスを特定し、move コマンドを作成します。

    terraform state mv google_bigquery_dataset.bigquerydataset  module.bq.google_bigquery_dataset.main
    terraform state mv google_bigquery_table.bigquerytable 'module.bq.google_bigquery_table.main["bigquerytable"]'
    
  6. 構成に対する変更を表示するには、次のコマンドを実行します。

    terraform plan
    

選択した公開モジュールのデフォルト設定が異なるか、構成が異なる場合は、コマンドの実行による出力に違いが見られる場合があります。

作動

Cloud Build、Jenkins、GitHub Actions などの継続的インテグレーション(CI)システムを使用して、Terraform の大規模な実行を自動化することをおすすめします。詳細については、Terraform、Cloud Build、GitOps を使用してインフラストラクチャをコードとして管理するをご覧ください。

トリガーの作成をブートストラップして認証を簡素化する場合は、Cloud Build ワークスペース ブループリントの使用を選択できます。

構造

DM Convert から変換された各構成は、単一の状態ファイルにマッピングされた単一のルート構成です。多数のリソースを保持するために単一の状態ファイルを設定することはおすすめしません。構成を変換したら、新しい構成��ルート モジュールのベスト プラクティスに従っているのを確認することをおすすめします。