OCI(Oracle Cloud Infrastructure) でAmpere A1インスタンスを自動取得する

OCI(Oracle Cloud Infrastructure) で選択可能なコンピュートインスタンス「Ampere A1 (VM.Standard.A1.Flex)」がリージョンによっては作成が出来ないので、インスタンスの自動取得を行うのと、成功時のメール通知ができるようにします。

 

OCIのコンソールからインスタンス作成を行おうとすると、選択されているリージョンによっては下記のエラーが発生し、インスタンスの作成ができません。
Tokyo および Osaka リージョンではAmpere A1はキャパ不足しているのが原因です。

 

概要

以下の流れでAmpere A1インスタンスの自動取得&メール通知を行います。

  1. 作業用(シェルスクリプト実行用)のAMDインスタンスを作成
  2. 作成したインスタンス上で、シェルスクリプト実行に必要なミドルウェア(主にOCI CLI)をセットアップ
  3. シェルスクリプトの作成&テスト実行
  4. メール通知設定
  5. シェルスクリプトをバックグラウンドで実行できるようtmuxをインストール
  6. tmuxセッション上でシェルスクリプトを実行

 

詳細

以降で手順の説明をします。

作業用インスタンスを作成

まず作業用のインスタンスが必要です。すぐに作成できるAMDインスタンス(ex: VM.Standard.E4.Flex)をOCIコンソールから作成します。
ちなみにこのインスタンスは作業用として使用するので、スペック等は何でも良いです。
OSはOracle Linux 9を使って説明します。

OCI CLI のセットアップ
  1. 上記で作成したインスタンス上でOCI CLIをインストール
    公式ドキュメント:https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/cliinstall.htm#InstallingCLI__oraclelinux9

    # 事前にパッケージを最新化
    [opc@test1 ~]$ sudo dnf update
    
    # oci cli のインストール
    [opc@test1 ~]$ sudo dnf -y install oraclelinux-developer-release-el9
    [opc@test1 ~]$ sudo dnf install python39-oci-cli
  2. OCI CLI の認証情報を設定
    下記の流れで認証情報を設定します。

    [opc@test1 ~]$ oci setup config
        This command provides a walkthrough of creating a valid CLI config file.
        The following links explain where to find the information required by this
        script:
    
        User API Signing Key, OCID and Tenancy OCID:
    
            https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#Other
    
        Region:
    
            https://docs.cloud.oracle.com/Content/General/Concepts/regions.htm
    
        General config documentation:
    
            https://docs.cloud.oracle.com/Content/API/Concepts/sdkconfig.htm
    
    
    Enter a location for your config [/home/opc/.oci/config]: [そのままEnter]
    Enter a user OCID: [自分のプロファイル > 表示されたOCIDを入力]
    Enter a tenancy OCID: [テナンシ > 表示されたOCIDを入力]
    Enter a region by index or name(e.g.
    1: af-johannesburg-1, 2: ap-chiyoda-1, 3: ap-chuncheon-1, 4: ap-dcc-canberra-1, 5: ap-hyderabad-1,
    6: ap-ibaraki-1, 7: ap-melbourne-1, 8: ap-mumbai-1, 9: ap-osaka-1, 10: ap-seoul-1,
    11: ap-singapore-1, 12: ap-sydney-1, 13: ap-tokyo-1, 14: ca-montreal-1, 15: ca-toronto-1,
    16: eu-amsterdam-1, 17: eu-dcc-dublin-1, 18: eu-dcc-dublin-2, 19: eu-dcc-milan-1, 20: eu-dcc-milan-2,
    21: eu-dcc-rating-1, 22: eu-dcc-rating-2, 23: eu-frankfurt-1, 24: eu-madrid-1, 25: eu-marseille-1,
    26: eu-milan-1, 27: eu-paris-1, 28: eu-stockholm-1, 29: eu-zurich-1, 30: il-jerusalem-1,
    31: me-abudhabi-1, 32: me-dcc-muscat-1, 33: me-dubai-1, 34: me-jeddah-1, 35: mx-queretaro-1,
    36: sa-santiago-1, 37: sa-saopaulo-1, 38: sa-vinhedo-1, 39: uk-cardiff-1, 40: uk-gov-cardiff-1,
    41: uk-gov-london-1, 42: uk-london-1, 43: us-ashburn-1, 44: us-chicago-1, 45: us-gov-ashburn-1,
    46: us-gov-chicago-1, 47: us-gov-phoenix-1, 48: us-langley-1, 49: us-luke-1, 50: us-phoenix-1,
    51: us-sanjose-1): 9 ※大阪リージョンの場合
    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 ※Y固定
    Enter a directory for your keys to be created [/home/opc/.oci]: [そのままEnter]
    Enter a name for your key [oci_api_key]: [そのままEnter]
    Public key written to: /home/opc/.oci/oci_api_key_public.pem
    Enter a passphrase for your private key (empty for no passphrase): [そのままEnter]
    Private key written to: /home/opc/.oci/oci_api_key.pem
    Fingerprint: **:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**
    Config written to /home/opc/.oci/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
    
    
    
