grasys blog

OCI 〜アカウント作成から CLI, Terraform でリソースが作成できるまで〜

お久しぶりです、よっしーです。
今回は Oracle が運営するパブリック・クラウドサービス OCI を使ってみました!

OCI (Oracle Cloud Infrastructure) とは?

OCI 公式ホームページでは以下の 4 点を特徴として挙げています

  • マルチクラウド:複数のクラウドを連携させます。
  • パブリック・クラウド:一貫性のあるサービス・セットと均一な価格を提供
  • ハイブリッド・クラウド:ほぼすべての地域で信頼性の高いクラウド・ソリューションを提供
  • 専用クラウド:100 種類以上のクラウド・サービスを、お客様のデータセンターでパブリック・クラウド価格で提供

詳細は下記リンクの OCI 公式ホームページで
https://www.oracle.com/jp/cloud/

OCI コンソールにアクセスする

1, 下記リンクのページから Free Tier を登録する

https://www.oracle.com/jp/cloud/free/?intcmp=ohp052322ocift_jp

登録が終了すると、
 1, クラウド・アカウント
 2, アイデンティティドメイン「default」
 3, Admin ユーザ (アカウント作成時に登録したメールドアレス)
が作成されます。

2, 下記のリンクから OCI コンソールにアクセスする

https://www.oracle.com/jp/cloud/sign-in.html

・クラウド・アカウント名を指定

・ユーザ名および、パスワードを入力

・MFA を登録してあれば、次ページで MFA 情報を入力します。
・Sign-in が成功すると OCI コンソールの HOME 画面が表示されます。

コンソールからリソースを作成する

まずは、OCI コンソールから Compute Instance を作成してみましょう!

ですが。。Compute Instance を作成する前に、Network 設定が必須!

もちろん、OCI アカウント作成してすぐに Compute Instance を作成できる訳ではありません。
Instance をどこに作成するのか、作成した Instance にどのようにアクセスするのかを決める、
「Networking」の設定が必要です。

ここでは「Networking」設定の詳細は載せませんが、下記リンクのページから
「VCN」
を作成し、VCN に付属する下記のリソースの作成をします。

・HOME ページ 左上のメニューから「Networking」→「Virtual cloud networks (VCN)」を選択

・「Create VCN」ボタンをクリックし、VCN を作成

・作成した VCN の詳細画面にある、各 tab をクリックし、下記の Networking リソースを作成

作成する Networking リソース

1, Subnet :
 ・配下のリソースに Public IP アドレスが使用できる Public subnet
 ・Public IP アドレスが使用できない Private Subnet
 が作成できる
2, Gateway:
 ・Subnet 側からの Public IP アドレスでインターネットアクセスできる Internet Gateway (IGW)
 ・Subnet 側からの Private IP アドレスを Public IP アドレスに変換してインターネットにアクセスする NAT Gateway (NGW)
 を作成する
3, Routing :
 Route Table を作成。
 ・Public Subnet 用に IGW をデフォルトルートとした Route Table
 ・Private Subnet 用に NGW をデフォルトルートとした Route Table
 の2種を作成
4, Security :
 Firewall 設定。
 送信元 IP アドレス、宛先 IP アドレス、プロトコル、ポート番号を元にアクセス許可・拒否を設定。
 作成した Security List は Subnet にアサインし、Subnet 配下にあるリソースに適用される

Network 設定ができたところで。。
Compute Instance を作成しましょう!

・HOME ページ 左上のメニューから「Compute」→「Instance」を選択

・Basic Information
・Security
・Networking
・Storage
の各ブロックのパラメータを入力し、
最後に入力したパラメータを「Review」画面で確認し、「Create」ボタンをクリックで作成します。

ここでは、注意すべきパラメータ値を説明します。

1, Image

Boot Disk のイメージを選択します。OCI では “Oracle Linux” のイメージが使用できます
また、Instance 作成後、その作成された Instance の Disk から作成した “Custom Image” の選択も可能

