【OCI】初心者がOracle Cloudのアカウントを作ってサーバを起動する【ハンズオン】

# はじめに

記念すべき**[KDDI Engineer&Designer Advent Calendar 2021](https://qiita.com/advent-calendar/2021/engineer-designer)**の1日目の記事です。
今回は、Oracle Cloud Infrastructure（通称：OCI）を紹介したいと思います。

OCIとは、AWS、Microsoft Azure、Google Cloudと同様にパブリッククラウドのサービスの1つです。
2012年頃からOCI自体は存在していましたが、2018年のGeneration 2 Cloudとして新しいアーキテクチャ・コンセプトで再構築されました。
2021年時点において、OCIと言えばGeneration 2 Cloudを指すと考えて頂いてよいです。
ただ、AWS、Azure、Google Cloudという3つのクラウドに比べれば、後発ということもあり、知名度やシェアはやや劣る状況ではあります。

とはいえ、日本企業だと相変わらずOracle Databaseを使っているエンタープライズシステムは多いですし、Oracle RAC（Real Application Clustersの略。複数台で冗長構成をとりつつ、負荷分散もできるOracleのアーキテクチャ）を組んでいるシステムも多いでしょう。
AWSだと、Oracle Databaseは使えても、RACは組めない（サポートされない）ので、レガシーなシステムをなるべくアーキテクチャを変えずにクラウドに移行したいといった場合に、OCIは候補としてよくあがります。

ということで、OCI初心者（他のクラウドは使ったことあり）が、OCIのアカウントを作成して、サーバを起動し、SSHで接続するところまでをハンズオン形式で紹介していきたいと思います。

# OCIの料金

ハンズオンに入る前に、OCIの料金について述べたいと思います。

### OCIの無料枠

OCIは**[Always Free Cloud Services](https://www.oracle.com/jp/cloud/free/)**というものがあり、**サーバ数台レベルであれば、期間の制限なく無料で使い続けることが可能**です。
Google Cloudでも一部のUSリージョンでは無料でサーバが使えたりしますが、OCIはより太っ腹です。国内の東京リージョンでも使えます。
なので、**個人でちょっとしたシステムを作ったりするのにもOCIは向いています。**

2021年11月時点で、以下のものが期間の制限なく無料で使えます。

> 1/8 OCPUと1 GBメモリをそれぞれ備えた2つのAMDベースのコンピュートVM。
1つのVMまたは最大4つのVMとして使用可能な4つのArmベースのAmpere A1コアと24 GBのメモリ。2つのBlock Volumeストレージ、合計200 GB。
10 GBのObject Storage。
10 GBのArchive Storage。
Resource Manager：マネージドTerraform。
5つのOCI Bastion。

上記以外に、データベースのサービスも無料で使えたりします。かなりよいです。

加えて、アカウントを作成してから30日間使える300ドル分のクレジットも付与されます。

### OCIとAWSのコスト比較

OCIは無料枠が充実しているのに加え、価格面でもAWSなどの他クラウドと比較してやや安く設定されています。
例えば、おおよそ同等スペックのLinuxサーバを1ヶ月（30日）稼働させた場合を比較すると、

- **AWS：m5.xlarge(4vCPU、16GBメモリ)　178.56ドル**
- **OCI：Standard-E4(2 OCPU、16GBメモリ)　99ドル**

となります。OCIが優位です。
ちなみに「1 OCPU」というのがどれくらいのスペックなのか調べたところ、[OCIの価格表のページ](https://www.oracle.com/jp/cloud/price-list.html#compute-vm)に以下の記載を見つけました。

> 1 OCPU on x86 CPU Architecture (AMD and Intel) = 2 vCPUs

ということなので、AWSなどと比較するときは「1 OCPU = 2 vCPU」と考えればよさそうです。

なお、OCIの他のサービスについても調べたい場合は、**[OCI費用見積もりツール](https://www.oracle.com/jp/cloud/cost-estimator.html)**を使うとよいです。

# OCIアカウントの作成

ここからハンズオン形式です。

まずは**[OCIのトップページ](https://www.oracle.com/jp/cloud/)**を開きます。
「Oracle Cloudを試す（無償）」とあるので、とりあえずお金はかからず試すことができます。

Webサイトから進めていくと、入力フォームが出てきましたのでこれを埋めましょう。

![01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/044664e3-069c-6dbc-f4cf-c54aecc24fa6.jpeg)


「電子メールの検証」をクリックすると、メールが飛んできますので、ここから先に進めます。

<img width="500" alt="02.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/527eef33-eff9-64c2-22cb-9830825f303f.jpeg">


次にパスワードや会社名を入力します。
なぜか**「optional」となっていても入力しないと次に進めない項目があった**のでひととおり全部埋めるとよいです。
「クラウド・アカウント名」は「テナンシ名」とも呼ばれます。
初期状態だとメールアドレスの＠より前の部分が入力されているのですが、結構重要なので**ちゃんと考えて命名**しましょう。ちなみに記号は使えないようです。
今後、**OCIのコンソールにログインするときにクラウド・アカウント名（テナンシ名）は入力が必須**になります。
一応、[後から変更は可能](https://docs.oracle.com/ja-jp/iaas/Content/General/Concepts/renamecloudaccount.htm)です。

「ホーム・リージョン」は「ap-tokyo-1（東京）」にしておくのが無難だと思います。日本国内だと「ap-osaka-1（大阪）」も選べます。

<img width="500" alt="03.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/59946ce8-205e-b2a1-ac62-93e1c28a267d.jpeg">

ここでは住所や電話番号を入力します。終わったら「続行」を押します。

![04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/233eee61-c6bd-bf53-1496-478995fe0811.jpeg)

「支払検証方法追加」を押すと、クレジットカード情報の入力を求められます。
無料枠の中で使うにしても、**クレジットカード情報の入力は必須**です。
私の場合、クレジットカードの有効性確認のオーソリで、一時的に120円が引き落とされ、即時返金されました。

認証できたら、同意の部分のチェックボックスが有効になりますので、チェックして「無料トライアルの開始」を押しましょう。

# OCIのコンソール画面

コンソール画面が開きました。
とりあえず日本語設定にして進めていきたいと思います。

![console_eng.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/e2569922-ba05-3864-02b1-9f42b999b4c1.jpeg)

アカウントを作ってすぐは「アカウントは現在設定中で、一部の機能は使用できません。設定が完了すると、電子メールが届きます。」と表示されるので、少し待つ必要があります。
10分後くらいに、アカウント作成が完了した旨と$300のクレジットが付与された旨のメールがきました。

```
Your account is now fully set up!
You have ¥33,000 in credits that you can use towards any Oracle Cloud services for the next 30 days.
Learn more about Oracle Cloud services 
```

これで、OCIを使う準備が整いました。
なお、アカウントをアップグレードしない限りは、無料枠および$300のクレジットの利用に限定されるため、**意図せずOCIに課金されてしまうことはない**ようです。
ちなみに私は**AWSでもAzureでもGoogle Cloudでも意図せず課金されてしまった経験がある**ので、これは安心できます。
1点覚えておくべきこととして、例えばOracle Cloud Functions（AWSでいうLambda相当）などは最初の200万回の呼び出しは無料で使えたりします。
ただし、これらは**アカウントをアップグレードしないと無料枠も利用できない**ので注意が必要です。

# サーバを起動する

ここからはサーバ（＝インスタンス）を1台起動してみます。
まずは、「コンピュート＞インスタンス」の画面に遷移します。
**AWSでいう「EC2」のことを、OCIでは「コンピュート」**と呼びます。

![instance.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/08fb4183-94be-c8de-7e61-f9305d703725.jpeg)

次に「インスタンスの作成」をクリックします。

![instance02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/4ef7a581-1739-b034-3bbd-a09373302827.jpeg)


### 名前・コンパートメント

![instance03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/bb729aea-258d-2b6e-63be-49e06c394e38.jpeg)


「名前」はその名のとおりサーバにつける名前です。これがホスト名になりますので、わかりやすい名前をつけましょう。
「コンパートメント」はOCI特有の概念です。詳細は**[「コンパートメントの管理」](https://docs.oracle.com/ja-jp/iaas/Content/Identity/Tasks/managingcompartments.htm)**あたりを参考にするとよいと思いますが、コンパートメント内にサーバなどのリソースを作成することで、論理的に分割することができます。
AWSだとコンパートメントに相当するものはないですが、Azureだと**「リソースグループ」に相当するもの**と考えるとよいです。
例えば

- サブシステムごとにコンパートメントを分ける
- 本番環境、開発環境でコンパートメントを分ける
- 利用する部署ごとにコンパートメントを分ける

といった形や、上記の複数の組み合わせで使うことが想定されます。
ちなみにIAMユーザーはコンパートメント外に作るリソースになります。IAMユーザーにコンパートメントへのアクセス権を与えることで、コンパートメント内のリソースを操作できるようにします。

デフォルトではrootコンパートメントのみ作成されてます。「テナンシ＝rootコンパートメント」と考えてよいと思います。
ここでは、あまり難しいことは考えず、デフォルト（＝root）のコンパートメントにサーバを立てることにします。

左下の「作成」をクリックするだけで、サーバを作成・起動することはできるのですが、もう少し詳細にみていきます。

### 配置

![haichi.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/da123e24-5098-e2db-84ae-376de3e7829e.jpeg)

「可用性ドメイン」はAvailability Domain（通称：AD）とも呼ばれます。AWSでいうAvailability Zone(AZ)だと思ってください。
しかし、OCIの東京リージョンに可用性ドメインは1つしかありません。そのため**OCIではマルチAD（≒マルチAZ）構成は組めません。**
代わりに、フォルトドメイン（通称：FD）という概念がOCIにはあります。
フォルトドメインは可用性ドメイン内のハードウェアグループで、東京に3つあります。
つまり、OCIでは**マルチFD構成にすることが可用性を高めるために必要**です。
詳しくは**[「リージョンおよび可用性ドメイン」](https://docs.oracle.com/ja-jp/iaas/Content/General/Concepts/regions.htm)**に記載があります。

ここでは、どこのFDにサーバを立てるかはOCIに任せます。

容量タイプは、ここでがデフォルトの「オンデマンド容量」を選択します。
他のオプションとの違いは**[「Computeサービスの概要」](https://docs.oracle.com/ja-jp/iaas/Content/Compute/Concepts/computeoverview.htm)**に記載されてます。



### イメージとシェイプ

![image_shape.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/484994d0-245d-eea9-006f-97f68cf9c748.jpeg)

#### イメージ

「イメージ」はOSの種類・およびバージョンです。
デフォルトではOracle Linuxが選択されていますが、「イメージの変更」をクリックすると、UbuntuやCentOS、Windowsなんかも選べます。

![os.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/e4ae142a-28af-2893-0f50-c53d7f64eefc.jpeg)


**Oracle LinuxはRed Hat Enterprise Linux (RHEL)がベースとなっているLinuxディストリビューション**です。
RHEL系ですのでyumとかでパッケージ導入もできます。
なお、**WindowsはAlways Free対象ではない**です。

#### シェイプ

「シェイプ」はインスタンスのスペックを選択でき、CPUのコアやメモリなどを選択できます。

![shape.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/3108e89f-f12d-16f0-5077-afdbaa4004d9.jpeg)


Always Free対象だとそんなに選択肢がないので、ここではAMDのVM.Standard.E2.1.Micro（1 OCPU、1GBメモリ）を選択します。


### ネットワーキング

本来であれば事前にネットワークは作っておいたほうがいいですが、サーバを作成する際に同時に作成することも可能です。

![network.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/df64d199-339a-1ab5-6137-57382bdbc62c.jpeg)

デフォルト設定だと、「10.0.0.0/16」のVCN（AWSでいうVPC）、「10.0.0.0/24」のサブネットが作成されます。
今回はこのまま作成します。
「パブリックIPv4アドレスの割当て」についても今回はしておきましょう。

### SSHキーの追加

![ssh.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/c82b6353-198b-ab91-6893-4f8fd67f9734.jpeg)

あとでサーバにSSH接続するときに使用するので、秘密キー、公開キーはローカルに保存して、なくさないようにしましょう。

### 作成

他にも細かい設定はいろいろありますが、左下の「作成」ボタンを押しましょう。
しばらくすると、サーバが起動します。

![kidou.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/fcc5365d-a4ef-f2aa-ff08-60d73995988e.jpeg)

ちなみにブートボリュームは47GBもあります。

![volume.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/4af8fc59-05ef-3747-cfe8-c8650423ba5d.jpeg)

# SSHで接続

サーバが起動したので、SSHで接続します。
私は[RLogin](https://kmiya-culti.github.io/RLogin/)が好きなのでそれでやりますが、[PuTTY](https://www.putty.org/)でも[OpenSSH](https://docs.microsoft.com/ja-jp/windows-server/administration/openssh/openssh_install_firstuse)でも構わないです。

RLoginをPCに入れたら、サーバへの接続設定をします。

![rlogin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/ca115694-1dbd-2c66-0b08-60af119967dd.png)


「エントリー上」は任意の名前でよいのですが、わかりやすくホスト名を入れます。
「ホスト名（サーバーIPアドレス）」の部分に、OCIのコンソール上に表示されるパブリックIPアドレスを入れます。
**「ログインユーザー名」は、Oracle LinuxとCentOSの場合「opc」**になります。
ちなみに、Ubuntuだと「ubuntu」です。
Windowsでも、リモートデスクトップ接続する場合は「opc」になるようです。
詳しくは**[「インスタンスへの接続」](https://docs.oracle.com/ja-jp/iaas/Content/Compute/Tasks/accessinginstance.htm)**に書かれています。
あとは「SSH認証鍵」でさきほどダウンロードした秘密キーを読み込ませます。
これで準備完了です。

下記のようにサーバにSSHで接続できました。
![terminal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/62afac30-bcdb-7bf6-34ea-a8e8da61582e.png)



# さいごに

ひとまずOCIのアカウントを作成して、サーバを起動し、SSH接続するまでをまとめてみました。
ということで、まずは無料枠の範囲でもう少しいろいろやってみたいと思います。

### 追記

OCIの入門レベルの試験を受けたので記事にしました。

- **[【体験記】Oracle Cloud Infrastructure Foundations 2021 Associate試験（日本語）に合格しました！](https://qiita.com/hamham/items/e4ae90b87eb0180df847)**