Terraform デプロイ用の VM イメージを構成する

この記事では、Terraform を使用してデプロイ用の VM イメージの構成を完了し、送信する方法について説明します。

デプロイ パッケージの作成方法を決定する

Producer Portal のガイド付き構成オプションを使用して、Google Cloud コンソールで直接デプロイ パッケージを作成することをおすすめします。

ガイド付き構成オプションでは、基本的なファイアウォール ルールを使用した単一 VM デプロイなどの簡単な VM プロダクトがサポートされますが、複数の VM や非コンピューティング リソースドを使用したデプロイなど、複雑な機能はサポートされません。ガイド付き構成でサポートされていない機能が必要な場合は、手動構成オプションを使用して、デプロイ パッケージを作成するか、既存のパッケージに新しい機能を追加してカスタマイズします。

ガイド付き構成と手動構成を切り替える

Producer Portal のガイド付き構成オプションを使用していて、後でデプロイ パッケージを手動構成に切り替える場合は、[手動構成に移動] をクリックします。

ガイド付き構成を完了する

Google Cloud コンソールを使用してシンプルなデプロイ パッケージの構成を完了し、送信するには、次の手順を実施します。

  1. Producer Portal で [デプロイ パッケージ] セクションに移動します。

  2. [Terraform 構成] で、[Cloud Storage バケット] というラベルの付いた入力フィールドの横にある [参照] をクリックします。

    Cloud Storage バケットをすでに作成している場合は、ここで選択します。

    Cloud Storage バケットがない場合は、[新しいバケットを作成] というラベルのアイコンをクリックします。新しいバケットを作成するときは、次の操作を行います。

    • バケットの名前を選択します。

    • バケットでデータの保存先リージョンを指定します。

    • データのストレージ クラスを指定します。

    • バケットのデータに対する Identity and Access Management(IAM)権限に適用する粒度を決定します。

    • 暗号化やデータ保持ポリシーなど、オプションの詳細設定を構成します。

  3. Cloud Storage バケットでオブジェクトのバージョニングが有効になっていることを確認してください。

  4. バケット設定を保存してデプロイ パッケージの構成を続けるには、[構成] をクリックします。

  5. [マシンタイプの選択] で、VM プロダクトのデフォルト ゾーン最小マシンタイプデフォルトのマシンタイプ、およびブートディスクのサイズとタイプを指定する必要があります。

  6. [オペレーティング システムの指定] で、VM イメージが使用する OS の名前とバージョン、および VM イメージのバージョン番号を指定する必要があります。

  7. (省略可能)[VM アクセスの設定] で、ユーザーがデプロイ後の VM へのアクセスに使用できるようにするために、サイトと管理者 URL、およびユーザー名とパスワードを指定できます。

  8. (省略可能)[ネットワークの構成] で IP 転送の設定を指定し、ファイアウォール ルールを構成します。

  9. (省略可能)[次のステップの定義] で、プロダクトのユーザーにプロダクトの使用を開始するための手順を提供できます。これらの手順は、プロダクトをデプロイした後に表示されます。

  10. 前の手順を完了したら、[生成] をクリックしてデプロイ パッケージを作成します。

    後からさらにデプロイ パッケージに変更を加える必要がある場合は、[編集] をクリックして変更を行い、[生成] をクリックして、これらの変更が適用されたデプロイ パッケージを再生成します。

  11. Producer Portal で審査のためにデプロイ パッケージを送信します。デプロイ パッケージを送信してから Google がパッケージを審査し、承認するまでには最大で 2 週間かかります。

手動構成を完了する

このセクションでは、手動構成オプションを使用してデプロイ パッケージを作成し、パッケージを送信して審査を受ける方法について説明します。

Terraform モジュールのデフォルトとカスタムのどちらを使用するかを指定する

顧客がプロダクトをデプロイするときに、Terraform モジュールのデフォルトまたはカスタムのどちらを使用してもらうかを選択できます。

デフォルトの Terraform モジュールを使用する場合、Google Cloud では、プロダクトのデプロイに使用できる自動生成された Terraform コードが顧客に提供されます。

カスタム Terraform モジュールを使用する場合は、顧客に独自の Terraform テンプレートを提供する必要があります。これらのテンプレートは、コマンドライン インターフェース(CLI)を使用することによって顧客がデプロイできる形式で提供すること、またはCloud Marketplace から直接モジュールを顧客がデプロイできる追加のメタデータを使用して提供することができます。

