Terraformモジュールの構成

Oracle CloudでのシングルテナントSaaSアプリケーションのホストに必要なネットワークリソースは、Terraformモジュールで定義されます。モジュールをダウンロードし、必要な変数を設定します。

Terraformコードのダウンロード

このソリューションのTerraformコードは、GitHubで入手できます。

  1. 左側にあるナビゲーション・ペインで、「コードのダウンロード」をクリックします。
  2. Gitリポジトリ」をクリックします。
  3. リポジトリをローカル・コンピュータにクローンまたはダウンロードします。

Terraformコードについて

このソリューションのTerraformコードは複数のモジュールに編成されており、それぞれターゲット・トポロジの特定コンポーネントのリソースが含まれます。

Terraformコードには、最上位に次のディレクトリとファイルが含まれています。
  • chef:このディレクトリには、ルーティング・ゲートウェイをインストールおよび構成するためのChefレシピが含まれます。
  • examples:このディレクトリには、このソリューションの実装に必要なTerraformコードが格納されています。このディレクトリのコードでは、modulesディレクトリに定義されているモジュールを使用します。
  • LICENSE.txt:このファイルには、サンプル・コードのライセンス条件が記載されています。
  • modules:このディレクトリには、ソリューションの構築ブロックを提供するTerraformモジュールが含まれます。
  • README.md:このファイルには、コードの簡単な説明とそのコードを使用するための基本的な手順が記載されています。
  • test:このディレクトリには、デプロイメントの検証に使用できるテスト・スクリプトが含まれています。
examples/full-deploymentディレクトリには、このソリューションに必要なTerraformモジュールをコールするコードが含まれています。このファイルには、次のサブディレクトリおよびファイルが含まれます。
examples/full-deployment
├── common
│   ├── compartments
│   └── configuration
├── Makefile
├── management
│   ├── access
│   ├── network
│   ├── server_attachment
│   └── servers
├── peering
│   ├── network
│   └── routing
├── README.md
├── tenant
│   ├── network
│   └── servers
├── terraform.tfvars.sample
└── terragrunt.hcl
構成ディレクトリまたはファイル 構成で定義されたリソース
common/configuration ありません。

このディレクトリのコードは、examples/network_calculatorのTerraformモジュールを使用して、必要なテナントvcnおよびピアリングvcnの数、各VCNのCIDRサイズ、テナントvcnとピアリングvcnの間のマッピングを計算します。計算の結果は、Vcnおよび他のネットワーク・リソースが作成されたときに使用されます。

common/compartments
  • 管理コンパートメント。
  • ピアリングVcn用の1つ以上の区分。
  • 各テナントのコンパートメント。
management/access ISV VCN内のパブリック・サブネットにアタッチされたOracle Linuxコンピュート・インスタンス。このインスタンスは、トポロジのベース・サーバーです。
management/network
  • ISV VCN(管理VCNとも呼ばれる)。
  • NATおよびインターネット・ゲートウェイ(ISV VCN用)。
  • 次のサブネット:
    • 管理サーバーのプライベート管理サブネットです。
    • ベース・サーバーのパブリック・アクセス ・サブネット。
    • ルーティング・ゲートウェイ用のプライベート・ピアリング・サブネット
  • VCNのデフォルトのルート表で、インターネット・ゲートウェイを介してパブリック・インターネットにバインドされているトラフィックをルーティングするルールが設定されています。
  • NATゲートウェイを介してパブリック・インターネットにバインドされているトラフィックをルーティングするルールを持つピアリング・サブネットのルート表。
  • 次のルールを使用した、アクセス・サブネットのセキュリティ・リスト。
    • 任意のソースからのインバウンドICMPトラフィックを許可します。
    • 任意の宛先に対してアウトバウンドTCPトラフィックをバインドできます。
  • 次のルールを使用したピアリング・サブネットのセキュリティ・リスト。
    • 任意の宛先に対してアウトバウンドTCPトラフィックをバインドできます。
    • 任意のソースからのインバウンドICMPトラフィックを許可します。
    • ソースからポート5666へのインバウンドTCPトラフィックを許可します。
  • 管理サブネットのセキュリティ・リスト。次の規則があります。
    • アクセス・サブネットからのインバウンドICMPトラフィックを許可します。
    • アクセス・サブネットからポート80へのインバウンドHTTPトラフィックを許可します。
    • 任意の宛先に対してアウトバウンドTCPトラフィックをバインドできます。
