コンピュート・インスタンスの作成

Terraformを使用して、Oracle Cloud Infrastructureテナンシにコンピュート・インスタンスを作成します。

主なタスクは:

  • SSHキーを作成します。
  • 仮想クラウド・ネットワークをテナンシに作成します。
  • Oracle Cloud Infrastructure Terraformプロバイダを使用して、ネットワークにコンピュート・インスタンスを作成します。
  • インスタンスに接続します。
Terraformを使用してOracle Cloud Infrastructureコンピュート・インスタンスを作成するために必要なコンポーネントのダイアグラム。コンピュート・インスタンスは、仮想クラウド・ネットワークのパブリック・サブネットに作成されます。パブリック・サブネットは、インターネット・ゲートウェイを介してインターネットに接続されています。

詳細は、次を参照してください:

開始前

このチュートリアルを正常に実行するには、次が必要です:

要件

1. 準備

コンピュート・インスタンスを作成するための環境を準備します。また、チュートリアルを完了するために必要なすべての情報を収集します。

SSH暗号化キーの作成

ssh暗号化キーを作成して、コンピュート・インスタンスに接続します。

  1. ターミナル・ウィンドウを開きます:
    • MacOS or Linux: キーを格納するディレクトリでターミナル・ウィンドウを開きます。
    • Windows: キーを格納するディレクトリを右クリックし、「Git Bash Here」を選択します。
    ノート

    Windows Subsystem for Linux (WSL)を使用している場合は、キーのディレクトリがLinuxマシンに直接あり、/mntフォルダ(ウィンドウ・ファイル・システム)にないことを確認してください。
  2. 次のOpenSSHコマンドを発行します:
    ssh-keygen -t rsa -N "" -b 2048 -C <your-ssh-key-name> -f <your-ssh-key-name>

    このコマンドは、キーの生成に使用されるランダムなテキスト・アートを生成します。完了すると、2つのファイルが作成されます:

    • 秘密キー・ファイル: <your-ssh-key-name>
    • 公開キー・ファイル: <your-ssh-key-name>.pub

    これらのファイルを使用して、コンピュート・インスタンスに接続します。

必要な暗号化キーを生成しました。

ssh暗号化キーの生成の詳細は、キー・ペアの作成を参照してください。

仮想クラウド・ネットワーク(VCN)の作成
  1. ナビゲーション・メニューを開き、「ネットワーキング」「仮想クラウド・ネットワーク」の順に選択します。
  2. 「Virtual Cloud Networks」リスト・ページで、表示されるオプションに応じて次のいずれかのアクションを実行します:

    • 「アクション」から、「VCNウィザードの起動」を選択します。
    • 「VCNウィザードの起動」を選択します。
  3. 「VCNウィザードの起動」パネルで、「インターネット接続性を持つVCNの作成」を選択します。
  4. 「VCNウィザードの起動」を選択します。

    「インターネット接続性を持つVCNの作成」ウィンドウが開きます。

1. 構成

次の基本情報を入力します。

  • VCN名: <your-vcn-name>

  • コンパートメント: <your-compartment-name>
VCNの構成
  • VCN IPv4 CIDRブロック: デフォルト値のままにします: 10.0.0.0/16

  • このVCNでDNSホスト名を使用: このチェック・ボックスの選択を解除します。

パブリック・サブネットの構成
  • IPv4 CIDRブロック: デフォルト値のままにします: 10.0.0.0/24

プライベート・サブネットの構成
  • IPv4 CIDRブロック: デフォルト値のままにします: 10.0.1.0/24

パブリック・サブネットとプライベート・サブネットのネットワーク・アドレスが異なることに注意してください。

「次」を選択します。「レビューおよび作成」ページが開きます。

2. 確認および作成

完全なVCN構成を確認し、「作成」を選択します。

リソースが作成され、VCNの作成が完了したことを示すメッセージが表示されます。

作成されたVCNを表示するには、「VCNの表示」を選択します。