デフォルトかカスタムの Terraform モジュールのどちらを使用するか指定するには、そして、カスタム Terraform モジュールの場合は、モジュールをどのように顧客がデプロイするかを指定するには、次の手順を行います。

  1. Producer Portal で [デプロイ パッケージ] セクションに移動します。

  2. Terraform の構成タイプで、デフォルトカスタム(CLI デプロイ)、またはカスタム(UI のデプロイ)を選択します。

カスタム Terraform モジュールの要件

カスタム Terraform モジュールを使用する場合は、カスタム モジュールが次の要件を満たしている必要があります。

  • カスタム モジュールには、Cloud Marketplace が要件を満たしていることを確認するために使用できるモジュールが必要です。詳細については、モジュールが検証に合格するテストをご覧ください。

  • モジュールには、project_id という変数が必要です。この変数には、顧客がモジュールをデプロイするために使用するプロジェクト ID が格納されます。

  • イメージの名前への参照を、projects/PROJECT_NAME/global/images/IMAGE_NAME の形式で Terraform 変数として指定する必要があります。VM プロダクトの公開時に Cloud Marketplace が所有するイメージのコピーをモジュールに置換できるように、default の値を VM イメージの名前に設定する必要があります。

  • モジュールは、パッケージ化されていない外部モジュールに依存しないようにします。

  • モジュールでは、次の承認済みプロバイダのみを使用する必要があります。

    • archive
    • cloud-init
    • dns
    • google
    • google-beta
    • http
    • null
    • random
    • time
    • tls

これらの要件を満たすカスタム モジュールの例については、カスタム Terraform モジュールのサンプルをご覧ください。

UI デプロイ用のカスタム Terraform モジュールの追加要件

カスタム モジュールが UI のデプロイをサポートしている場合は、次の追加要件を満たす必要があります。

  • モジュールには、goog_cm_deployment_name という変数を含める必要があります。Cloud Marketplace では、この変数を使用して、デプロイページでお客様のデプロイに名前を付けます。この変数を使用して、1 つのプロジェクト内の複数のデプロイ間でのリソース名の競合を回避してください。例については、カスタム Terraform モジュールのサンプルgoog_cm_deployment_name をご覧ください。

  • ファイル metadata.display.yaml では、すべてのイメージ変数の xGoogleProperty 型として ET_GCE_DISK_IMAGE を指定する必要があります。例については、カスタム Terraform モジュールのサンプルmetadata.display.yaml をご覧ください。

  • プロダクトにマルチ VM イメージや、複数の CPU アーキテクチャをサポートするイメージが含まれている場合、お客様が使用する VM イメージを選択できるように、enumValueLabels を追加する必要があります。例については、カスタム Terraform モジュールのサンプルをご覧ください。

  • モジュールは、Terraform のプロビジョナーのサポートに依存しないようにします。

カスタム Terraform モジュールの追加手順

カスタム Terraform モジュールの使用を選択した場合は、デプロイ用に VM イメージを構成するために、次の追加手順を完了する必要があります。

  1. Producer Portal で [デプロイ パッケージ] セクションに移動します。

  2. [Terraform 構成] の [イメージ変数] で、[変数を追加] をクリックします。

    プロダクトの Terraform デプロイを有効にするには、Marketplace 所有のイメージの使用を有効にしている必要があります。Cloud Marketplace では、ここで追加した変数を使用して、顧客がプロダクトをデプロイするときに Marketplace が所有するバージョンの VM イメージにスワップします。

  3. [イメージ変数] テキスト フィールドに、変数の名前(「image」など)を入力します。

  4. カスタム Terraform モジュールで、前の手順で作成した変数のデフォルト値を、プロダクトの VM イメージの名前(projects/YOUR_PROJECT/global/images/YOUR_IMAGE 形式)に設定します。

  5. [GCS オブジェクト ロケーションを指定する] で、[参照] をクリックします。

    Cloud Storage バケットをすでに作成している場合は、ここで選択します。

    Cloud Storage バケットがない場合は、[新しいバケットを作成] というラベルのアイコンをクリックします。新しいバケットを作成するときは、次の操作を行います。

    • バケットの名前を選択します。

    • バケットでデータの保存先リージョンを指定します。

    • データのストレージ クラスを指定します。

    • バケットのデータに対する Identity and Access Management(IAM)権限に適用する粒度を決定します。

    • 暗号化やデータ保持ポリシーなど、オプションの詳細設定を構成します。

  6. Cloud Storage バケットでオブジェクトのバージョニングが有効になっていることを確認します。

  7. バケット設定を保存してデプロイ パッケージの構成を続けるには、[構成] をクリックします。

  8. [必要なロール] で、プロダクトのデプロイに顧客が必要な IAM ロールを指定します。