management/server_attachment
  • 次のルールを使用して、管理サブネットにアタッチされたルート表。
    • NATゲートウェイを介してパブリック・インターネットにバインドされたトラフィックをルーティングします。
    • テナントVcnごとにバインドされるトラフィックを適切なルーティング・ゲートウェイ・インスタンスにルーティングします。
  • 次のルールを使用して、アクセス・サブネットにアタッチされたルート表。
    • インターネット・ゲートウェイを介してパブリック・インターネットにバインドされたトラフィックをルーティングします。
    • テナントVcnごとにバインドされるトラフィックを適切なルーティング・ゲートウェイ・インスタンスにルーティングします。
management/servers ISV VCNの管理サブネットに接続されているOracle Linuxコンピュート・インスタンス。

管理サーバーを使用して、Nagios Coreなどのインフラストラクチャ監視アプリケーションをインストールおよび実行できます。

peering/network
  • ルーティング・ゲートウェイをホストする計算インスタンスで構成される動的グループ。
  • この構成で定義された動的グループがコンパートメント内のVnicおよびプライベート・アドレスを使用できるようにするポリシー。
  • 各VCNにサブネットを持つ2つのピアリングvcn。
  • 各VCN用のローカル・ピアリング・ゲートウェイ(LPG )。
  • 各サブネットのセキュリティ・リスト。すべてのインバウンドICMPトラフィックとすべてのアウトバウンドTCPトラフィックを許可するルールを持ちます。
  • 各サブネットのルート表であり、各テナントVCNにバインドされたトラフィックを適切なピアリングVCNのLPGを通じてルーティングするルールがあります。
peering/routing
  • 2つのルーティング・ゲートウェイ:
    • 1つのゲートウェイは、高可用性を有効にするために、異なるフォルト・ドメインにある計算インスタンスのペアであり、パッケージ・メイクがインストールされます。各コンピュート・インスタンスには2つのセカンダリVnicがあり、最初のセカンダリVNICに浮動IPアドレスがアタッチされています。このゲートウェイは、ルーティング・ゲートウェイのHAフェイルオーバーのデモを目的としています。
    • 他のゲートウェイは単一のコンピュート・インスタンスです。
  • 次のルールを持つネットワーク・セキュリティ・グループ。
    • グループ内のすべてのTCPトラフィックをポート3121、2224および21064に許可します。
    • グループ内のすべてのUDPトラフィックをポート4505に許可します。
tenant/network 各テナントの次のリソース:
  • テナントVCN。
  • テナントVCN用のNATおよびインターネット・ゲートウェイ。
  • 1つのパブリックともう1つのプライベートという2つのサブネット。
  • VCNのLPGです。
  • 次のルールを使用した、パブリック・サブネットのルート表。
    • インターネット・ゲートウェイを介してパブリック・インターネットにバインドされたトラフィックをルーティングします。
    • LPGを介してピアリング・サブネットにバインドされるトラフィックをルーティングします。
    • LPGを介して管理サブネットにバインドされるルート・トラフィック。
  • 次のルールを使用した、プライベート・サブネットのルート表。
    • NATゲートウェイを介してパブリック・インターネットにバインドされたトラフィックをルーティングします。
    • LPGを介してピアリング・サブネットにバインドされるトラフィックをルーティングします。
    • LPGを介して管理サブネットにバインドされるルート・トラフィック。
  • 次のルールを使用した、パブリック・サブネットのセキュリティ・リスト。
    • 任意の宛先からのインバウンドICMPトラフィックを許可します。
    • 任意の宛先へのアウトバウンドTCPトラフィックを許可します。
  • 次のルールを使用した、プライベート・サブネットのセキュリティ・リスト。
    • 任意の宛先からのインバウンドICMPトラフィックを許可します。
    • 任意の宛先へのアウトバウンドTCPトラフィックを許可します。
    • インバウンドTCPトラフィックのポート5666への許可
