OCI (Oracle Cloud Infrastructure) で VM インスタンスを作成する

OCI は Oracle 社が提供しているクラウドサービスです。

OCI (Oracle Cloud Infrastructure)

OCI には Always Free(永久無料枠) という非常に強力な特典があり、4 OCPU / 24 GB メモリ という、他社クラウドであれば有料級のハイスペックな Arm サーバー(Ampere A1)を無料で 24時間365日動かすことができます。

OCI のコンピュート環境:VM とコンテナインスタンスの違い

OCI でアプリケーションを動かすアプローチとして、主に 「VM Compute(仮想マシン)」「コンテナインスタンス(Container Instances)」 の 2つがあります。

どちらも Docker コンテナを動かせますが、その管理レイヤーと仕様には明確な違いがあります。

比較項目VM Compute (仮想マシン)コンテナインスタンス
管理の単位OS(Linux / Windows)コンテナ(Dockerイメージなど)
インフラ管理必要(OSアップデート、SSH管理)不要(サーバーレス。オラクルが基盤を管理)
起動スピード数分(OSのブート時間必要)数秒(コンテナの起動のみ)
永続ストレージブロック・ボリュームを自由に追加・マウント可能エフェメラル(一時的。再起動でデータ消滅)
永久無料枠あり(4 OCPU / 24 GBメモリまで無料)なし(秒単位の従量課金)

どちらを選ぶべきか?

コンテナインスタンスはサーバーレスで運用が手軽ですが、永久無料枠(Always Free)の対象外となります。また、コンテナの再起動によって内部のデータが消去される特性を持ちます。

そのため、「24時間いつでも無料で動かし続けたい」「生成されるログやデータをローカルディスクに安全に保持(永続化)したい」という場合は、VM Compute を選択するのが最適です。

OCI への登録

https://www.oracle.com/jp/cloud/free/ にアクセスして「無料で始める」をクリックして各種情報を入力します。
ちょっとした注意事項として、住所は英語で入力する必要があります。

参考

インスタンスの作成

ホームより インスタンス を選択します。

ホームにない場合は、左上のメニューから コンピュート > インスタンス でも OK です。

続いて インスタンスの作成 を選択します。

基本情報

イメージ

デフォルトでは Oracle linux になっています。
Oracle Linux は Red Hat Enterprise Linux(RHEL)をベースにした OS だそうです。

セキュリティの「保護インスタンス」は、仮想マシン(VM)の乗っ取りや、悪意のあるプログラムによるOS改ざんを防ぐための「セキュリティ強化機能が有効になっている状態」を指すそうですので、保護インスタンスになっているものを選択しておいたほうが良さそうです。

シェイプ

Always Free 対象のものとして以下の2つがあります。

項目Ampere (A1.Flex)AMD (E2.1.Micro)
最大リソース4 OCPU / 24 GB(分配可能)1 OCPU / 1 GB × 2台
アーキテクチャArm (aarch64)x86_64
主な用途開発環境、Docker、高負荷な処理、Webサーバー軽量なスクリプト実行、VPNサーバー、検証用

VM.Standard.A1.Flex

現在OCIで提供されている中で最もハイスペックかつ使い勝手の良い無料枠インスタンスです。
Ampere を選択し、VM.Standard.A1.Flex をチェックします。

シェイプ名横の ▼ を押すと CPU と RAM の設定ができます。

「4 OCPU / 24 GB」までは無料で使えるらしいです。

VM.Standard.E2.1.Micro

Ampere A1 は人気のため、空きがなくて作成できないことが多いです。
また、システムが Arm(Aarch64)アーキテクチャに対応しておらず、どうしても従来の x86_64 環境が必要な場合もあったりします。
そのような場合はこちらを選びます。
ただし、スペックは Ampere A1 に比べて大幅に低くなります。

専門と前世代 を選択し、VM.Standard.E2.1.Micro をチェックします。


上記のうち好きな方を選び、次へを押します。

セキュリティ

保護インスタンスの設定ができますが、予期せぬエラーや「動かない」トラブルの原因になりやすいそうなので、今回は OFF のままとしました。

ネットワーキング

プライマリVNIC

初めて OCI を使うので、まだ「既存のネットワーク」が存在しないため、新しく 新規仮想クラウド・ネットワーク を選択します。 サブネットも自動的に 新規パブリック・サブネットの作成 に切り替わり、名前などが自動入力されます。

2回目は既存のネットワークを選択すれば OK です。

パブリックIPv4アドレス割当て

今回は外部からの通信(インバウンド)を受ける必要はないため、 パブリックIPv4アドレスの割当てOFF にしておきました。

SSHキーの追加

キー・ペアを自動で生成 を選択し、秘密キーのダウンロード を押して秘密鍵をダウンロードしておきます。

📝 注記

