OracleCloudInfrastructure 学習記録

# 1.Oracle Cloud Infrastructureとは

![oracle-cloud-infrastructure3345.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588701/a68e63b6-6851-fead-f378-1b6c53fb52e7.jpeg)

**Oracle Cloud Infrastructure**（以下OCI）とは、Oracle社が提供する**パブリッククラウドサービス**のことである。
ネットワークやコンピュート、メモリ、ストレージ、データベースなどのITインフラ環境(**Iaas**)とハードウェアやOS、ミドルウェア、ランタイムなどのサービス（**Paas**）を提供しています。

# 2.基本用語

## リージョン
![240212_OCIリージョン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588701/19b7406f-ca3d-0892-5f94-0b3695c42589.png)

リージョンとは、Oracle社が**データセンターを設置している地理的領域**のことである。
世界に23か国に46個のリージョンを設置されており、日本には東京リージョンと大阪リージョンの2つがあります。

## アベイラビリティドメイン

アベイラビリティドメイン(Availability Domains/AD)とは、**各々のリージョンに設置されたデータセンター**のことである。
1つのリージョンは、1個または3個のアベイラビリティドメインで構成されています。
同一リージョン内のアベイラビリティドメイン同士は、**低レイテンシーかつ広帯域のネットワークで相互接続**されます。
アベイラビリティドメインは**可用性ドメイン**とも呼ばれます。

## フォルトドメイン

アベイラビリティドメイン内の**ハードウェアおよびインフラストラクチャのグループ**のことである。
**同時にハードウェア障害やインスタンス停止が発生する可能性があるグループ**とも言えます。
アベイラビリティドメインごとに3つのフォルトドメインが含まれています。
3つのフォルトドメイン同士はハードウェア障害やインスタンス停止などが互いに影響しないようになっています。
フォルトドメインは**障害ドメイン**とも呼ばれます。

## レルム

レルムとは、リージョンの論理的な集合体のことです。
相互に隔離され、データを共有しません。

## テナンシ

テナンシとはクラウドアカウントのことです。
**クラウド・リソースを作成、編成および管理できる**Oracle Cloud Infrastructure内のセキュアで分離された**パーティション**とも言えます。
テナンシは単一のレルムに存在し、そのレルムに属するリージョンにアクセスすることが出来ます。

## コンパートメント

コンパートメントとは**OCI特有の概念**であり、管理者によって権限が付与された**特定のグループのみがアクセスできる関連リソース群**のことである。
1つのテナンシ内に複数のコンパートメントを作成することで、**複数のシステムの運用管理を簡単に**行うことが出来ます。
コンパートメントは、物理コンテナではなく**論理グループ**です。

## グループ

ユーザーをまとめる単位のことです。

## ポリシー

どのグループがどのコンパートメントで何が出来るかを設定するものです。

```
#ポリシーの入力例
Allow group <グループ名> to manage all-resouces in compartment <コンパートメント名>
```


## アイデンティティドメイン

アイデンティティドメインとは、ユーザーとロールの管理、ユーザーのフェデレートとプロビジョニング、Oracle Single Sign-On (SSO)構成を使用したセキュアなアプリケーション統合、およびOAuth管理を行うためのコンテナのことである。
**ID管理・認証管理**を行う役割があります。
5つの課金タイプがあり、用途によってユーザーによってタイプを変更します。

## OCID

全てのOCIリソースに割り当てられる**一意のID**のことです。
以下の構文で使用されます。
```
ocid1.<RESOURCE TYPE>.<REALM>.<REGION>.<FUTURE USE>.<UNIQUE ID>
```

* RESOURCE TYPE・・・インスタンス、ボリュームなどのリソースタイプ
* REALM・・・リソースが存在するレルム
* REGION・・・リソースが存在するリージョン
* FUTURE USE・・・将来使用するために予約されているスペースであり、現在は空白になっている
* UNIQUE ID・・・IDの一意の部分

# 3.コンピュート

![240212_OCIインスタンス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588701/2476f87f-45ce-d6e4-4522-eb7bf610a794.png)
OCIでは、仮想マシンやベアメタル・サーバーを利用することができるコンピュートサービスが利用できます。

コンピュートサービスには**VMインスタンス**と**ベアメタルインスタンス**の2種類のインスタンスタイプがあります。
用途に応じてインスタンスタイプを選択します。

## VMインスタンス

仮想マシンインスタンスのことです。
必要なリソースのサイズ(**シェイプ**)を選択してCPUとメモリを決めます。
シェイプごとにCPUとメモリは決められているが、**フレキシブル・シェイプ**を選択することで個別にCPUとメモリを設定することができます。

以下のようなケースの際に使用されます。
* 汎用的な用途業務(アプリケーションのWebサーバーなど)
* 開発用途(アプリケーションの開発)
* CPU/メモリのカスタマイズ(メモリが多く必要なソフトウェア)
* IO性能重視(データベースサーバー、書き込み性能重視のアプリケーション)

## ベアメタルインスタンス

大量のCPUや大容量メモリが必要なアプリケーションに対応できる**物理インスタンス**のことです。
VMインスタンスと比べて使用料金が高くなります。

