Terraformモジュールの構成

このソリューションに必要なリソースは、Terraformモジュールに定義されています。

始める前に

Terraformモジュールの構成を開始する前に、次の手順を完了します。

  1. Terraformの基本を説明します。

    少なくとも、Terrraformのドキュメントの概要を参照してください

  2. 次の情報を準備しておきます。
    • テナンシのOCID。

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

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

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

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

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

    • リソースを作成するリージョンのID。

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

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

  3. 次を決定します。
    • ベースおよび管理ホストに使用するイメージのOCIDs。
      BastionホストのTerraform構成で定義されているデフォルトのイメージは、Oracle Autonomous Linuxイメージです。異なるイメージを使用する場合は、必要なイメージのOCIDを識別します。
      • カスタム・イメージのOCIDを見つけるには、Oracle Cloud Infrastructure Webコンソールにサインインし、サービス・メニューから「計算」を選択し、「カスタム・イメージ」を選択します。
      • Oracle提供のイメージのOCIDを検出するには、次のステップを実行します。
        1. Oracle Cloudイメージに移動します。
        2. 左側のナビゲーション・ペインで、イメージ・ファミリを選択します(Oracle Linux 7 .xなど)。
        3. 表示されたページで、使用するイメージ・バージョンまでスクロールして、クリックします(例: Oracle- Linux -7.7-2019.09.25 -0 )。
        4. 表示されたページで、「Image OCIDs」セクションまでスクロールします。
        5. 基礎ホストを作成するリージョンに対応するOCIDをコピーします。

          イメージOCIDには、イメージを使用できるリージョンのIDが含まれています。たとえば、Germany Central (Frankfurt)リージョンのイメージのOCIDsの形式は、ocid1.image.oc1.eu-frankfurt-1.aaaaaaaaxxx…という形式です。リソースを作成するリージョンのイメージのOCIDをコピーしてください。

    • ベースおよび管理ホストのタイムゾーン。

      Unix系システムでは、timedatectl list-timezonesコマンドを実行すると、タイムゾーンのリストを取得できます。

    • ベース・ホスト、管理ホストおよびKubernetes就業者ノードに使用されるコンピュート・シェイプ。

      図形の計算」を参照してください。

  4. Oracle Cloud InfrastructureでKubernetesクラスタを作成するための前提条件を満たします。Container Engine for Kubernetesの準備を参照してください。
  5. (オプション) Oracle Cloud Infrastructure Registryのプライベート・リポジトリからコンテナ化されたアプリケーションのイメージを取得する場合、このステップは必須です。
    1. Oracle Cloud Infrastructure Registryからイメージを取得するのに使用する必要があるユーザー名の認証トークンを生成します。「認証トークンの取得」を参照してください。
    2. Oracle Cloud Infrastructure Vaultにシークレットとして生成した認証トークンを格納します。詳細は、「シークレットの管理」を参照してください。

Terraformコードのダウンロード

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

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

Terraformコードについて

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

Terraform構成ファイルにクラウド・リソースをコーディングすることで、トポロジを迅速にプロビジョニングし、リソースを効率的に管理できます。

Terraformコードには、最上位に次のディレクトリとファイルが含まれています。
  • docsディレクトリおよび*.adoc:コードのドキュメント。必要な情報および指示はすべて、ここで読んだドキュメントに含まれています。コードに含まれているドキュメントを参照する必要はありません。
  • *.tf:ソリューションで使用されるTerraform構成ファイル。これらのファイルは編集しないでください。
  • terraform.tfvars.example: Terraform変数ファイルの作成に使用するテンプレート。テンプレートの編集または削除は行わないでください。terraform.tfvarsにコピーします。
  • modules:このソリューションを使用して作成するリソースのコアTerraform構成が含まれるディレクトリ。編集しないでください。
  • .githubディレクトリおよび.gitignore:内部Github構成ファイル。編集しないでください。

Terraform変数の設定