2, Shape (マシンタイプ)

マシンタイプを選択でき、Instance 作成後に変更することもできますが、
下記の Shape は Instance 作成後に Shape 変更できません。
 ・VM.Standard.E2.1.Micro この Shape が常時無料の Shape になるので選択しがちで注意
 ・VM.DenseIO.E4.Flex
 ・VM.DenseIO.E5.Flex
 ・VM.DenseIO.E6.Ax.Flex
 ・VM.GPU2 series

3, Oracle Cloud Agent

Instance のインフラに関連するメトリクス値を収集する Agent のインストールを Instance 作成時に指定できる。

4, Add SSH Keys

Instance 作成後 ssh 接続するために必要な Public Key を登録
SSH Key pair は既存のものでも、この時点での新規作成も可能

作成された Compute Instance のサンプル

OCI CLI を使用してリソースを作成する

OCI CLI をインストールする

OCI CLI では Python3 を使用するため、事前にインストールしておく

# python -V
Python 3.9.25

下記の dnf コマンドで OCI CLI をインストール
(下記コマンドは Oracle Linux で作成した Compute Instance 上でインストール例)

# sudo dnf -y install oraclelinux-developer-release-el9
# sudo dnf install python39-oci-cli

インストール確認
# oci -v
3.83.0

OCI CLI の環境設定の前に。。

OCI CLI の環境設定に必要なアカウントやユーザの OCID を確認する
OCI では全てのリソースや設定に ID となる OCID があり、各種設定には OCID が必要となる

OCI CLI の環境設定に必要な OCID は以下のとおり
1, Tenancy OCID
  左上メニュー →「Governance & Administration」→ 「Tenancy details」 → 「Details」tab から取得
2, Compartment OCID
  左上メニュー →「Identity & Security」→ 「Compartment」 → 「Details」tab から取得
3, User OCID
  左上メニュー →「Identity & Security」→ 「My profile」 → 「Details」tab から取得

OCI CLI の環境設定

下記コマンドを実行

# oci setup config
    This command provides a walkthrough of creating a valid CLI config file.
....
Enter a location for your config [/root/.oci/config]: <ENTER>
Enter a user OCID: ocid1.user.oc1..aaaaaaaaws3kb6laddql5zozpullgvjnkakuhv2jbbtn2x7nxkyoxlczpceq
  ↑ user OCID を入力
Enter a tenancy OCID: ocid1.tenancy.oc1..aaaaaaaawip5yx4p3ozfpl5wycwup5zrcjqyoos4z6dnwl6auim3mekjou2a
  ↑ tenancy OCID を入力
Enter a region by index or name(e.g.
1: af-casablanca-1, 2: af-johannesburg-1, 3: ap-batam-1, 4: ap-chiyoda-1, 5: ap-chuncheon-1,
.... (Region List を表示)
81: us-saltlake-2, 82: us-sanjose-1, 83: us-somerset-1, 84: us-thames-1): 22
  ↑ 22 (東京)を入力
Do you want to generate a new API Signing RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: Y
  ↑ API によるアクセスのための Key-pair を作成
Enter a directory for your keys to be created [/root/.oci]: <ENTER>
Enter a name for your key [oci_api_key]: <ENTER>
Public key written to: /root/.oci/oci_api_key_public.pem
Enter a passphrase for your private key ("N/A" for no passphrase):
  ↑ passphrase を入力、不要な場合は "N/A" を入力
Repeat for confirmation:
  ↑ passphrase を入力、不要な場合は "N/A" を入力
Private key written to: /root/.oci/oci_api_key.pem
Fingerprint: d4:0f:9e:77:09:5b:cb:5d:80:a6:31:50:07:46:7c:f2
Config written to /root/.oci/config
  ↑ CONFIG ファイルが出力される

    If you haven't already uploaded your API Signing public key through the
    console, follow the instructions on the page linked below in the section
    'How to upload the public key':

        https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#How2

