Oracle Cloudが永遠に無料らしいので開発環境を作ってみたかった (準備編)

Oracle Cloud Infrastructure(OCI)において「Always Free」という何かよさげなサービスが始まったらしいので、じゃあせっかくだしタダで開発環境を手に入れようという記事です。

開発環境としては、とりあえずAPサーバとDBサーバが1台ずつできて、APサーバからDBサーバにSQLを投げたらちゃんと結果が返ってくることを目指します。

今回は準備編と言いつつアカウント管理の話がメインなので、とりあえず速攻で使ってみたいという人は、環境払い出し後、即座にDBサーバ編に進んでいただいて問題ないと思います。

1. 準備編 <- いまここ
2. [DBサーバ編](https://qiita.com/mokkan/items/0dea4a2f35ed4d28e167)
3. [ネットワーク編](https://qiita.com/mokkan/items/ffb5bae17edce8e563be)
4. [APサーバ編](https://qiita.com/mokkan/items/875b666de20ab96b4b2e)

## 準備編の流れ
今回は準備編ということで、以下の流れで進めていこうと思います。

1. まず最初に、OCIを利用し始めるまでの流れを書きます
1. 次に、OCIのアカウント管理の仕組みについても見ていきます
1. 最後に、OCI上のDBやVMの配置先を分割する、Compartmentという仕組みについて述べます

Compartmentはざっくり直訳で「区画」です。配置先の論理的な区画を分けるんだなあというようなイメージを持っていただければほぼほぼ間違いないです。

## 利用開始
では早速ですが利用開始です。
手続きは簡単で、環境も一瞬で払い出されました。
地味に注意する点は、電話番号を指定するときに先頭の0を除かなければならないことです。(`+81-<先頭の0を除いた携帯番号>`)

### 利用開始手順
1. クレジットカードとSMSが受信可能な携帯電話を用意します
2. https://www.oracle.com/jp/cloud/free/ にアクセスします
3. 「start for free」をクリックします
4. 画面の指示に従って入力していると気が付けば環境が降ってきます

### ログインについて
上記の手順を済ませると、気が付けばそのままOCIの管理コンソールにログインしています。
管理コンソールのURL: https://console.ap-tokyo-1.oraclecloud.com/

なのでもうすでに使用する準備は完了しているのですが、とはいえ前提知識なしで進めると若干アカウント管理について混乱しやすいポイントがあるため、多少の解説を行いたいと思います。

## OCIのアカウント管理について
混乱するポイントとは、実はOCI上で使用できるアカウントが2種類あることによります。
具体的には、OCI上には下記の2種類のユーザが存在し、それぞれログイン方法が異なります。

* IDCS(後述)で作成されて、OCIに連携されているユーザ
* OCIで直接作成されたユーザ

まずはこの2つの違いについて説明します。

### Identity Cloud Service(IDCS)
というわけで早速ですがIDCSとは何かという話です。
話は単純で、IDCSとはOracle Cloudで提供されているID管理サービスです。

「ID管理サービス」というものについて多少補足します。
このサービスは、簡単に言えばユーザのアカウントを管理するためのサービスになります。
ID管理サービスの利点として、他のさまざまなサービスに認証情報を連携でき、ID管理サービスでログインさえしていれば、連携している他のサービスでは個別に認証することが不要になるということがあります。
(シングルサインオン(SSO)と呼ばれる機能です)

例えばIDCSでは、IDCSに対して認証処理(ユーザ名/パスワード)を行えば、OCIを含めたIDCSと連携しているサービスすべてにログインできるようになります。

このIDCSで作成されて、OCIに連携されているユーザが1つ目のユーザになります。

### OCIユーザ
2つ目のユーザは、OCIで直接管理しているユーザです。
このユーザはOCIで認証処理を行いそのままログインします。

### デフォルトで作成されるユーザについて
ここまでの話で、では最初に払い出されるユーザはどちらのユーザなのかという疑問が発生すると思います。実は割と親切で、両方のアカウントが自動的に作成されて払い出されます。

![01-1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512576/ed331087-c8bc-2241-3624-3598b5bed6a6.png)

とはいえ無意識に両方を混ぜて使用してしまうと、ふとした時になかなかに混乱すると思われるので、2つのアカウントの違いを理解したうえで、それぞれきちんと個別に管理することを推奨します。
(それぞれ完全に別のサービスで管理されているので、パスワードリセットの手順等も異なります)

#### どちらを使えばよいのか
これらを踏まえた上でどちらのユーザを使うのがよいかについてです。
結論から言えば、OCIだけを使っている限りはどちらをつかっても大丈夫です。

ただ、以下の違いにより基本的にはIDCSユーザを推奨します。

* OCIユーザはOCI内部で閉じたユーザであり、OCI以外のサービスにアクセスできない
* IDCSユーザは、OCIを含めたIDCSと連携しているサービスすべてで使用できる

しかし、今回のテーマである「OCI上にAlways Freeで開発環境構築」という観点には全く影響しないので、とりあえずは好みで使っていただいて問題ありません。

### ログイン方法の違いについて
アカウント管理の最後に、ログイン方法の違いについても述べておきます。
これについてはまったく難しいことはなく、下記のログイン画面で、IDCSと連携したユーザは左からログインして、OCIで作成されたユーザは右からログインします。
(画面表示にそのまま従えば問題ないです)

![01-2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512576/88dadb2a-7292-4138-2a2c-bf2b53a677f5.png)

アカウント管理に関する説明は以上になります。

## Compartment
準備編の最後はCompartmentの説明です。
Compartmentは文字通りOCI上に作成する「区画」で、最初はrootのCompartmentが1つあるだけです。この配下にいくつかのCompartmentを作成して、その中にDBやVMなどを配置することができます。
(ManagedCompartmentForPaaSという名前のCompartmentも最初から存在しますが、これはOracleが管理しているCompartmentです)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512576/9cc6f175-69e9-20c4-dbe2-246874e2b043.png" width="30%">

このCompartmentという仕組みが存在することの何がうれしいかですが、単純にユーザごとや組織ごとの権限の制御が行いやすくなるという点があります。
仮に複数のユーザで同じ環境を使用していた場合に、あるユーザにはこのCompartmentの中を見れるようにしたいけど、こっちのCompartmentの中身は見せたくない等の権限の設定が簡単になります。

今回は個人で使う開発環境を取得するというテーマなので、何も考えずに全部rootに作ろうと思いますが、気になる方はちゃんと開発環境用のCompartmentを作成して、その中に構築するのがよいと思います。さらに言えば、ネットワーク環境だけを別のCompartmentに構築するような構成もとてもよいです。
(ネットワーク環境に関する権限の制御が簡単になります)

とはいえ今回は気にせずrootに作ります。(再掲)
ざっくりではありますが、Compartmentに関する説明は以上です。

準備編と言いつつ実態はほぼほぼアカウント管理の説明になってしまいましたが、一応これでOCIを使い始める準備は完了です。
次回は[DBサーバ編](https://qiita.com/mokkan/items/0dea4a2f35ed4d28e167)として、実際にAutonomous Databaseをデプロイしてみようと思います。