コンピュート・インスタンスをホストするVCNが正常に作成されました。

必要な情報の収集

必要な情報を収集し、メモ帳にコピーします。

  • コンパートメント名
  • コンパートメントID
  • サブネットID
  • ソースID (コンピュート・インスタンスのイメージ)
  • シェイプ(コンピュート・インスタンス)
  • SSH認可キー(公開キーのパス)
  • 秘密キー・パス

この情報を収集する手順については、次の表を参照してください。

項目 アイテムを収集するステップ
コンパートメント名 完成したチュートリアルコンパートメントの作成を参照してください。
コンパートメントID
  1. コンソールの検索バーで、<your-compartment-name>と入力します。
  2. 検索結果内の<your-compartment-name>を選択します。
  3. OCIDの横にある「コピー」を選択します。
インスタンス表示名 選択した名前。
サブネットID
  1. コンソールで: ナビゲーション・メニューを開き、「ネットワーキング」「仮想クラウド・ネットワーク」の順に選択します。
  2. 「Virtual Cloud Network (VCN)の作成」から<your-vcn-name>を選択します。
  3. 「サブネット」を選択します。
  4. <your-compartment-name>を選択して、コンパートメント内のサブネットを表示します。
  5. パブリック・サブネットの「アクション」メニュー(3つのドット)から、「OCIDのコピー」を選択します。
ソースID (コンピュート・インスタンスのイメージ)
  1. コンソールのナビゲーション・バーで、リージョンを検索します。

    「リージョンでの作業」を参照してください。

  2. イメージのリリース・ノートに移動します。
  3. 「Ubuntu 24.04」を選択します。

    Ubuntu 24.04の画像リストが開きます。

  4. 最新のイメージ「Canonical-Ubuntu-24.04-<date>」を選択します。

    ページには、イメージOCIDsがリストされます。

  5. リージョンのイメージを検索し、イメージのOCIDをコピーします。

    ノート: OCIDにgovがない商用OCIDを選択していることを確認してください。

シェイプと構成(コンピュート・インスタンス)
  • 形状: VM.Standard.E5.Flex
  • OCPU
  • メモリー(GB): 12

ノート: VM.Standard.E5.Flexには、OCPUおよびメモリーの値が必要です。別のシェイプを選択するには、仮想マシン(VM)シェイプに移動します。

SSH認可キー(公開キーのパス) 「SSH暗号化キーの作成」の項を参照してください。このパスは、コンピュート・インスタンスを設定するときに使用します。
秘密キー・パス 「SSH暗号化キーの作成」の項を参照してください。この秘密キーは、コンピュート・インスタンスに接続するときに使用します。
リソース・ポリシーの追加

ユーザー名がAdministratorsグループ内にある場合は、この項をスキップしてください。それ以外の場合は、テナンシに次のポリシーを追加するよう管理者に依頼してください:

allow group <a-group-your-username-belongs-to> to manage all-resources in compartment <your-compartment-name>

この権限を使用すると、コンパートメント内のすべてのリソースを管理でき、そのコンパートメントでの管理権限が付与されます。

ポリシーを追加するステップ
  1. コンソールで、ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」を選択します。「アイデンティティ」にある「ポリシー」を選択します。
  2. コンパートメントを選択します。
  3. 「ポリシーの作成」を選択します。
  4. 「ポリシーの作成」ページで、次の値を入力します:
    • 名前: manage-<your-compartment-name>-resources
    • 説明: Allow users to list, create, update, and delete resources in <your-compartment-name>.
    • コンパートメント: <your-tenancy>(root)
  5. 「ポリシー・ビルダー」に、次の値を入力します:
    • ポリシー・ユース・ケース: コンパートメント管理
    • 共通ポリシー・テンプレート: コンパートメント管理者がコンパートメントを管理できるようにします
    • アイデンティティ・ドメイン: <identity-domain>
    • グループ: <a-group-your-username-belongs-to>
    • 場所: <your-compartment-name>
  6. 「作成」を選択します。