TerraformがOracle Cloud Infrastructureテナンシに接続するために必要なパラメータを指定します。また、ネットワーキング・パラメータ、ベース・ホストおよび管理ホストの属性、およびKubernetes設定も指定します。

  1. ダウンロードまたはクローニングしたコードの最上位ディレクトリに、次のコードが含まれるprovider.tfという名前のプレーン・テキスト・ファイルを作成します。
    provider "oci" {
      tenancy_ocid         = var.tenancy_id
      user_ocid            = var.user_id
      fingerprint          = var.api_fingerprint
      private_key_path     = var.api_private_key_path
      region               = var.region
      disable_auto_retries = var.disable_auto_retries
    }
  2. ダウンロードまたはクローニングしたコードの最上位ディレクトリでterraform.tfvars.exampleファイルを検索し、terraform.tfvarsにコピーします。

    注意:

    複数のテナンシのリソースを管理するには、テナンシごとに個別のterraform.tfvarsファイルを保持します。
  3. 前述の前提条件が完了していることを確認してください。「始める前に」を参照してください。
  4. プレーン・テキスト・エディタでterraform.tfvarsを開き、次のように変数の値を設定します。
    可変 説明
    api_fingerprint (必須) アップロードしたAPI署名キーのフィンガープリント。
    api_private_key_path (必須) プライベートAPI署名キーが格納されているファイルのフルパスと名前。
    compartment_id (必須) リソースを作成するコンパートメントのOCID。
    tenancy_id (必須) テナンシのOCID。
    user_id (必須) TerraformでOracle Cloud Infrastructureによる認証に使用するユーザーのOCID。
    ssh_private_key_path ベース・ホストに指定する公開キーに対応する秘密SSHキーが含まれるファイルのフルパスと名前。

    この値は、ベース・ホストへのアクセスに使用できるsshコマンドを作成するために使用します。Terraform構成を適用すると、出力にsshコマンドが表示されます。Terraformは秘密キーの読取りやコピーを行いません。

    ssh_public_key_path ベース・ホストに指定する公開SSHキーが格納されているファイルのフルパスと名前。
    label_prefix 短い識別子。リソースの名前に接頭辞として使用します。

    名前を参照してリソースの目的または性質を識別するのに役立つ文字列を使用します。たとえば、Terraform構成を使用してテスト環境またはステージング環境を設定する場合は、接頭辞testまたはstagingを使用することを検討してください。

    region リソースを作成するリージョンのID。

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

    nat_gateway_enabled trueを指定すると、VCN用のNATゲートウェイを作成できます。

    NATゲートウェイは、パブリック・インターネット上のホストにアクセスする必要のあるプライベートなコンピュート・インスタンス(管理ホストまたはKubernetesワーカー・ノードなど)がある場合に必要です。

    newbitsおよびnetnum この構成を適用すると、Terraformによって、newbitsnetnumの値が引数としてTerraformファンクションcidrsubnet()に渡されます。この関数は、bastionホスト、管理ホスト、ロード・バランサ・ノードおよびKubernetes workerノードのサブネットのCIDR接頭辞を計算します。
    • newbitsは、サブネットのサイズを決定するために使用されます。VCNのネットマスクと、ベース・サブネットに必要なネットマスクとの相違点です。

      たとえば、/16 VCNにネットマスク/29を持つサブネットを作成するには、newbitsの値として13を指定します(29から16を指定)。

      newbits値を低くすると、より大きなアドレス空間を持つサブネットが発生します。

    • netnumは、サブネットの境界の決定に使用されます。newbitsでネットワークをマスクする場合、サブネットのゼロベースの索引です。

      前の例で続いて、newbits=13netnum=0を指定すると、cidrsubnet()ファンクションは、10.0.0.0/16 VCN内の最初の/29アドレス空間であるサブネットCIDR接頭辞10.0.0.0/29を戻します。

    デフォルトの値
    netnum = {
      admin   = 33
      bastion = 32
      int_lb  = 16
      pub_lb  = 17
      workers = 1
    }
    
    newbits = {
      admin   = 13
      bastion = 13
      lb      = 11
      workers = 2
    }
    これらの変数をデフォルト値のままにしてVCNのCIDR範囲として10.0.0.0/16を指定すると、Terraformファンクションcidrsubnet()でサブネットの次のCIDR接頭辞が計算されます。利用可能なアドレスはカッコ内に表示されます。最初の2つのアドレスとサブネット内の最後のアドレスは、ネットワーク・サービスによって予約されます。
    • バス・サブネット: 10.0.1.0/29 (使用可能なアドレス: 10.0.1.2から10.0.1.6。つまり、5ホスト)
    • 管理サブネット: 10.0.1.8/29( 10.0.1.10から10.0.1.14、5ホスト)
    • 内部ロード・バランサ・サブネット: 10.0.2.0/27( 10.0.2.2から10.0.2.30; 29ノード)
    • パブリック・ロード・バランサ・サブネット: 10.0.2.32/27( 10.0.2.34から10.0.2.62。29ノード)
    • Kubernetesワーカー・ノード・サブネット: 10.0.64.0/18(10.0.64.2から10.0.127.254; 16381ノード)

    デフォルト設定と異なるアドレスまたはサイズのサブネットが必要な場合は、newbitsおよびnetnumの適切な値を決定する必要があります。これを行うには、クラスレスIPアドレスに関する基本的な知識が必要です。cidrsubnet()関数については、Terraformのドキュメントも参照してください。

    ここで指定するCIDRブロックは、Kubernetesポッド(pods_cidr)に指定するCIDRブロックと重ならないようにしてください。

    service_gateway_enabled VCNのサービス・ゲートウェイを作成する場合は、trueを指定します。

    VCNのコンピュート・インスタンスがOracle Cloud Infrastructure Object Storageなどの他のOracleサービスにアクセスする必要がある場合、サービス・ゲートウェイが必要です。

    vcn_cidr VCNで選択するIPv4 CIDRブロック。

    デフォルトは10.0.0.0/16です。許容範囲は、/16から/30です。

    ここで指定するCIDRブロックは、Kubernetesサービス(services_cidr)に指定するCIDRブロックと重複しないようにしてください。

    vcn_dns_label VCNの内部DNS名の名前接頭辞。

    ここで指定する名前は、oraclevcn.comの接頭辞として、VCNのDNSドメイン名を構成します。たとえば、接頭辞としてokeを指定すると、VCNのDNSドメイン名はoke.oraclevcn.comになります

    vcn_name VCNリソースの名前。
    bastion_access ベースへのSSHアクセスを許可する必要があるIPアドレス(CIDR表記)の範囲。

    ホスト(つまり、0.0.0.0/0)からのSSHアクセスを許可するには、この変数をデフォルト値のANYWHEREのままにします。

    bastion_enabled ベース・ホストを作成する場合はtrueを指定します。
    bastion_image_id ベース・ホストの作成に使用されるイメージのOCID。

    この変数をデフォルト値のNONEのままにすると、Oracle Autonomous Linuxイメージが使用されます。

    bastion_notification_enabled Oracle Cloud Infrastructure Notificationサービスを使用すると、更新が適用されたとき、またはOracle Kspliceによって検出されたことがわかっているときに、bastionホストからステータス・メッセージを受信できます。
    ベース・ホストに対して通知の送信を有効にする場合はtrueを指定します。

    注意:

    このソリューションのTerraformコードでは、デフォルトのOracle Autonomous Linuxイメージを使用している場合のみ、bastionホストの通知を構成します。
    bastion_notification_endpoint 通知の送信先となる電子メール・アドレス。この変数は、bastion_notification_enabledtrueに設定した場合は必須です。
    bastion_notification_protocol この変数をEMAILに設定します。
    bastion_notification_topic 作成される通知トピックの名前。この変数は、bastion_notification_enabledtrueに設定した場合は必須です。
    bastion_package_upgrade ホストが初めて起動したときに、ベース・ホストのセキュリティ・パッケージをアップグレードする場合は、trueを指定します。

    この変数がtrueに設定されている場合、ベース・ホストがプロビジョニングされた後、セキュリティ・パッケージがアップグレードされる間その変数は短期間使用できないことに注意してください。ただし、このアップグレードを有効にすることで、回復ホストの脆弱性が最小限に抑えられます。

    bastion_shape ベース・ホストに使用するコンピュート・シェイプ。
    bastion_timezone IANAのタイムゾーン形式(America/Los_Angelesなど)で、bastionホストに対して構成するタイムゾーン。
    admin_enabled 管理ホストを作成する場合は、trueを指定します。
    admin_image_id ベース・ホストの作成に使用されるイメージのOCID。

    この変数をデフォルト値のNONEのままにすると、Oracle提供のLinuxイメージが使用されます。

    admin_instance_principal 管理ホストが指定したコンパートメント内のすべてのリソースを管理できるようにする場合は、trueを指定します。
    CLIコマンドを実行する場合、または管理ホストからAPIコールを作成してトポロジ内のリソースを管理する場合は、この機能を使用します。

    注意:

    SSHを使用してコンピュート・インスタンスに接続できるユーザーは、インスタンスに付与されているインスタンス権限を継承します。管理ホストをインスタンス・プリンシパルとして指定するかどうかを決定する際には、このことを考慮してください。この機能は、管理ホストに影響を及ぼすことなく、いつでもオフまたは有効にできます。

    この変数をtrueに設定した場合、管理ホストは動的グループのメンバーになり、動的グループがコンパートメント内のすべてのリソースを管理できるようにポリシー文が作成されます。

    admin_notification_enabled

    admin_notification_endpoint

    admin_notification_protocol

    admin_notification_topic

    これらの変数はデフォルト値のままにします。管理ホストでの通知の有効化は、現在このTerraformコードではサポートされていません。
    admin_package_upgrade ホストが初めて起動したときに管理ホストのセキュリティ・パッケージをアップグレードする場合は、trueを指定します。

    この変数がtrueに設定されている場合、管理ホストがプロビジョニングされた後、セキュリティ・パッケージがアップグレードされる間その変数は短期間使用できないことに注意してください。ただし、このアップグレードを有効にすることで、管理ホストの脆弱性を最小限に抑えることができます。

    admin_shape 管理ホストで使用するコンピュート・シェイプ。
    admin_timezone IANAタイムゾーン書式(America/Los_Angelesなど)で管理ホストに対して構成するタイムゾーン。
    availability_domains 管理ホストおよびベース・ホストをプロビジョニングする可用性ドメイン。

    たとえば、2番目の可用性ドメインでベース・ホストをプロビジョニングするには、bastion = 2を設定します。

    指定した領域に可用性のドメインが1つのみ含まれている場合は、この変数をデフォルト値の1のままにします。

    tagging 計算リソースおよびネットワーク・リソースに割り当てるタグを指定します。
    allow_node_port_access Kubernetesの就業者ノードがパブリック・モードでデプロイされたときにTCPトラフィックを許可する場合は、trueを指定します。
    allow_worker_ssh_access Kubernetesの就業者ノードへのSSH接続をベース・ホストを介して許可する場合は、trueを指定します。

    就業者ノードがパブリック・モードでデプロイされている場合でも、SSH接続はベース・ホストを経由する必要があります。

    この変数をtrueに設定した場合は、bastion_enabled = trueも設定する必要があります。

    cluster_name Kubernetesクラスタの名前。
    dashboard_enabled デフォルトのKubernetesダッシュボードを作成する場合、trueを指定します。
    kubernetes_version 就業者ノードに使用されるKubernetesのバージョン。

    この変数をデフォルト値のLATESTのままにすると、サポートされる最新のバージョンが選択されます。特定のバージョンを使用するには、そのバージョンを指定します。

    node_pools 作成されるノード・プールの数、各プールのサイズ、および就業者ノードに使用される計算図形は、次の形式で表示されます。
    node_pools = {
      "np1" = ["computeShape", numberOfNodes]
      "np2" = ["computeShape", numberOfNodes]
      "np3" = ["computeShape", numberOfNodes]
      ...
    }
    • np1np2およびnp3は、個々のノード・プールを表す任意の名前です。
    • computeShapeは、プール内の就業者ノードに使用されるコンピュート・シェイプです。
    • numberOfNodesは、プールで作成されるKubernetes就業者ノードの数です。下限値を指定しても、各プールでは最低3つのノードが作成されます。
    次の例は、それぞれが異なる計算形状を使用し、異なる数のKubernetesワーカー・ノードを含む2つのプールで構成されるクラスタの場合です。
    node_pools = {
      "np1" = ["VM.Standard2.1", 3]
      "np2" = ["VM.Standard2.2", 5]
    }
    node_pool_name_prefix ノード・プールの名前接頭辞。

    ノード・プール名は、label_prefixnode_pool_name_prefixおよびノード・プール番号の値を連結して生成されます。たとえば、label_prefix = "prod"node_pool_name_prefix = "np"を指定すると、ノード・プールで生成される名前は、prod-np-1prod-np-2prod-np-3などとなります。

    node_pool_image_id Kubernetesの就業者ノードに使用されるイメージのOCID。

    この変数をデフォルト値NONEのままにすると、node_pool_osおよびnode_pool_os_versionに指定した値と一致するイメージが使用されます。

    node_pool_os Kubernetesのワーカー・ノードに使用するオペレーティング・システム(例: "Oracle Linux")。

    この設定は、node_pool_image_id = "NONE"と設定した場合にのみ考慮されます。

    node_pool_os_version Kubernetesの就業者ノード(たとえば、"7.7")に使用するオペレーティング・システムのバージョン。

    この設定は、node_pool_image_id = "NONE"と設定した場合にのみ考慮されます。

    pods_cidr Kubernetesポッドに選択するIPv4 CIDRブロック。

    ここで指定するCIDRブロックは、VCN (vcn_cidr)に指定するCIDRブロックと重ならないようにしてください。

    services_cidr Kubernetesポッドに選択するIPv4 CIDRブロック。

    ここで指定するCIDRブロックは、VCN (vcn_cidr)に指定するCIDRブロックと重ならないようにしてください。

    worker_mode 就業者ノードがパブリック・インターネットからアクセス可能である必要がある場合は、publicを指定します。それ以外の場合は、この変数をprivateに設定します。

    worker_mode = "private"を設定する場合は、nat_gateway_enabled = trueを設定します。

    lb_subnet_typeおよびpreferred_lb_subnets lb_subnet_typeおよびpreferred_lb_subnetsに指定する値は、LoadBalancerタイプのKubernetesサービスを使用してデプロイするロード・バランサ・ノードで使用する必要のあるサブネットのタイプを決定します。

    パブリック・ロード・バランサには、パブリックIPアドレスがあります。内部ロード・バランサにはプライベートIPアドレスのみがあり、パブリック・インターネットからはアクセスできません。

    • パブリック・ロード・バランサを使用する場合は、preferred_lb_subnet = "public"およびsubnet_type"both"または"public"のいずれかに設定します。
    • 内部ロード・バランサを使用する場合は、preferred_lb_subnet = "internal"subnet_type"both"または"internal"のいずれかに設定します

      ロード・バランサ・サブネットを内部に設定した場合でも、内部ロード・バランサ・サービスの作成時に適切な注釈(service.beta.kubernetes.io/oci-load-balancer-internal: "true"など)を設定する必要があります。サブネットをプライベートに設定すれば十分ではありません。

      内部ロード・バランサの作成の詳細は、Oracle Cloud Infrastructureのドキュメントを参照してください。

    secret_id Oracle Cloud Infrastructure VaultサービスのシークレットのID。Oracle Cloud Infrastructure Registryからアプリケーション・イメージをプルするための認証トークンが格納されています。
    次の設定も行う必要があります。
    bastion_enabled = true
    admin_enabled = true
    admin_instance_principal = true
    email_address Dockerのシークレットを生成するときに使用する電子メール・アドレス。Eメール・アドレスは必須ですが、指定内容は重要ではありません。

    この変数は、secret_idを指定する場合は必須です。

    tenancy_name Kubernetesクラスタへのデプロイメントのためにイメージを取得する必要があるレジストリを含むテナンシのOracle Cloud Infrastructure Object Storageネームスペース。

    この変数は、secret_idを指定する場合は必須です。

    username secret_idに格納されている認証トークンを生成したユーザー名。

    この変数は、secret_idを指定する場合は必須です。

    install_helm Helmをインストールする場合は、trueを指定します。

    Helmは、Kubernetesのパッケージ・マネージャです。

    Helmをインストールするには、admin_instance_principal = trueも設定する必要があります。

    helm_version インストールするHelmクライアントのバージョン。

    Tiller (Helmのサーバー側の機能)は、自動的にアップグレードされます。

    install_calico Calicoをインストールする場合は、trueを指定します。

    Calicoを使用すると、Kubernetesクラスタにデプロイされたコンテナ・ワークロードにネットワーク・ポリシーを実装できます。

    install_calico = trueを設定した場合、次の設定も行う必要があります。
    bastion_enabled = true
    admin_enabled = true
    admin_instance_principal = true
    calico_version インストールされるCalicoのバージョン。
    install_metricserver Kubernetes Metrics Serverをインストールする場合は、trueを指定します。

    デフォルトでは、最新バージョンはkube-systemネームスペースにインストールされます。Kubernetes Metrics Serverは、クラスタ全体のリソース使用率データを集約します。

    install_metricserver = trueを設定した場合、次の設定も行う必要があります。
    bastion_enabled = true
    admin_enabled = true
    admin_instance_principal = true
    use_encryption Oracle Cloud Infrastructure Vaultサービスを使用してKubernetesシークレットを暗号化する場合は、この変数をtrueに設定します。
    use_encryption = trueを設定した場合、次の設定も行う必要があります。
    bastion_enabled = true
    admin_enabled = true
    admin_instance_principal = true
    existing_key_id Oracle Cloud Infrastructure Vaultサービスで作成された既存のキーのOCID。

    この変数は、use_encryptiontrueに設定した場合は必須です。

    create_service_account 外部のプロセスおよびツール(CI/CDパイプラインなど)からクラスタにアクセスする場合は、この変数をtrueに設定します。サービス・アカウントは、独自の認証トークンを使用して作成されます。
    create_service_account = trueを設定した場合、次の設定も行う必要があります。
    bastion_enabled = true
    admin_enabled = true
    admin_instance_principal = true
    service_account_name 作成するサービス・アカウントの名前。
    service_account_namespace アカウントを作成するKubernetesネームスペース。
    service_account_cluster_role_binding サービス・アカウントのクラスタ・ロール・バインディングの名前。

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

    # Identity and access parameters
    
    api_fingerprint = "d4:dc:...(truncated)"
    
    api_private_key_path = "/home/joe/.oci/oci_api_key.pem"
    
    compartment_id = "ocid1.compartment.oc1..aaaaaaaaxxx... (truncated)"
    
    tenancy_id = "ocid1.tenancy.oc1..aaaaaaaaxxx... (truncated)"
    
    user_id = "ocid1.user.oc1..aaaaaaaaxxx... (truncated)"
    
    ssh_private_key_path = "/home/joe/.ssh/id_rsa"
    
    ssh_public_key_path = "/home/joe/.ssh/id_rsa.pub"
    
    # general oci parameters
    label_prefix = "prod"
    
    region = "us-phoenix-1"
    
    # networking
    
    nat_gateway_enabled = true
    
    netnum = {
      admin   = 33
      bastion = 32
      int_lb  = 16
      pub_lb  = 17
      workers = 1
    }
    
    newbits = {
      admin   = 13
      bastion = 13
      lb      = 11
      workers = 2
    }
    
    service_gateway_enabled = true
    
    vcn_cidr = "10.0.0.0/16"
    
    vcn_dns_label = "oke"
    
    vcn_name = "oke vcn"
    
    # bastion
    
    bastion_access = "ANYWHERE"
    
    bastion_enabled = true
    
    bastion_image_id = "NONE"
    
    bastion_notification_enabled = true
    
    bastion_notification_endpoint = "joe@example.com"
    
    bastion_notification_protocol = "EMAIL"
    
    bastion_notification_topic = "bastion_server_notification"
    
    bastion_package_upgrade = true
    
    bastion_shape = "VM.Standard.E2.1"
    
    bastion_timezone = "America/Los_Angeles"
    
    admin_enabled = true
    
    admin_image_id = "NONE"
    
    admin_instance_principal = true
    
    admin_notification_enabled = false
    
    admin_notification_endpoint = "joe@example.com"
    
    admin_notification_protocol = "EMAIL"
    
    admin_notification_topic = "admin_server_notification"
    
    admin_package_upgrade = true
    
    admin_shape = "VM.Standard.E2.1"
    
    admin_timezone = "America/Los_Angeles"
    
    # availability_domains
    
    availability_domains = {
      bastion = 1
      admin   = 1
    }
    
    tagging = {
      computetag = {"Environment" = "dev" }
      networktag = { "Name" = "network" }
    }
    
    # oke
    
    allow_node_port_access = false
    
    allow_worker_ssh_access = false
    
    cluster_name = "oke"
    
    dashboard_enabled = true
    
    kubernetes_version = "LATEST"
    
    node_pools = {
      np1 = ["VM.Standard2.1", 3]
      #np2 = ["VM.Standard2.8", 4]
      #np3 = ["VM.Standard1.4", 5]
    }
    
    node_pool_name_prefix = "np"
    
    node_pool_image_id = "NONE"
    
    node_pool_os = "Oracle Linux"
    
    node_pool_os_version = "7.7"
    
    pods_cidr = "10.244.0.0/16"
    
    services_cidr = "10.96.0.0/16"
    
    worker_mode = "private"
    
    # oke load balancers
    
    lb_subnet_type = "public"
    
    preferred_lb_subnets = "public"
    
    # ocir
    
    secret_ocid = "ocid1.key.oc1..aaaaaaaaxxx... (truncated)"
    
    email_address = "joe@example.com"
    
    tenancy_name = "mytenancy"
    
    username = "joe_k8s_admin"
    
    # helm
    
    helm_version = "3.0.0"
    
    install_helm = false
    
    # calico
    
    calico_version = "3.9"
    
    install_calico = false
    
    # metrics server
    
    install_metricserver = false
    
    use_encryption = false
    
    existing_key_id = ""
    
    # service accountcreate_service_account = true
    service_account_name = "kubeconfigsa"
    service_account_namespace = "kube-system"
    service_account_cluster_role_binding = "myapps-manage-binding"
  5. terraform.tfvarsを保存して閉じます。