Ampere A1インスタンス接続用の公開鍵/秘密鍵の作成

作成予定のAmpere A1インスタンスにSSHログインするために必要な公開鍵/秘密鍵を事前に作成します。

[opc@test1 ~]$ ssh-keygen -b 2048 -t rsa -f ~/.ssh/instance_id_rsa -C ""
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): [そのままEnter]
Enter same passphrase again: [そのままEnter]

 

公開鍵/秘密鍵は ~/.ssh/instance_id_rsa~/.ssh/instance_rsa.pub として作成されます。

Ampere A1インスタンス自動作成シェルスクリプトの作成

以下のシェルスクリプト getAmpereInstance.sh を作成します。

#!/bin/bash

# Set the desired compartment OCID
export COMPARTMENT_OCID=<your_compartment_ocid>

# Set the desired shape (Ampere A1 Compute shape)
export SHAPE=VM.Standard.A1.Flex

# Set the desired availability domain
export AVAILABILITY_DOMAIN=<availability_domain>

# Set the desired instance name
export INSTANCE_NAME=<your_instance_name>

# Set the desired image-id
export IMAGE_ID=<image_id>

# Set the desired subnet-id
export SUBNET_ID=<subnet_id>

# Create an Ampere A1 Compute instance
oci compute instance launch \
  --availability-domain $AVAILABILITY_DOMAIN \
  --compartment-id $COMPARTMENT_OCID \
  --shape $SHAPE \
  --shape-config '{"ocpus":2, "memory_in_gbs":12}' \
  --display-name $INSTANCE_NAME \
  --hostname-label $INSTANCE_NAME \
  --image-id $IMAGE_ID \
  --subnet-id $SUBNET_ID \
  --assign-public-ip true \
  --assign-private-dns-record true \
  --ssh-authorized-keys-file ~/.ssh/instance_id_rsa.pub

シェルスクリプト説明
それぞれの設定値については以下のコマンドでの実行結果から指定します。

COMPARTMENT_OCID$ oci iam compartment list | jq -r '.data[]."compartment-id"'
AVAILABILITY_DOMAIN$ oci iam availability-domain list | jq -r '.data[].name’
—shape-configここでは 2OCPU / 12GB MEM としています
IMAGE_IDUbuntu 22.04 の場合、 $ oci compute image list --operating-system "Canonical Ubuntu" --operating-system-version "22.04" --compartment-id <コンパートメントID> から出力されたIDを指定
SUBNET_ID$ oci network subnet list --compartment-id <コンパートメントID> | jq -r '.data[].id'

 

作成後はパーミッションを変更します。

[opc@test1 ~]$ sudo chmod 755 getAmpereInstance.sh

 

動作確認のため作成したシェルスクリプトをテスト実行します。
実行結果としてはほとんどの場合、下記のように「500 Out of host capacity」のエラーが返ってくるが実行としてはうまくいっているので問題はありません。

[opc@test1 ~]$ ./getAmpereInstance.sh
ServiceError:
{
"client_version": "Oracle-PythonSDK/2.93.1, Oracle-PythonCLI/3.23.2",
"code": "InternalError",
"logging_tips": "Please run the OCI CLI command using --debug flag to find more debug information.",
"message": "Out of host capacity.",
"opc-request-id": "EC*****",
"operation_name": "launch_instance",
"request_endpoint": "POST https://iaas.ap-osaka-1.oraclecloud.com/20160918/instances",
"status": 500,
"target_service": "compute",
"timestamp": "2023-12-30T11:46:58.554327+00:00",
"troubleshooting_tips": "See [https://docs.oracle.com/iaas/Content/API/References/apierrors.htm] for more information about resolving this error. If you are unable to resolve this issue, run this CLI command with --debug option and contact Oracle support and provide them the full error message."
}

確認ができたら Ctrl+c で処理を停止させます。

 

次に、Ampereインスタンスの作成成功時にメール通知を送る設定を行います。

コメント

* が付いている欄は必須項目です。