参照: 共通ポリシー

2. スクリプトの作成

認証、データのフェッチ、コンピュート・インスタンスの作成および出力の印刷用のスクリプトを作成します。

認証の追加

最初に、Terraformスクリプトのディレクトリを設定します。次に、OCI Terraformの設定チュートリアルからプロバイダおよびバージョンのスクリプトをコピーして、Oracle Cloud Infrastructureアカウントがこのディレクトリから実行されているスクリプトを認証できるようにします。

  1. $HOMEディレクトリにtf-computeというディレクトリを作成し、そのディレクトリに移動します。
    mkdir tf-compute
    cd tf-compute
  2. provider.tfファイルをtf-computeディレクトリにコピーします。
    cp ../tf-provider/provider.tf .
  3. versions.tfファイルをtf-computeディレクトリにコピーします。
    cp ../tf-provider/versions.tf .
データのフェッチ

アカウントから可用性ドメインの名前をフェッチします。可用性ドメインは、コンピュート・インスタンスの作成に必要な入力のいずれかです。

  1. availability-domains.tfファイルをtf-computeディレクトリにコピーします。

    availability-domains.tfファイルは、OCI Terraformの設定チュートリアル中に作成されました。

    cp ../tf-provider/availability-domains.tf .

    サンプル・コード:

    # Source from https://registry.terraform.io/providers/oracle/oci/latest/docs/data-sources/identity_availability_domains
    
    data "oci_identity_availability_domains" "ads" {
      compartment_id = "<tenancy-ocid>"
    }
  2. tf-computeディレクトリに、outputs.tfというファイルを作成します。
    ノート

    outputs.tfprovider.tfおよびavailability-domains.tfが同じディレクトリにあることを確認してください。
  3. oci_identity_availability_domainsのリストの最初の可用性ドメインの名前を出力するには、次のコードをoutputs.tfに追加します。
    
    # The "name" of the availability domain to be used for the compute instance.
    output "name-of-first-availability-domain" {
      value = data.oci_identity_availability_domains.ads.availability_domains[0].name
    }
  4. outputs.tfファイルを保存します。
  5. Terraformを使用してスクリプトを実行します:
    terraform init
    terraform plan
    terraform apply

    確認を求められた場合は、フェッチして出力に表示するデータにyesを入力します。

    これで、インスタンスに使用する可用性ドメインの名前が出力されました。

    出力例:

    name-of-first-availability-domain = QnsC:US-ASHBURN-AD-1
完了!コンピュート・インスタンスに使用するデータがOracle Cloud Infrastructureアカウントから正常にフェッチされました。
説明

最初のチュートリアル「OCI Terraformの設定」でTerraformを設定すると、出力ブロックには次の行が含まれます:

value = data.oci_identity_availability_domains.ads.availability_domains

その後、出力は次のようになります:

Outputs:

all-availability-domains-in-your-tenancy = tolist([
  {
    "compartment_id" = "ocid1.tenancy.xxx"
    "id" = "ocid1.availabilitydomain.xxx"
    "name" = "QnsC:US-ASHBURN-AD-1"
  },
  {
    "compartment_id" = "ocid1.tenancy.xxx"
    "id" = "ocid1.availabilitydomain.xxx"
    "name" = "QnsC:US-ASHBURN-AD-2"
  },
  {
    "compartment_id" = "ocid1.tenancy.xxx"
    "id" = "ocid1.availabilitydomain.xxx"
    "name" = "QnsC:US-ASHBURN-AD-3"
  },
])

ここで、リスト内の最初の可用性ドメインの名前をフェッチして、後でコンピュート・インスタンスの場所に使用します:

"name" = "xxxx:US-ASHBURN-AD-1"
ノート

  • リスト属性に索引を追加するには、大文字を使用します。
  • リスト内の最初のアイテムには索引0を使用します。
  • リストの属性を指定するには、大カッコの後にドットを使用し、リストの属性を続けます。
  • 例: リスト内の最初のアイテム:

    value = data.oci_identity_availability_domains.ads.availability_domains[0]

  • 例: リスト内の最初のアイテムの名前:

    value = data.oci_identity_availability_domains.ads.availability_domains[0].name

コンピュート・リソースの宣言

Oracle Cloud Infrastructureのコンピュート・リソースを宣言し、インスタンスの詳細を定義します。

ヒント

コンピュート・インスタンスを作成するためのコンソール・ワークフローからスタックを保存できます。スタックには、シェイプおよびシェイプ構成の参照として使用できるTerraform構成が含まれています。リソース作成ページからのスタックの作成およびスタックのTerraform構成の取得を参照してください。
  1. compute.tfというファイルを作成します。
  2. compute.tfに、次のコードを追加します。
    resource "oci_core_instance" "ubuntu_instance" {
        # Required
        availability_domain = data.oci_identity_availability_domains.ads.availability_domains[0].name
        compartment_id = "<compartment-ocid>"
        shape = "VM.Standard.E5.Flex"
        shape_config {
            ocpus = "1"
            memory_in_gbs = "12"
        }
        source_details {
            source_id = "<source-ocid>"
            source_type = "image"
        }
    
        # Optional
        display_name = "<your-ubuntu-instance-name>"
        create_vnic_details {
            assign_public_ip = true
            subnet_id = "<subnet-ocid>"
        }
        metadata = {
            ssh_authorized_keys = file("<ssh-public-key-path>")
        } 
        preserve_boot_volume = false
    }
    重要

    • <compartment-ocid>, <source-ocid><your-ubuntu-instance-name>および<subnet-ocid>を、「必要な情報の収集」で収集した情報に置き換えます。
    • 可用性ドメインには、データ・ソースでフェッチした名前を使用します:
      data.oci_identity_availability_domains.ads.availability_domains[0].name
    • ssh_authorized_keysの場合は、次の形式を使用します。
      file("<ssh-public-key-path>")

      VMの作成後にその値を変更することはできません。

  3. compute.tfファイルを保存します。
説明

Terraformでは、リソースとは仮想クラウド・ネットワーク(VCNs)やコンピュート・インスタンスなどのオブジェクトです。Terraformを使用してこれらを作成、更新および削除できます。

コンピュート・リソースを宣言するには:

  • Oracle Cloud Infrastructureプロバイダに移動します。
  • 左上の「フィルタ」ボックスに、core instanceと入力します。

    結果には、複数のサービスのデータ・ソースとリソースが含まれます。

  • 「コア」で、「リソース」に移動し、oci_core_instanceを選択します。

    ページのタイトルはリソース・タイプです: oci_core_instance

  • 引数リファレンスの項で、次の必須引数(入力)を使用します。
    • availability_domain
    • compartment_id
    • 形状
    • source_details
      • source_id
      • source_type
  • リソース・ブロックを作成します:
    • キーワードresourceを使用してリソース・ブロックを宣言します
    • リソース・タイプ"oci_core_instance"のラベルを追加します
    • ローカル名のラベルを追加します(任意):
      • ラベルには、文字、数字、アンダースコア(_)およびハイフン(-)を含めることができます。最初の文字は数字にできません。
      • 例: "ubuntu_instance"
    • コード・ブロック内で、必要な引数の値を指定しますデフォルト値はありません。
    • オプションの引数には、オーバーライドする引数の値を指定します。それ以外の場合は、デフォルト値が使用されます。
出力の追加