“~/.oci/config” ファイルが出力される
・また、上記コマンドで作成された
  “~/.oci/oci_api_key.pem”
  “~/.oci/oci_api_key_public.pem”
 の Key-pair が出力される

# ls -l .oci
total 16
-rw-------. 1 root root  294 Jun  1 03:00 config
-rw-------. 1 root root 1715 Jun  1 03:00 oci_api_key.pem
-rw-------. 1 root root  451 Jun  1 03:00 oci_api_key_public.pem

# cat .oci/config
[DEFAULT]
user=ocid1.user.oc1..aaaaaaaaws3kb6laddql5zozpullgvjnkakuhv2jbbtn2x7nxkyoxlczpceq
fingerprint=d4:0f:9e:77:09:5b:cb:5d:80:a6:31:50:07:46:7c:f2
key_file=/root/.oci/oci_api_key.pem
tenancy=ocid1.tenancy.oc1..aaaaaaaawip5yx4p3ozfpl5wycwup5zrcjqyoos4z6dnwl6auim3mekjou2a
region=ap-tokyo-1

Default Compartment の指定

下記コマンドを実行

# oci setup oci-cli-rc
Predefined queries written under section OCI_CLI_CANNED_QUERIES
Command aliases written under section OCI_CLI_COMMAND_ALIASES
Parameter aliases written under section OCI_CLI_PARAM_ALIASES

“~/.oci/oci_cli_rc” ファイルが作成される
・Default Compartment の指定にはこの oci_cli_rc ファイルの最後部の下位に以下の設定を追加

[DEFAULT]
compartment-id = ocid1.compartment.oc1..aaaaaaaaxazrwoi7raxbr2h4dqzrs7waixttdupcgxqjzcrny6rvcgepfdxq

作成した Key-pair の Public Key を OCI コンソールのユーザ「My Profile」に登録

・左上メニュー →「Identity & Security」→ 「My profile」 → 「Tokens and Keys」tab を選択
・「Add API Key」をクリック

・Key を登録

・これで OCI CLI コマンドを使用して OCI API の利用が可能です。

OCI CLI で Compute Instance を作成する

・Compute Instance を作成する前に、下記のコマンドで使用できる availability-domain の OCID を確認する

# oci iam availability-domain list --compartment-id ocid1.tenancy.oc1..aaaaaaaawip5yx4p3ozfpl5wycwup5zrcjqyoos4z6dnwl6auim3mekjou2a
....
"id": "ocid1.availabilitydomain.oc1..aaaaaaaaaijs56nfsz2usbwsr6k6t5b3do7hns6ib2day6le5scrvvjpeceq"

・下記にサンプルコマンドで Compute Instance “web01” を作成

# oci compute instance launch \
--display-name "web01" \
--compartment-id ocid1.compartment.oc1..aaaaaaaaxazrwoi7raxbr2h4dqzrs7waixttdupcgxqjzcrny6rvcgepfdxq \
--availability-domain "xLcK:AP-TOKYO-1-AD-1" \
--fault-domain "FAULT-DOMAIN-1" \
--image-id ocid1.image.oc1.ap-tokyo-1.aaaaaaaahn34du6bajipqgavtyhnabrzx6sx535reauimefhp2kna3lvbj7a \
--shape "VM.Standard2.1" \
--vnic-display-name null \
--subnet-id ocid1.subnet.oc1.ap-tokyo-1.aaaaaaaaextbtb5bzbv7wtshaexlo5yzckuvcnoor2aulfnn3uqcsewrc56q \
--private-ip "10.0.20.100" \
--boot-volume-size-in-gbs 50 \
--ssh-authorized-keys-file ~/.ssh/oci-test01.pub

作成された Compute Instance のサンプル

OCI CLI のレファレンスは下記のリンクを参照