(UI のデプロイのみ)カスタム Terraform モジュールのメタデータを作成する

カスタム モジュールが UI のデプロイをサポートするには、Cloud Marketplace がモジュールを正しく解析して顧客の UI にレンダリングするために使用するメタデータを作成して追加する必要があります。

このメタデータを作成して追加するために、オープンソースの CFT CLI ツールを使用できます。CFT を使用してカスタム モジュールにメタデータを作成して追加するには、次の手順を行います。

  1. CFT CLI ツールをインストールします。詳細については、CFT CLI のドキュメントをご覧ください。VERSION の値を latest になるように指定し、PLATFORM を次のいずれかの値に設定することをおすすめします。

    • linux

    • windows

    • darwin

  2. 次のコマンドを実行します。

     cft blueprint metadata -p TF_PACKAGE_PATH -q -d --nested=false
    

    前のコマンドでは、-p フラグは Terraform パッケージのパスを指定し、-q フラグはリモート リポジトリの情報を必要としないメタデータを生成し、-d フラグは metadata.display.yaml ファイルを生成し、--nested=false フラグはルート モジュールのメタデータを生成し、modules/ フォルダ内のモジュールをスキップします。

前の手順を完了すると、CFT CLI ツールによって metadata.yamlmetadata.display.yaml の 2 つの新しいファイルが生成されます。

カスタム Terraform モジュールのメタデータをカスタマイズする

Cloud Marketplace は、ファイル metadata.display.yaml を使用して、お客様が UI を介してプロダクトをデプロイするために使用するフォームをカスタマイズします。このフォームをカスタマイズする場合は、メタデータの作成後に、metadata.display.yaml のフィールドの値を変更できます。使用可能なカスタマイズ オプションの詳細については、オープンソースの BlueprintUI のドキュメントまたは BlueprintUI スキーマをご覧ください。

メタデータの変更には拡張機能の GooglePropertyExtensions を使用することをおすすめします。GooglePropertyExtensions では、プロジェクトにすでに存在する Virtual Private Cloud(VPC)ネットワークのみを顧客が選択できるように適用するなど、Google Cloud 固有の検証を使用できます。例については、カスタム Terraform モジュールのサンプルをご覧ください。

カスタム モジュールのメタデータを検証する

カスタム モジュールのメタデータを検証するには、次のコマンドを実行します。

cft blueprint metadata -p TF_PACKAGE_PATH -v

前のコマンドでは、-p フラグが Terraform パッケージのパスを指定し、-v フラグが、BlueprintMetadata スキーマに基づいて、指定されたパスの下のすべてのメタデータ ファイルを検証します。

モジュールが検証に合格することをテストする

次のコマンドが正常に実行されると、カスタム モジュールが検証に合格します。

terraform plan -var project_id=YOUR_PROJECT -var-file marketplace_test.tfvars

前のコマンドで、marketplace_test.tfvars は、このモジュールの検証のためだけに、Cloud Marketplace が使用する Terraform 変数のファイルです。テンプレートでデフォルト値のない変数が宣言されていて、その変数の値を設定していない場合、コマンドは正常に実行されません。コマンドが正常に実行されるようにするには、テンプレートで宣言する変数の値を設定する marketplace_test.tfvars ファイルを作成します。marketplace_test.tfvars ファイルの例については、カスタム Terraform モジュールのサンプルをご覧ください。

(省略可)(CLI のデプロイのみ)テスト モジュールを含める

カスタム モジュールが CLI デプロイをサポートしている場合は、必要に応じて examples/marketplace_test という名前のフォルダを含めることができます。プロダクトの機能を検証するために個別のテスト モジュールを含める必要がある場合、これを行なってみてください。このフォルダを含めると、モジュールが検証に合格するために、次のコマンドが正常に実行される必要があります。

terraform -chdir=examples/marketplace_test plan -var project_id=YOUR_PROJECT

デプロイ パッケージを審査のために送信する

デプロイ パッケージを作成して構成した後、Cloud Marketplace チームがパッケージを審査して承認できるように、パッケージを Producer Portal に送信する必要があります。

  1. Producer Portal で [デプロイ パッケージ] セクションに移動します。

  2. [検証] をクリックします。検証プロセスには最大 2 時間かかります。完了後に画面を閉じることもできます。

  3. 検証が正常に完了したら、審査用にデプロイ パッケージを送信するために、[送信] をクリックします。デプロイ パッケージを送信してから Google がパッケージを審査し、承認するまでには最大で 2 週間かかります。