出力ブロックをコードに追加して、Terraformがコンピュート・インスタンスを作成した後にコンピュート・インスタンスに関する情報を取得します。

  1. outputs.tfファイルを開きます。
  2. インスタンスのパブリックIPの出力ブロックを作成します:
    • パブリックIPは、インスタンスの作成後に使用可能になります。
    • インスタンスに接続するには、パブリックIPを使用します。
    • outputs.tfに、次のコードを追加します:
    # Outputs for compute instance
    
    output "public-ip-for-compute-instance" {
      value = oci_core_instance.ubuntu_instance.public_ip
    }
  3. コンピュート・インスタンスを説明する出力をさらにいくつか追加します:
    • display_name
    • id
    • リージョン
    • 形状
    • 状態
    • ocpus
    • memory_in_gbs
    • time_created
    
    output "instance-name" {
      value = oci_core_instance.ubuntu_instance.display_name
    }
    
    output "instance-OCID" {
      value = oci_core_instance.ubuntu_instance.id
    }
    
    output "instance-region" {
      value = oci_core_instance.ubuntu_instance.region
    }
    
    output "instance-shape" {
      value = oci_core_instance.ubuntu_instance.shape
    }
    
    output "instance-state" {
      value = oci_core_instance.ubuntu_instance.state
    }
    
    output "instance-OCPUs" {
      value = oci_core_instance.ubuntu_instance.shape_config[0].ocpus
    }
    
    output "instance-memory-in-GBs" {
      value = oci_core_instance.ubuntu_instance.shape_config[0].memory_in_gbs
    }
    
    output "time-created" {
      value = oci_core_instance.ubuntu_instance.time_created
    }
  4. outputs.tfファイルを保存します。
説明
  • 属性リファレンス(oci_core_instance)に移動します。
    ノート

    属性は、oci_core_instanceリソースに対して返すことができる出力です。
  • パブリックIP public_ipの属性を検索します。
  • public_ipのリソース出力ブロックを作成します:
    • 値式には、次のフォーマットを使用します:
      • value = <type>.<local-name-for-resource>.<attribute>
      • 例: value = oci_core_instance.ubuntu_instance.public_ip
  • 次の出力ごとに出力ブロックを作成します:
    • display_name
    • id
    • リージョン
    • 形状
    • 状態
    • ocpus
    • memory_in_gbs
    • time_created

3. スクリプトの実行

Terraformスクリプトを実行して、テナンシのコンパートメントにコンピュート・インスタンスを作成します。SSHキーを使用してインスタンスに接続します。インスタンスが不要になった場合は、Terraformで破棄します。

インスタンスの作成
  1. Terraformを使用してコンピュート・インスタンスを作成します:
    terraform init
    terraform plan
    terraform apply

    確認を求められた場合は、作成するリソースにyesを入力します。

    インスタンスが作成されると、<your-public-ip-address>などの定義した出力が出力ターミナルに表示されます。
  2. (オプション)コンソールからインスタンスの作成を確認します。
    • ナビゲーション・メニューを開き、「コンピュート」を選択します。「コンピュート」で、「インスタンス」を選択します。
    • コンパートメントを選択します。
    • インスタンスがインスタンスのリストに表示されることを確認します。

完了!Terraformを使用して、Oracle Cloud Infrastructureアカウントにコンピュート・インスタンスが正常に作成されました。

参照:

インスタンスへの接続
  1. ターミナルから、コンピュート・インスタンスの出力を入力します:
    terraform output
  2. 出力からパブリックIPアドレスをコピーします。
  3. Linuxマシンから、次のsshコマンドを使用してVMに接続します:
    ssh -i <ssh-private-key-path> ubuntu@<your-public-ip-address>
    ノート

    秘密キーがLinux (WSL)マシンに直接配置されていることを確認してください。
  4. インスタンスから切断します。
    exit
インスタンスの破棄
  1. (オプション)コンピュート・インスタンスが必要なくなったら、次のコマンドで終了できます:
    terraform destroy

    確認プロンプトが表示された場合は、yesを入力します。

  2. (オプション)コンソールから終了を確認します:
    • ナビゲーション・メニューを開き、「コンピュート」を選択します。「コンピュート」で、「インスタンス」を選択します。
    • コンパートメントを選択します。
    • インスタンスの状態が「終了中」「終了済」の順に変更されることを確認します。