tenant/servers 各テナント区分のOracle Linuxコンピュート・インスタンス。

このインスタンスを使用して、インフラストラクチャ・モニタリング・エージェントをインストールおよび実行できます。たとえば、ISV VCNで管理サーバーにNagiosコアをインストールする場合、各テナント区分のコンピュート・インスタンスにNagiosエージェントをインストールできます。エージェントは、コンパートメント内のサーバーをモニターして、Nagiosモニタリング・サーバーにメトリックを送信できます。

terraform.tfvars.sample Terraform変数ファイルのテンプレート。
terragrunt.hcl Terragrunt構成。

Terraform変数の設定

Oracle Cloud Infrastructureテナンシに接続するためにTerraformに必要なパラメータ、コンピュート・インスタンスのSSHキーおよびルーティング・クラスタのパスワードを指定します。

  1. examples/full-deployment/terraform.tfvars.sampleexamples/full-deployment/terraform.tfvarsにコピーします。
  2. プレーン・テキスト・エディタでexamples/full-deployment/terraform.tfvarsを開き、次のように変数の値を設定します。
    可変 説明
    tenancy_ocid テナンシのOCID。

    テナンシのOCIDは、Oracle Cloud Infrastructure Webコンソールにあります。「サービス」メニューから「管理」を選択し、テナント詳細をクリックします。

    user_ocid TerraformでOracle Cloud Infrastructureによる認証に使用するユーザーのOCID。

    ユーザーのOCIDを検索するには、サービス・メニューから「アイデンティティ」を選択し、「ユーザー」を選択します。リストでユーザー名を特定し、そのOCIDをコピーします。

    fingerprint アップロードしたAPI署名キーのフィンガープリント。
    private_key_path プライベートAPI署名キーが格納されているファイルのフルパスと名前。
    region リソースを作成するリージョンのID。

    たとえば、米国東部(Ashburn)地域のIDはus-ashburn-1です。

    リージョンおよび可用性ドメイン」を参照してください。

    compartment_ocid リソースを作成するコンパートメントのOCID。

    指定するコンパートメントは、トポロジの親コンパートメントになります。

    区分のOCIDを検索するには、「サービス」メニューから「アイデンティティ」を選択し、「区分」を選択します。リストで必要なコンパートメントを探し、そのOCIDをコピーします。

    bastion_ssh_public_key_file ベース・サーバーのSSH公開キーを含むファイルのフルパスと名前。
    bastion_ssh_private_key_file ベース・サーバーのSSH秘密キーを含むファイルのフルパスと名前。
    remote_ssh_public_key_file トポロジ内のプライベート計算インスタンスに対するSSH公開キーを含むファイルのフルパスと名前。
    remote_ssh_private_key_file トポロジ内のプライベート計算インスタンスに対するSSH秘密キーを含むファイルのフルパスと名前。

    terraform.tfvarsを保存して閉じます。

    完了したterraform.tfvarsファイルの例を次に示します。

    tenancy_ocid = "ocid1.tenancy.oc1..aaaaaaaa2 (truncated)"
    user_ocid = "ocid1.user.oc1..aaaaaaaag (truncated)"
    fingerprint = "56:f6:8e:bf: (truncated)"
    private_key_path = "/home/joe/.oci/oci_api_key.pem"
    region = "us-ashburn-1"
    
    compartment_ocid = "ocid1.compartment.oc1..aaaaaaaam (truncated)"
    
    bastion_ssh_public_key_file = "/home/joe/.ssh/ida_rsa_bastion.pub"
    bastion_ssh_private_key_file = "/home/joe/.ssh/ida_rsa_bastion"
    remote_ssh_public_key_file = "/home/joe/.ssh/ida_rsa_remote.pub"
    remote_ssh_private_key_file = "/home/joe/.ssh/ida_rsa_remote"
  3. ルーティング・クラスタの共有シークレットを環境変数に設定します。
    export TF_VAR_hacluster_password="somePassword"

    パスワードは8文字以上である必要があります。少なくとも大文字、小文字1文字、数字および特殊文字(英数字以外)を含める必要があります。