以下のようなケースの際に使用されます。
* CPU性能/クラスタ間性能重視(ハイパフォーマンスコンピューティング)
* GPU利用(解析・機械学習・分析)

# 4.ストレージ

![240212_OCI_ストレージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588701/c0d3de28-2bb5-af7c-42f0-e73adc9f4385.png)


まず、ストレージの性能を評価するために確認すべき項目は以下の通りである。
* IOPS(Input Output per Second)・・・1秒間にどれだけの**数**のデータの書き込み/読み込みが可能かを示す値
* スループット・・・1秒間にどれだけの**データ量**の書き込み/読み込みが可能かを示す値
* レイテンシ・・・1回ごとのデータの書き込み/読み込みにかかる**遅延時間**を表す値

この章ではOCIのストレージに関する4つのサービスについて書き記します。
* ローカルNVMe
* ブロックボリューム
* ファイルストレージ
* オブジェクトストレージ

## ローカルNVMe 

ローカルNVMeとは、**コンピュートにローカル接続された超高速ストレージ**である。
下記で説明するストレージと違ってインスタンスに直接接続されているため、高い性能を発揮できます。
費用は各コンピュート・インスタンスの利用費用に含まれます。
主に以下の用途で利用されます。
* 流体力学のシミュレーションなどの膨大な計算を高速に処理する場合
* HPC

## ブロックボリューム

ブロックボリュームとは、コンピュートにリモート・アタッチされる**耐久性の高い永続高速ストレージ**である。
1つの可用性ドメイン内にて、データの複数のコピーが複数のストレージサーバーに冗長に保存されます。
必要に応じてボリュームの作成・アタッチ・接続および移動・ボリュームパフォーマンスの変更を行うことができます。
ボリュームをインスタンスにアタッチおよび接続した後は、そのボリュームを通常のハード・ドライブのように使用でき、データを失うことなくボリュームを切断して別のインスタンスにアタッチすることもできます。
主に以下の用途で利用されます。
* ソフトウェアやアプリケーションのインストール先
* データベース

## ファイルストレージ

ファイルストレージとは、拡張性・可用性に優れたネットワークファイルシステム(NFS)である。
仮想クラウドネットワーク(VCN)のベアメタル、仮想マシンまたはコンテナインスタンスからファイルストレージサービスのファイルシステムに接続し、サーバー上のストレージ領域をローカルストレージと同様にマウントして使用します。
主に以下の用途で利用されます。
* 複数のインスタンスで共有するデータの格納先
* Dockerコンテナ
* 並列分散処理

## オブジェクトストレージ

大容量データの保存に適した高耐久・低価格のストレージである。
分析データ、およびイメージやビデオなどを含む、あらゆるコンテンツ・タイプの非構造化データを無制限に格納できます。
主に以下の用途で利用されます。
* バックアップ
* アーカイブ
* コンテンツ管理
* ストリーミング

# 5.ネットワーク

この章ではOCIのネットワークに関する3つのサービスについて書き記します。
* VCN（仮想プライベートネットワーク）
* FLB（フレキシブルロードバランサ）
* NLB（フレキシブルネットワークロードバランサ）

## VCN

VCN（Virtual Cloud Network）とは、**OCI内に作成するプライベートネットワーク**である。
ユーザーが自由にカスタマイズ可能であり、オンプレミスのネットワークで実装していた構成をSDN（ソフトウェア定義ネットワーク）として実現することができます。
定義する内容として以下のものがあります。
* サブネット
* IPアドレス
* ルーティングテーブル
* ゲートウェイ
* ACL（セキュリティリスト）

## FLB

FLB（Flexible Load Balancer）とは、**外部からの通信（トラフィック）を複数のサーバーに分散するサービス**である。

![240212_OCIスケールアウト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588701/20c1caf9-dacb-adbd-64c8-837016f779d0.png)

**トラフィックを複数のサーバーに分散させる**ことで、1台のサーバーに負荷が集中することを防止しています。

<img width="470" alt="240212_OCIヘルスチェック.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588701/8aee5775-de9a-1ff0-ed63-0d072e7581ec.png">

また、バックエンドサーバーの監視を行い、**正常に稼働していないサーバーを感知した場合、そのサーバーに対するトラフィック転送を停止させる**役割も担っています。



## NLB

NLB（Flexible Network Load Balancer）もトラフィックをサーバーに送信するサービスであるが、**FLBとは違ってレイヤー7（アプリケーション層）でのバランシング機能が無い**という特徴があります。
Cookieによるセッション永続性やHTTPヘッダーによる送信先の振り分けを行う機能がついていないのである。

※セッション永続性・・・
Webアプリケーションのセッションを維持するため、同一のクライアントからのリクエストを同一のサーバーに振り分ける機能

しかし、その分**リクエストをFLBより速く処理することができる**点や、**無償サービスとしてリリースされている**という点でFLBよりも優れています。

# 6.終わりに

ここまでOCIの基本的な要素についてまとめてきましたが、まだまだ基本的な内容しかまとめられませんでした。インスタンス、ストレージ、ネットワークの詳細な説明は個別の記事を作成して行おうと思います。