スタックに関するガイドライン

Oracleでは、Terraformテンプレートを構築するための一般的なTerraformベスト・プラクティスを採用することをお薦めします。ただし、スタックを公開するために従うべき特定のマーケットプレイス・スタック標準があります。

必須ガイドライン

Oracle Cloud Infrastructure Marketplaceにリストされているスタックの必須ガイドラインを次に示します。各ガイドラインに従う必要があります。公開する前に、各スタック・アーティファクトがこれらのガイドラインのそれぞれに対して検証されます。

  1. スタック・アーティファクトは、Terraform構成ファイルおよびスキーマ・ファイルを含むzipファイルである必要があります。
    • Zipでは、ルート・フォルダに少なくとも1つの構成ファイル(.tf)を含める必要があります。
    • Zipでは、スキーマ・ファイル(.yaml)をルート・フォルダに含める必要があります。
    • Zipでは、Terraform状態ファイルをzipファイルに含めることはできません。状態ファイルは、Oracle Resource Manager (ORM)によって管理されます。顧客がスタックを起動すると、ORMはリソースを作成および管理し、状態ファイルはダウンロードのみに使用可能になります。
    • ZipにTerraformランタイム構成フォルダ(.terraform).を含めることはできません
  2. Terraform構成では、承認済または公開済(パブリックまたはプライベート)マーケットプレイス・イメージのインスタンス・イメージのみを使用する必要があります。これらの各イメージのMarketplaceサブスクリプションが必要です。これらのマーケットプレイス・イメージへのハードコードされた参照が必要です。詳細は、マーケットプレイス・イメージ・サブスクリプションおよび使用状況のサンプルTerraform構成を参照してください。
  3. バイナリは外部リポジトリからダウンロードできません。すべてのバイナリと依存関係は、公開されているマーケットプレイス・イメージにベイク処理する必要があります。
  4. Terraformリモートexecプロビジョナは、Oracle Cloud Infrastructureドメイン内でのみ実行する必要があります。リモート・サーバー上のファイルをダウンロードしないでください。
  5. サード・パーティのコードまたはバイナリは、cloud-init.を使用してダウンロードしないでください
    1. cloud-initは、クラウド・コンピュート・インスタンスで一般的に使用される起動構成ユーティリティです。oci_core_instanceリソースのメタデータ定義の一部として指定されたユーザー・データ・メカニズムを介して構成を受け入れます。
    2. cloud-init.でサポートされる複数のユーザー・データ形式があります。https://cloudinit.readthedocs.io/en/latest/topics/format.htmlを参照してください。
    3. ユーザー・データ形式にかかわらず、cloud-initはサードパーティ・コードまたはバイナリのダウンロードには使用しないでください。インスタンスの起動プロセス(ブートストラップ)中に必要なすべてのバイナリ(イメージ内で使用できない場合)は、イメージ配布の一部としてベイク処理されたプロセス(スクリプト)によってダウンロードする必要があり、cloud-initを介して注入されることはありません(たとえば、wget).を利用します)。
    4. ただし、ライセンス・キー・ファイルのインポートや構成ファイルのインポートなど、特定のシナリオで顧客が使用できるようにcloud-initテンプレートが設定されている場合があります。その場合は、Terraformテンプレート・コードに変数を指定して、顧客がcloud-initビルディング・ブロックにデータを入力できるようにする必要があります。たとえば、Terraform template_fileデータ・ソースを利用します。
  6. Terraformプロバイダは、Oracle Cloud Infrastructureである必要があります。他のクラウド・プロバイダやサードパーティ・アプリケーション・プロバイダはサポートされていません。
  7. Terraformモジュールを使用する場合は、ローカル相対パスからロードする必要があります。リモート・リポジトリからロードできません。
  8. Terraform構成では、インスタンス・プリンシパル認証を使用する必要があります。
  9. スタックをテストした、サポートされているTerraformバージョンの最小値と最大値を指定する必要があります。

    • ~> <major_version>.<minor_version>.<patch_version>の形式で、必要な最小のTerraformバージョンを指定します。

      ここで、patch_versionは常に0に設定されます。スタックが起動されると、Resource Managerはコードで定義した<major_version>.<minor_version>をチェックし、使用可能な最新のパッチ・バージョンを使用します。そのため、最低限必要なTerraformバージョンを指定する際に、=>記号のかわりに~>記号を使用する必要があります。

      たとえば、~> 0.14.0は、サポートされているTerraformバージョンが0.14.0以降であることを示します。

    • < <major_version>.<minor_version>の形式で、必要な最大Terraformバージョンを指定します。

      たとえば、< 0.15は、サポートされているTerraformバージョンが0.15より前であることを示します。

    次の例は、Terraform 0.14でのみスタックをテストした場合に、サポートされる最小および最大Terraformバージョンを指定する方法を示しています。

    terraform 
    { required_version = "~> 0.14.0, < 0.15" }

Oracle Cloud Infrastructureプロバイダ、インスタンス・プリンシパル認証、リモートexecプロビジョナなど、Terraformの詳細は、プロバイダ構成のTerraformドキュメントを参照してください。サポートされているバージョンのTerraformの詳細は、Oracle Cloud InfrastructureドキュメントTerraform Providerのスタート・ガイドを参照してください。

Terraform構成のコーディング・ガイドライン

Oracle Cloud Infrastructure Marketplaceにリストされているスタックには、次のガイドラインをお薦めします。各ガイドラインは、可能な場合は従うべきベストプラクティスと見なされます。

  • スタック・アーティファクトを使用すると、すべてのインフラストラクチャ・リソースを作成したり、既存のリソース(ネットワーク、ストレージなど)を指すことができます。
  • 命名規則および書式設定に従う必要があります。
    • 大/小文字- すべてのネーミングにlower_snake_caseを使用します。これは、変数名、リソース名、モジュール名、ファイル名、表示名などに適用されます。
    • リソース・タイプの指定- 名前にリソースまたはデータ・ソース・タイプを含めないでください。Terraformでは、リソースおよびデータ・ソースは常に<type>.<name>.によって参照されますそのため、名前自体に型を含める必要はありません。
    • IDとOCID - Oracle Cloud Infrastructureでは、idは通常、OCIDを取得するフィールドを参照します。そのため、変数では、ocidを使用するかわりに、OCID値を参照するときにidを使用する必要があります。
    • 変数名- Oracle Cloud Infrastructureリソースの変数名には、通常、Terraformリソースに使用される名前と同じ名前を使用する必要があります。
    • 表示名- Oracle Cloud Infrastructureリソースの表示名は、通常、Terraformリソースに使用するのと同じ名前を使用する必要があります。
    • モジュールの変数および出力のネーミング- モジュールを使用する場合、入力(変数)および出力のネーミングを呼出し側に公開する必要があります。
    • チェックインする前に、terraform fmtをすべてのTerraformに適用する必要があります。