この記事では、Terraform を使用してデプロイ用の VM イメージの構成を完了し、送信する方法について説明します。
デプロイ パッケージの作成方法を決定する
Producer Portal のガイド付き構成オプションを使用して、 Google Cloud コンソールで直接デプロイ パッケージを作成することをおすすめします。
ガイド付き構成オプションでは、基本的なファイアウォール ルールを使用した単一 VM デプロイなどの簡単な VM プロダクトがサポートされますが、複数の VM や非コンピューティング リソースドを使用したデプロイなど、複雑な機能はサポートされません。ガイド付き構成でサポートされていない機能が必要な場合は、手動構成オプションを使用して、デプロイ パッケージを作成するか、既存のパッケージに新しい機能を追加してカスタマイズします。
ガイド付き構成と手動構成を切り替える
Producer Portal のガイド付き構成オプションを使用していて、後でデプロイ パッケージを手動構成に切り替える場合は、[手動構成に移動] をクリックします。
ガイド付き構成を行う
Google Cloud コンソールを使用してシンプルなデプロイ パッケージの構成を完了し、送信するには、次の手順を実施します。
Producer Portal で [デプロイ パッケージ] セクションに移動します。
[Terraform 構成] で、[Cloud Storage バケット] というラベルの付いた入力フィールドの横にある [参照] をクリックします。
Cloud Storage バケットをすでに作成している場合は、ここで選択します。
Cloud Storage バケットがない場合は、[新しいバケットを作成] というラベルのアイコンをクリックします。新しいバケットを作成するときは、次の操作を行います。
バケットの名前を選択します。
バケットでデータの保存先リージョンを指定します。
データのストレージ クラスを指定します。
バケットのデータに対する Identity and Access Management(IAM)権限に適用する粒度を決定します。
暗号化やデータ保持ポリシーなど、オプションの詳細設定を構成します。
Cloud Storage バケットでオブジェクトのバージョニングを有効にしていることを確認します。
バケット設定を保存してデプロイ パッケージの構成を続けるには、[構成] をクリックします。
[マシンタイプの選択] で、VM プロダクトのデフォルト ゾーン、最小マシンタイプ、デフォルトのマシンタイプ、およびブートディスクのサイズとタイプを指定する必要があります。
[オペレーティング システムの指定] で、VM イメージが使用する OS の名前とバージョン、および VM イメージのバージョン番号を指定する必要があります。
(省略可能)[VM アクセスの設定] で、ユーザーがデプロイ後の VM へのアクセスに使用できるようにするために、サイトと管理者 URL、およびユーザー名とパスワードを指定できます。
(省略可能)[ネットワークの構成] で IP 転送の設定を指定し、ファイアウォール ルールを構成します。
(省略可能)[次のステップの定義] で、プロダクトのユーザーにプロダクトの使用を開始するための手順を提供できます。これらの手順は、プロダクトをデプロイした後に表示されます。
前の手順を完了したら、[生成] をクリックしてデプロイ パッケージを作成します。
後からさらにデプロイ パッケージに変更を加える必要がある場合は、[編集] をクリックして変更を行い、[生成] をクリックして、これらの変更が適用されたデプロイ パッケージを再生成します。
Producer Portal でデプロイ パッケージを検証します。
Cloud Marketplace でデプロイ パッケージの検証が正常に完了したら、[公開] をクリックしてデプロイ パッケージのテストを開始します。
手動構成を行う
このセクションでは、手動構成オプションを使用してデプロイ パッケージを作成し、パッケージを送信して審査を受ける方法について説明します。
Terraform モジュールのデフォルトとカスタムのどちらを使用するかを指定する
顧客がプロダクトをデプロイするときに、Terraform モジュールのデフォルトまたはカスタムのどちらを使用してもらうかを選択できます。
デフォルトの Terraform モジュールを使用する場合は、 Google Cloud プロダクトのデプロイに使用できる自動生成された Terraform コードを顧客に提供します。
カスタム Terraform モジュールを使用する場合は、顧客に独自の Terraform テンプレートを提供する必要があります。これらのテンプレートは、コマンドライン インターフェース(CLI)を使用することによって顧客がデプロイできる形式で提供すること、またはCloud Marketplace から直接モジュールを顧客がデプロイできる追加のメタデータを使用して提供することができます。
デフォルトかカスタムの Terraform モジュールのどちらを使用するか指定するには、そして、カスタム Terraform モジュールの場合は、モジュールをどのように顧客がデプロイするかを指定するには、次の手順を行います。
Producer Portal で [デプロイ パッケージ] セクションに移動します。
Terraform の構成のタイプで、デフォルト、カスタム(CLI デプロイ)、またはカスタム(UI のデプロイ)を選択します。
カスタム Terraform モジュールの要件
カスタム Terraform モジュールを使用する場合は、カスタム モジュールが次の要件を満たしている必要があります。
カスタム モジュールには、Cloud Marketplace が要件を満たしていることを確認するために使用できるモジュールが必要です。詳細については、モジュールが検証に合格することをテストするをご覧ください。
モジュールには、
project_idという変数が必要です。この変数には、顧客がモジュールをデプロイするために使用するプロジェクト ID が格納されます。イメージの名前への参照は、
projects/PROJECT_NAME/global/images/IMAGE_NAME形式の Terraform 変数として指定する必要があります。defaultの値は、VM プロダクトが公開されたときに、Cloud Marketplace が所有するイメージのコピーをモジュールに置き換えられるように、VM イメージの名前に設定する必要があります。モジュールは、パッケージ化されていない外部モジュールに依存しないようにします。
モジュールでは、以下の承認済みプロバイダのみを使用する必要があります。
archivecloud-initdnsgooglegoogle-betahttpnullrandomtimetls
これらの要件を満たすカスタム モジュールの例については、カスタム 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 アーキテクチャをサポートするイメージが含まれている場合は、
enumValueLabelsを追加して、ユーザーが使用する VM イメージを選択できるようにする必要があります。例については、カスタム Terraform モジュールのサンプルをご覧ください。モジュールは、Terraform のプロビジョナーのサポートに依存しないようにします。
カスタム Terraform モジュールの追加手順
カスタム Terraform モジュールを使用する場合は、デプロイ用に VM イメージを構成するために、次の追加手順を完了する必要があります。
Producer Portal で [デプロイ パッケージ] セクションに移動します。
[Terraform 構成] の [イメージ変数] で、[変数を追加] をクリックします。
プロダクトの Terraform デプロイを有効にするには、Marketplace 所有のイメージの使用を有効にしている必要があります。Cloud Marketplace では、ここで追加した変数を使用して、顧客がプロダクトをデプロイするときに Marketplace が所有するバージョンの VM イメージにスワップします。
[イメージ変数] テキスト フィールドに、変数の名前(「image」など)を入力します。
カスタム Terraform モジュールで、前の手順で作成した変数のデフォルト値を、プロダクトの VM イメージの名前(
projects/YOUR_PROJECT/global/images/YOUR_IMAGE形式)に設定します。[GCS オブジェクト ロケーションを指定する] で、[参照] をクリックします。
Cloud Storage バケットをすでに作成している場合は、ここで選択します。
Cloud Storage バケットがない場合は、[新しいバケットを作成] というラベルのアイコンをクリックします。新しいバケットを作成するときは、次の操作を行います。
バケットの名前を選択します。
バケットでデータの保存先リージョンを指定します。
データのストレージ クラスを指定します。
バケットのデータに対する Identity and Access Management(IAM)権限に適用する粒度を決定します。
暗号化やデータ保持ポリシーなど、オプションの詳細設定を構成します。
Cloud Storage バケットでオブジェクトのバージョニングが有効になっていることを確認します。
バケット設定を保存してデプロイ パッケージの構成を続けるには、[構成] をクリックします。
[必要なロール] で、プロダクトのデプロイに顧客が必要な IAM ロールを指定します。
(UI デプロイのみ)カスタム Terraform モジュールのメタデータを作成する
カスタム モジュールが UI のデプロイをサポートするには、Cloud Marketplace がモジュールを正しく解析して顧客の UI にレンダリングするために使用するメタデータを作成して追加する必要があります。
このメタデータを作成して追加するために、オープンソースの CFT CLI ツールを使用できます。CFT を使用してカスタム モジュールにメタデータを作成して追加するには、次の手順を行います。
CFT CLI ツールをインストールします。詳細については、CFT CLI のドキュメントをご覧ください。
VERSIONの値をlatestになるように指定し、PLATFORMを次のいずれかの値に設定することをおすすめします。linuxwindowsdarwin
次のコマンドを実行します。
cft blueprint metadata -p TF_PACKAGE_PATH -q -d --nested=false前のコマンドでは、
-pフラグは Terraform パッケージのパスを指定し、-qフラグはリモート リポジトリの情報を必要としないメタデータを生成し、-dフラグはmetadata.display.yamlファイルを生成し、--nested=falseフラグはルート モジュールのメタデータを生成し、modules/フォルダ内のモジュールをスキップします。
上記の手順を完了すると、CFT CLI ツールによって metadata.yaml と metadata.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 で [デプロイ パッケージ] セクションに移動します。
[検証] をクリックします。検証プロセスには最大 2 時間かかります。実行後に画面を閉じることもできます。
検証が正常に完了したら、[デプロイのプレビュー] をクリックしてデプロイをテストします。
次のステップ
デプロイの検証とテストが完了したら、[公開] をクリックして、プロダクト全体を送信し、Cloud Marketplace で審査と公開を行います。詳しくは、商品を送信するをご覧ください。