SSH キーなしを選択すると、後述するように Cloud Shell からもインスタンスにアクセスできませんでした。 外部から SSH でアクセスする予定がなくても SSH キーは作成しておかないといけないようです。

ストレージ

ここは全てデフォルトのままとしました。

「カスタム・ブート・ボリューム・サイズ…」について チェックがOFF(デフォルト)の場合、標準サイズである 46.6 GB のディスクが自動で割り当てられます。
OCIの無料枠では最大で合計200GBまでストレージが使え、ここにチェックを入れて数値を 100 や 200 に増やすことも可能です。
ただ、後からでもディスクサイズは簡単に拡張できるため、最初はデフォルトのままで様子見するのが安全です。

「転送中暗号化の使用」について デフォルトでONになっていますが、これは「仮想マシンとストレージの間の通信を暗号化して盗聴を防ぐ」というインフラ側の高度な保護機能です。
パフォーマンスへの影響も無視できるレベルですので、ON(今の状態)のままにしておきましょう。

「自分が管理するキーでこのボリュームを暗号化」について チェックがOFF(デフォルト)の場合、Oracleが管理する標準の暗号鍵で自動的にディスクが暗号化されます。
個人開発で自前の鍵管理(Vault/KMSなど)を入れると管理コストが増えて複雑になるため、OFFのままで問題ありません。

作成

次へ進み、「作成」 を押すとインスタンスが作成されます。
しばらく待つとインスタンスが作成されます(ステータス表示が 実行中 に変わります)。

API エラーが発生した場合

これは設定の間違いではなく、「現在、Oracleのデータセンター側で、無料枠用のArmサーバー(Ampere)の在庫が一時的に切れている」 という、OCIの無料枠で最も頻繁に発生する有名な現象です。
世界中で無料枠のAmpereは非常に人気があるため、椅子取りゲームのようになっています。

解決策は以下です。

1:x86の「AMD枠」に切り替えて即時作成する(確実・おすすめ)

Arm(Ampere)の在庫がなくても、もう1つの無料枠であるAMD(VM.Standard.E2.1.Micro)であれば、在庫に余裕がありすんなり作成できるケースが非常に多いです。

2:「フォルト・ドメイン」を変更して再トライする

同じAmpere(Arm)のまま、サーバーが置かれる物理的な区画(フォルト・ドメイン)を変更することで、運よく在庫が引っかかることがあります。

3:数日〜数週間、時間を変えてクリックし続ける

どうしても強力な「Arm(4 OCPU / 24 GBを狙いたいなど)」が良い場合、誰かがインスタンスを削除して在庫が空くのを待つことになります。

インスタンスの起動

コンピュートの画面から インスタンス を選択し、該当のインスタンスをクリックします。

右上から起動を押します。

これでしばらく待つとインスタンスが起動します。

インスタンスへ接続(Cloud Shell で接続)

OCI 上から Cloud Shell でインスタンスに接続してみます。

Cloud Shell の起動

画面右上の 開発者ツール をクリックし、Cloud Shell を選択します。

画面下に端末が表示されますが、まだインスタンスの中には入っていません。
Cloud Shell が単体で起動しただけです。

ネットワークの変更

端末上部の「ネットワーク:パブリック」と表示されたプルダウンから「エフェメラル・プライベートネット・・・」を選択します。

インスタンス作成時に作成した VCN とサブネットを選択し、アクティブなネットワークとして使用 を押します。

秘密鍵ファイルのアップロード

先程ダウンロードした秘密鍵ファイルを端末上にドラッグ&ドロップしてアップロードします。

Linux のルールとして、秘密鍵の権限が緩いままだとSSH接続が拒否されてしまうため、以下のコマンドでパーミッションを変更します。 (※ファイル名はご自身のものに書き換えてください)

chmod 600 ssh-key-xxxx.key

SSH コマンドでログインする

以上で準備は完了です。
以下のコマンドで Cloud Shell インスタンスへと接続します。

ssh -i ssh-key-xxxx.key <username>@<private_ip_address>

<username> は、インスタンスのデフォルトのユーザー名です。
Oracle Linux および Redhat Enterprise Linux 互換イメージの場合、デフォルトのユーザー名は opc、Ubuntu イメージの場合、デフォルトのユーザー名は ubuntu だそうです。

<private_ip_address> は接続先インスタンスのプライベートIPアドレスです。
コンピュート > インスタンス で確認できます。10.0.x.x のような数字を入れてください。

コマンド入力後、Are you sure you want to continue connecting (yes/no)? と聞かれたら、 yes と入力してEnterを押します。

無事にプロンプトが <username>@instance-xxxx:~$ に切り替われば、インスタンスに接続できています。


とりあえずはここまで。

参考

Hugo で構築されています。
テーマ StackJimmy によって設計されています。