リソースをプロビジョニングします

TerraformまたはTerragruntを使用して、リソースをプロビジョニングできます。Terraformを使用する場合は、各ディレクトリで規定の順序で構成を適用する必要があります。Terragruntを使用すると、すべてのリソースを単一コマンドでプロビジョニングできます。

Terraform状態ファイルについて

Terraformには、管理インフラストラクチャ・リソースを追跡し、デプロイされたリソースを構成にマップし、メタデータを追跡し、大規模なインフラストラクチャ・デプロイメントのパフォーマンスを向上させるために、状態情報が格納されます。

デフォルトでは、terraform.tfstateファイルはローカル・ホストに格納されます。このデフォルトの動作は、複数のユーザーが特定の構成で定義されているリソースを作成および破棄する必要があるIT環境では最適ではありません。マルチ・ユーザー環境でのリソースのデプロイおよび管理を制御するには、Terraform状態ファイルをOracle Cloud Infrastructure Object Storageに格納し、すべてのユーザー間で状態ファイルおよびロック・ファイルを共有します。「Terraform状態ファイルのオブジェクト・ストアの使用」を参照してください

Terragruntを使用したリソースのプロビジョニング

単一のコマンドを使用して、トポロジ内のすべてのリソースをプロビジョニングする場合にTerragruntを使用できます。内部では、TerragruntはTerraformコマンドを呼び出し、構成に定義されているすべてのリソース間の依存関係を処理します。

  1. examples/full-deploymentディレクトリに移動します。
  2. 次のコマンドを実行して、Terraformモジュールを初期化します。
    make init
    このコマンドは、各ディレクトリでterraform initを実行して、構成内のすべてのTerraformモジュールを初期化します。
  3. 次のコマンドを実行して、リソースをプロビジョニングします。
    terragrunt apply-all
    Terragruntは、構成内のすべてのTerraformモジュールのterraform applyコマンドを定義済みのシーケンスで呼び出します。すべてのリソースがデプロイされます。

Terraformを使用したリソースのプロビジョニング

Terraformを使用してリソースをプロビジョニングする場合、規定の順序で各ディレクトリにTerraform構成を個別に適用する必要があります。

  1. examples/full-deploymentの下にある次の各サブディレクトリにexamples/full-deployment/terraform.tfvarsをコピーします。
    common/compartments
    common/configuration
    management/access
    management/network
    management/server_attachment
    management/servers
    peering/network
    peering/routing
    tenant/network
    tenant/servers

    examples/full-deploymentディレクトリに移動し、次のコマンドを入力して、必要なすべてのサブディレクトリにterraform.tfvarsをコピーします。読みやすくするために、コマンドは、各行の最後にバックスラッシュ(\)を使用して複数の行に表示されます。すべての行(バックスラッシュ文字を含む)をコピーし、単一のコマンドとして貼り付けます。

    xargs -n 1 cp -v terraform.tfvars<<<"common/compartments/ \
    common/configuration/ management/access/ management/network/ \
    management/server_attachment/ management/servers/ peering/network/ \
    peering/routing/ tenant/network/ tenant/servers/"
  2. examples/full-deployment/common/configurationディレクトリに移動します。
  3. 次のコマンドを実行します。
    1. 構成を初期化します。
      terraform init
    2. 構成内に定義されているリソースを確認します。
      terraform plan
    3. 構成を適用します。
      terraform apply
    common/configurationディレクトリ内の構成は、テナントvcnの数と必要なピアリングvcnの数、各VCNのCIDRサイズ、およびテナントvcnとピアリングvcnの間のマッピングを計算します。この構成を適用すると、リソースは作成されません。この計算の結果は、Vcnおよび他のネットワーク・リソースが作成されたときに使用されます。
  4. examples/full-deploymentの下にある次のディレクトリで、terraform initterraform planおよびterraform applyの各コマンドを規定の実行順序で実行します。
    common/compartments
    peering/network
    management/network
    tenant/network
    management/access
    peering/routing
    management/servers
    management/server_attachment
    tenant/servers

    規定の順序ですべての構成ディレクトリにterraform applyを実行すると、トポロジは完全にデプロイされます。

トポロジの変更

トポロジを変更するには、適切なTerraform構成でリソース定義を更新してから、改訂した構成を適用する必要があります。変更する必要があるリソース定義を特定するには、サンプル・コード、特に各ディレクトリで参照されるTerraformモジュールおよびモジュール間の依存性を十分に理解する必要があります。

トポロジの変更手順は、このソリューションの範囲外です。

すべてのリソースの削除

TerraformまたはTerragruntを使用して、デプロイされているすべてのリソースを簡単に削除できます。

  1. examples/full-deploymentディレクトリに移動します。
  2. 次のいずれかを行います。
    • Terragruntがインストールされている場合は、次のコマンドを実行します。

      terragrunt destroy-all

      Terragruntは、構成内のリソースのterraform destroyコマンドを定義済みのシーケンスで呼び出します。

      terragrunt destroy-allを使用して失敗したデプロイメントまたはその一部をクリーンアップしようとすると、次のエラーが発生する場合があります。

      Error: Unsupported attribute
        on management_rte_attachment.tf line 8, in module "management_rte_attachement":
         8:     data.terraform_remote_state.peering_servers.outputs.routing_instance_1_ip_id,
          |----------------
          | data.terraform_remote_state.peering_servers.outputs is object with 3 attributes
      This object does not have an attribute named "routing_instance_1_ip_id".

      このエラーが発生した場合は、次に説明するように、各構成ディレクトリでterraform destroyを実行してリソースを削除します。

    • Terraform CLIを使用してリソースを削除するには、次の順序でexamples/full-deploymentの下の各構成ディレクトリでterraform destroyを実行します。

      注意:

      コマンドの実行が各ディレクトリで終了するまで待機してから、次のディレクトリに進みます。
      tenant/servers
      management/server_attachment
      management/servers
      peering/routing
      management/access
      tenant/network
      management/network
      peering/network
      common/compartments
      common/configuration