ノート:

Terraformおよびcloud-initスクリプトを使用したOracle Cloud Infrastructure Computeインスタンスへの予約済IPのアタッチ

イントロダクション

Infrastructure as Code (IaC)の世界では、効率的でスケーラブルなクラウド・デプロイメントのために、コンピュート・インスタンスのプロビジョニングと構成を自動化することが不可欠です。予約済IPアドレスをOracle Cloud Infrastructure (OCI) Computeインスタンスにアタッチすると、Terraformとcloud-initは強力な組合せを提供します。

OCI Compute Terraformモジュールでは、インスタンスの作成中に、予約済IPをコンピュート・インスタンスにアタッチするオプションはありません。予約済IPは、インスタンスの作成後にのみアタッチできます。このブログ投稿では、Terraformおよびcloud-initスクリプトを利用して、予約済IPをOCIコンピュート・インスタンスにシームレスにアタッチする方法を学習します。

目標

Terraformおよびcloud-initスクリプトを使用して、予約済IPをOCIコンピュート・インスタンスにシームレスにアタッチします。

予約済IPとは何ですか。

予約済IPアドレスは、仮想ネットワーク内のコンピュート・インスタンスに割り当てられた静的IPです。固定IPを必要とするアプリケーションの一貫した接続を保証し、ネットワーク管理を簡素化します。予約済IPは、ロード・バランシング、ファイアウォール・ルール、セキュアなネットワーク通信などのシナリオで一般的に使用されます。

前提条件

まず、OCI環境にアクセスする必要があります。ない場合は、Always Freeインスタンスを簡単に作成できます。これには、多くの空き容量と300ドルのトライアル・クレジットが付属しています。

環境がある場合は、instance-familyリソースおよびstorage-familyを管理する権限を持つグループにユーザーが割り当てられていることを確認してください。セキュリティ・ベスト・プラクティスでは、すでに権限が割り当てられているコンソール・ユーザーを使用するかわりに、ユーザーを作成します。ヘルプが必要な場合は、ドキュメントをチェックアウトしてグループを作成し、適切な権限をユーザーに付与します。

  1. OCIアカウント
  2. Terraformアクセス。詳細は、このリンクを参照してください。
  3. インスタンスが起動されるパブリック・サブネット。これは、インターネット・ゲートウェイにアタッチする必要があります。
  4. セカンダリVNICが作成され、予約済IPが割り当てられるプライベート・サブネット。これは、サービス・ゲートウェイにアタッチする必要があります。
  5. グループ内のリソースがネットワーク・ファミリを管理する権限を必要とする動的グループ。
  6. Instance Principal認証に対してポリシーを構成する必要があります。

タスク1: Terraformスクリプトの設定

ここでは、Cloud-initスクリプトをメタデータとしてOCI Terraformコンピュート・インスタンスの作成モジュールに追加します。また、予約済IP OCIDとプライベート・サブネットOCIDをフリーフォーム・タグとしてCompute VMに渡します。

resource "oci_core_public_ip" "pubip" {
  # In case of Multiple Instances has to be created, Provide the count in the vars file.
  # This block creates a Reserved Public IP from Oracle IP Pool
  count = var.instance_count
  compartment_id = var.compartment_id
  display_name   = var.res_ip_display_name
  lifetime       = "RESERVED"
  private_ip_id  = ""
}

resource "oci_core_instance" "pubiptest" {
  count = var.instance_count
  compartment_id      = var.compartment_id
  availability_domain = data.oci_identity_availability_domains.ads.availability_domains[0].name
  display_name        = var.display_name
  shape               = var.shape

  # We will pass Reserved Public IP OCID and Private Subnet OCID as a freeform tags to the instance
  freeform_tags = {
    "publicIP" = resource.oci_core_public_ip.pubip[count.index].id
    "SubnetId" = var.private_subnet_id
    }

  create_vnic_details {
    display_name     = var.vnic_display_name
    assign_public_ip = true
    subnet_id        = var.public_subnet_id
  }

  source_details {
    source_type = var.source_type
    source_id   = var.source_id
  }

  metadata = {
    ssh_authorized_keys = var.pub_key
    user_data = "${base64encode(file("./cloud-init.sh"))}"
  }
}

前述のスクリプトは、(カウント変数値を考慮した)予約済IPを作成し、プライマリVNICにアタッチされるエフェメラルIPを持つコンピュート・インスタンスをスピンアップします。

Compute Metadataでは、cloud-initスクリプトを渡します。これにより、既存のEphemeral IPを置き換えて予約済IPが割り当てられます。

タスク2: cloud-initスクリプトの理解

タスク2.1: OCI CLIおよびその他の必要なツールのインストール

次のコマンドを使用して、OCI CLIおよびjq (解析JSON)をインストールします。

`sudo yum install -y python36-oci-cli jq`

タスク2.2: インスタンスMetadataの取得

タスク2.3: セカンダリVNICのアタッチ

次のコマンドを実行して、プライベート・サブネットを使用するCompute VMにセカンダリVNICをアタッチします。

oci compute instance attach-vnic --instance-id $instanceid --subnet-id $subnetid --auth instance_principal --wait

タスク2.4: ルートの構成

タスク2.5: セカンダリVNICルートをデフォルト・ルートとして設定

タスク2.6: エフェメラル・パブリックIPの削除

タスク2.7: 予約済IPのアタッチ

フリーフォーム・タグからパブリックIP OCIDがあり、エフェメラルIPを削除したため、予約済IPをプライマリVNICにアタッチできます。次のコマンドは、予約済IPをインスタンスのプライマリVNICにアタッチします。

assign=$(oci network public-ip update --force --auth instance_principal --public-ip-id $publicIp --private-ip-id $privateIpId --wait-for-state ASSIGNED)

タスク2.8: セカンダリVNICのデタッチ

次のステップ

これはサンプル実装で、cloud-initスクリプトとして使用する前に対応する変更を行います。これは、Oracle Linux 8でテストされています。

他のLinuxフレーバを選択すると、oci-cliインストール手順が変更されます。詳細は、CLIのインストールを参照してください。

謝辞

作成者 - Rithesh Subramanian (OCI Cloud Architect)

その他の学習リソース

docs.oracle.com/learnで他のラボをご覧いただくか、Oracle Learning YouTubeチャネルでより無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。