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

このチュートリアルでは、Terraformを使用して、Oracle Cloud Infrastructureテナンシにコンピュート・インスタンスを作成します。

主なタスクは:

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

その他の情報については、次のWebサイトを参照してください。

開始する前に

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

要件

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)の作成

Linuxインスタンスをインターネットに接続するように、VCNを設定します。仮想ネットワークの作成に必要なすべてのコンポーネントを構成します。

  1. 「Oracle Cloud」アイコンをクリックして、メイン・ランディング・ページに移動します。
    • 「リソースの起動」までスクロールします。
    • 「ウィザードを使用してネットワークを設定」を選択します。
  2. 「VCNウィザードの起動」ワークフローで、「インターネット接続性を持つVCN」を選択し、「VCNウィザードの起動」をクリックします。
  3. 基本情報を入力します:
    • VCN名: <your-vcn-name>
    • コンパートメント: <your-compartment-name>
  4. 「VCNとサブネットの構成」セクションで、CIDRブロックのデフォルト値をそのまま使用します:
    • VCN CIDRブロック: 10.0.0.0/16
    • パブリック・サブネットCIDRブロック: 10.0.0.0/24
    • プライベート・サブネットCIDRブロック: 10.0.1.0/24
    ノート

    パブリック・サブネットとプライベート・サブネットのネットワーク・アドレスが異なることに注意してください。
  5. 「DNS解決」では、「このVCNでDNSホスト名を使用」の選択を解除します。
  6. 次へをクリックします

    入力したすべての値を確認する「インターネット接続性を持つVCNの作成」構成ダイアログが表示されます(ここでは表示されていません)。

  7. 「作成」をクリックして、VCNを作成します。

    作成中のすべてのVCNコンポーネントを示す「リソースの作成中」ダイアログが表示されます(ここでは表示されていません)。

  8. 「仮想クラウド・ネットワークの表示」をクリックして、新しいVCNを表示します。
コンピュート・インスタンスをホストするVCNが正常に作成されました。
必要な情報の収集

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

  1. コンパートメント名: <your-compartment-name>
    • 開始する前にの項で実行したコンパートメントの作成チュートリアルからコンパートメント名を見つけます。
  2. Oracle Cloud Infrastructureコンソールから次の情報を収集します。
    • コンパートメントID: <compartment-ocid>
      • コンソールの検索バーで、<your-compartment-name>と入力します。
      • 検索結果で<your-compartment-name>をクリックします。
      • OCIDをコピーします。
    • サブネットID: <subnet-ocid>
      • ナビゲーション・メニューを開いて「ネットワーキング」をクリックし、「仮想クラウド・ネットワーク」をクリックします。
      • セクション2の<your-vcn-name>をクリックします。
      • パブリック・サブネットをクリックし、OCIDをコピーします。
  3. コンピュート・インスタンスのイメージのソースIDを検索します。
    • ソースID: <source-ocid>
      • コンソールの上部のナビゲーション・バーで、リージョンを検索します。
      • イメージのリリース・ノートに移動します。
      • 「Ubuntu 20.04」をクリックし、最新イメージ「Canonical-Ubuntu-20.04-<date>」をクリックします。
      • リージョンのイメージを検索し、OCIDをコピーします。
        ノート

        OCIDにgovない商用OCIDを選択していることを確認してください。
  4. コンピュート・インスタンスのシェイプを選択します。
    • シェイプ: VM.Standard2.1
  5. ご使用の環境から次の情報を収集します。
    • SSH認可キー(公開キーのパス): <ssh-public-key-path>
      • 1項から、環境のSSH公開キーへのパスを取得します。
      • このパスは、コンピュート・インスタンスを設定するときに使用します。
    • 秘密SSHキーのパス: <ssh-private-key-path>
      • SSH暗号化キーの作成の項から、SSH秘密キーへのパスを取得します。
      • この秘密キーを使用して、コンピュート・インスタンスに接続します。
リソース・ポリシーの追加

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

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

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

ポリシーを追加するステップ
  1. ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。
  2. 「コンパートメント」ドロップダウンからコンパートメントを選択します。
  3. 「ポリシーの作成」をクリックします。
  4. 次の情報を入力します:
    • 名前: manage-<your-compartment-name>-resources
    • 説明: ユーザーが<your-compartment-name>のリソースをリスト、作成、更新および削除できるようにします。
    • コンパートメント: <your-tenancy>(root)
  5. 「ポリシー・ビルダー」で、次の選択肢を選択します:
    • ポリシー・ユース・ケース: コンパートメント管理
    • 共通ポリシー・テンプレート: コンパートメント管理者がコンパートメントを管理できるようにします
    • グループ: <the-group-your-username-belongs>
    • 場所: <your-tenancy>(root)
  6. 「作成」をクリックします。

参照: 共通ポリシー

2. スクリプトの作成

4つのスクリプトを作成します: 1つは認証用、もう1つはデータのフェッチ用、もう1つはコンピュート・インスタンスの作成用、もう1つは出力の印刷用です。

認証の追加

最初に、Terraformスクリプトのディレクトリを設定します。次に、Oracle Cloud Infrastructureアカウントがこのディレクトリから実行されるスクリプトを認証できるように、プロバイダ・スクリプトを追加します。

  1. $HOMEディレクトリにtf-computeというディレクトリを作成し、そのディレクトリに移動します。
    mkdir tf-compute
    cd tf-compute
  2. 開始する前にの項に記載されているOCI Terraformの設定チュートリアルのprovider.tfファイルをtf-computeディレクトリにコピーします。
    cp ../tf-provider/provider.tf .
データのフェッチ

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

  1. 開始する前にの項に記載されているOCI Terraformの設定チュートリアルのavailability-domains.tfファイルをtf-computeディレクトリにコピーします。
    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を設定すると、出力ブロックに次のコードが含まれます:

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" = "QnsC: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コンピュート・リソースを宣言してから、インスタンスの詳細を定義します。

  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.Standard2.1"
        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>および<subnet-ocid>を、「必要な情報の収集」セクションで収集した情報に置き換えます。
    • <your-ubuntu-instance-name>を任意の名前に置き換えます。
    • 可用性ドメインには、データ・ソースでフェッチした名前を使用します:
      data.oci_identity_availability_domains.ads.availability_domains[0].name
    • ssh_authorized_keysの場合:
      • file形式 file("<ssh-public-key-path>")を使用します。
      • VMの作成後にその値を変更することはできません。
  3. compute.tfファイルを保存します。
説明

Terraformでは、リソースとは仮想クラウド・ネットワークやコンピュート・インスタンスなどのオブジェクトです。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スクリプトを実行します。アカウントがスクリプトを認証した後、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)マシンに直接配置されていることを確認してください。
インスタンスの破棄
  1. (オプション)コンピュート・インスタンスが不要になったら、次のコマンドを使用して終了できます:
    terraform destroy

    確認を求められた場合は、終了するコンピュート・インスタンスにyesを入力します。

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