https://docs.oracle.com/en-us/iaas/tools/oci-cli/latest/oci_cli_docs/index.html

・Compute Instance Create のリファレンスは下記
https://docs.oracle.com/en-us/iaas/tools/oci-cli/latest/oci_cli_docs/cmdref/compute/instance/launch.html

Terraform を使用してリソースを作成する

Terraform をインストールする

下記の dnf コマンドで Terraform をインストール
(下記コマンドは Oracle Linux で作成した Compute Instance 上でインストール例)

コマンド
# sudo dnf install -y dnf-utils
# sudo dnf config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
# sudo dnf install -y terraform

インストール確認 
# terraform -v
Terraform v1.15.5
on linux_amd64

terraform コマンドの環境設定

OCI で Terraform を使用するためには下記のような “provider.tf” を作成する。
provider 設定には OCI CLI の項で取得した OCID とユーザ Profile に登録済みの RSA Public Key を使用する。

$ cat provider.tf
provider "oci" {
  tenancy_ocid = "ocid1.tenancy.oc1..aaaaaaaawip5yx4p3ozfpl5wycwup5zrcjqyoos4z6dnwl6auim3mekjou2a"
  user_ocid = "ocid1.user.oc1..aaaaaaaaws3kb6laddql5zozpullgvjnkakuhv2jbbtn2x7nxkyoxlczpceq"
  private_key_path = "/root/.oci/oci_api_key.pem"
  fingerprint = "d4:0f:9e:77:09:5b:cb:5d:80:a6:31:50:07:46:7c:f2"
  region = "ap-tokyo-1"
}
terraform {
  required_providers {
    oci = {
      source  = "oracle/oci"
    }
  }
}

・下記にサンプルコマンドで Compute Instance “web02” を作成

$ cat web02.tf
resource "oci_core_instance" "web" {
    availability_domain = "xLcK:AP-TOKYO-1-AD-1"
    compartment_id = "ocid1.compartment.oc1..aaaaaaaaxazrwoi7raxbr2h4dqzrs7waixttdupcgxqjzcrny6rvcgepfdxq"
    shape = "VM.Standard2.1"
    shape_config {
        memory_in_gbs = 15
        ocpus = 1
    }
    source_details {
        source_id = "ocid1.image.oc1.ap-tokyo-1.aaaaaaaahn34du6bajipqgavtyhnabrzx6sx535reauimefhp2kna3lvbj7a"
        source_type = "image"
    }

    display_name = "web02"
    create_vnic_details {
        assign_public_ip = false
        subnet_id = "ocid1.subnet.oc1.ap-tokyo-1.aaaaaaaaextbtb5bzbv7wtshaexlo5yzckuvcnoor2aulfnn3uqcsewrc56q"
    }
    metadata = {
        ssh_authorized_keys = file("/root/.ssh/oci_ysato-test01.pub")
    }
    preserve_boot_volume = false
}

・上記 provider.tf と web.tf ファイルに対し
  $ terraform init
  $ terraform plan
  $ terraform apply
 を実行し、Web02 インスタンスを作成

作成された Compute Instance のサンプル

Terraform のレファレンスは下記のリンクを参照

https://registry.terraform.io/providers/oracle/oci/latest/docs

・Compute Instance launch のリファレンスは下記
https://registry.terraform.io/providers/oracle/oci/latest/docs/resources/core_instance

まとめ

OCI は AWS, Google Cloud, Microsoft Azure などと同じく統合されたコンポーネントを持つパブリック・クラウドサービスになっています。
AWS 等、他のクラウドサービスの操作に慣れている方には OCI の操作は難しくないと思いますが、用語はだいぶ変わっているので最初は戸惑うかもしれません。。

CLI によるコマンドでの操作や、Terraform によるリソース管理も可能となっていますので、是非、Trial に登録してみてください!


採用情報
お問い合わせ