OCI Cloud Shellの概要

本ブログは、[オラクル・クラウドの個人ブログ一覧 ](https://qiita.com/letian/items/10152a4fec813c1b7d98)の1つです。

# 初めに
2020年2月、<font color="blue">OCI Cloud Shell</font>がリリースされました。同年の12月、AWSもほぼ同機能の"<font color="Magenta">CloudShell</font>"をリリースしました。今回は、OCI Cloud Shellの概要を紹介します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/9ca2ed15-0da0-525f-81b2-1402523c4a43.png", width="650">

__目次__
- [1. クイック・スタート](#1-クイックスタート)
- [2. OCIの他サービズの利用](#2-ociの他サービズの利用)
  - [2-1. オブジェクト・ストレージの利用](#2-1-オブジェクトストレージの利用)
  - [2-2. Oracle DBへの接続](#2-2-oracle-dbへの接続)
  - [2-3. Autonomous DBへの接続](#2-3-autonomous-dbへの接続)
  - [2-4. MySQL DBCSへの接続](#2-4-mysql-dbcsへの接続)
- [3. インストール済のソフト](#3-インストール済のソフト)
- [4. 制限事項](#4-制限事項)
- [追記](#追記)
  - [ファイル転送機能](#ファイル転送機能)
  - [プライベート・アクセス](#プライベートアクセス)
- [FAQ（よくある質問）](#faqよくある質問)

# 1. クイック・スタート
__OCI Cloud Shellとは__
Oracle CloudコンソールからアクセスできるWebブラウザベースの端末です。
Bashシェルを実行する軽量なVMで、OCI CLIなどの各便利なツールは、実装済です。
ホーム・ディレクトリに<font color="blue">5GB</font>のストレージを提供します。(一方<font color=orange>AWS</font>のほうは、<font color="Magenta">1GB</font>です。)
Cloud Shell自体は、<font color="blue">無償</font>です。

__OCI Cloud Shellの利用場面__
- OCI-CLIをインストールおよび設定せずにすぐに使用したいとき。
- 踏み台サーバーを経由せず、OCIの各インスタンスにアクセスしたいとき（SSH/SQL*Plus）。（Remote DesktopのようなGUI接続を対応しない）
- TerraformやPythonなどをインストールせずにすぐに使用したいとき。

__他社の類似サービス__
|Oracle|AWS|Azure|Google Cloud|
|:--|:--|:--|:--|
|OCI Cloud Shell|AWS CloudShell|Azure Cloud Shell|Cloud Shell|

OCIとAWSの該当サービスの差異について、以下の記事をご参考ください。
[「OCI Cloud Shell」と「AWS CloudShell」の比較](https://qiita.com/liu-wei/items/cc9a81c49ad095dc1860)

__IAM ポリシー__
管理者ユーザー以外の場合、Cloud Shellを利用するためには、次のポリシーを作成してください。
`allow group <GROUP-NAME> to use cloud-shell in tenancy`

このポリシーにより、グループ単位での利用制限を実現できます。

__OCI Cloud Shellの起動__
コンソールの右上、黄色いマークのところをクリックした後、約2分間、画面の下部にCloud Shellが表示されます。２回目より、起動時間がかかりません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/0723d359-a2d8-5db9-36ef-82e9149b0b9f.png)

__さっそく触ってみましょう__
最初は、helpコマンドを叩きます。（コピーペーストもできますので、便利です。）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/9042d8e0-90bc-fe58-d1a7-e5f4f343c277.png" width="600">
ホーム・ディレクトリの容量を確認したら、確かに5GBです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/4e4d2d7a-1c3f-bbe7-5117-4fda96399f92.png" width="550">

# 2. OCIの他サービズの利用
## 2-1. オブジェクト・ストレージの利用
インストール済のOCI-CLIを利用し、オブジェクト・ストレージとの間、ファイル転送ができます。
（ローカルから「Cloud Shell」にログインできないので、ローカルから「Cloud Shell」へファイル転送をしたいなら、オブジェクトストレージを経由すればOKです。）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/e7ea3954-25c3-11ce-974c-872d25e24b07.png" width="700">

## 2-2. Oracle DBへの接続
SQL PLUSでクラウド上のOracle DBへ接続してみたら、OKです。
コマンド：`sqlplus <ユーザ>/<パスワード>@<ホスト名かアドレス>:<ポート>/<サービス名>`
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/28117cde-aca8-cb35-a3d4-65a03a14e6f6.png" width="800">

## 2-3. Autonomous DBへの接続
Cloud Shellから、Autonomous DB(Public/Private両方)への接続も可能です。

- SQL Plusを利用する場合は、次の記事をご参考ください。
[OCI Cloud Shell上のSQL PlusからADBに接続する](https://qiita.com/liu-wei/items/38b968cee3a9619c63e5)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/426a4d78-83a1-3423-f45e-0f3d239fd262.png", width="450">
- SQLclを利用する場合：
WalletファイルをCloud Shellにアップロードしてから、次のコマンドを実行します。
コマンド：`sql -cloudconfig Wallet_adw.zip <username>/<password>@<service_name>`
※、SQLclはすでにCloud Shellにインストールされています。

## 2-4. MySQL DBCSへの接続
Cloud Shellから、「OCI Bastion Service」を利用すれば、MySQL DBCS(Database Cloud Service)への接続も可能です。上記のPrivate ADBの接続例によく似ています。詳細は、以下の記事をご参考ください。この記事の実施端末はVMでしたが、コマンドライン・ツールの接続方法（MySQL Shell, MySQL Client）は「Cloud Shell」にも適用します。
[OCI Bastion経由でMySQL Database Serviceに接続する](https://qiita.com/liu-wei/items/e86e01ac3d61999aa811)


# 3. インストール済のソフト

| Name                      | Version Info      |
|---------------------------|-------------------|
| ansible                   | ansible --version |
| Fn CLI                    | fn -v             |
| git                       | git --version     |
| gradle                    | gradle -v         |
| Go                        | go version        |
| helm                      | helm version      |
| Java                      | java -version     |
| kubectl                   | kubectl version   |
| maven                     | mvn -v            |
| MySQL Client              | mysql -V          |
| MySQL Shell               | mysqlsh -V        |
| Node.js                   | node --version    |
| OCI CLI                   | oci -v            |
| pip                       | pip -V            |
| Python                    | python -V         |
| Ruby                      | ruby -v           |
| SQL Plus                  | sqlplus -v        |
| SQLcl                     | sql -V            |
| Terraform                 | terraform -v      |
| TypeScript                | tsc -v            |
| vim                       | vim --version     |
| wget                      | wget -V           |

# 4. 制限事項
* ホーム・ディレクトリの容量は、<font color="blue">5GB</font>です。ストレージのマウントをサポートしません。
* OCI CLIを利用する際、コンソールで指定したリージョンと同じリージョンが適用されます。ただし、コンソールからリージョンを変更しても、OCI CLIには自動的に反映されません。その場合は、Cloud Shellを再起動してください。（<font color="blue">要注意</font>）
* <font color="blue">sudo, crontab</font>の利用ができません。
* セッション保留時間は、<font color="blue">最大24時間</font>で、セッションタイムアウトは<font color="blue">20分</font>です。

----

# 追記
## ファイル転送機能
追記日： 2021/3/26

2021/3/23、OCI Cloud Shellの<font color="blue">ファイル転送機能</font>がリリースされました。
ロカールとCloud Shellの間に、簡単にファイルの転送ができるようになりました。(最大<font color="blue">4GB</font>、ディレクトリの転送を対応しません。)
Cloud Shellへの<font color="blue">アップロード</font>：
1) ファイルをCloud Shellの画面に"<font color=blue>Drag & Drop</font>"だけで、OKです。(複数ファイルの同時アップロードは可能です。)
2) メニュー(左上)からアップロードをクリックする。 (個別ファイルのみ)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/25dd34b0-8e17-ec2a-dc83-de66c18f9c17.png)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/f9a144f1-88d6-64df-e53b-36b3f9a34488.png" width="450">

Cloud Shellからの<font color="blue">ダウンロード</font>
メニュー(左上)からダウンロードをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/38b87bb4-0c28-954b-20f1-d06ce2ff74a3.png)
ホームディレクトリに対する相対パスとファイル名を入力し、ダウンロードを開始する。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/3c880584-f516-bb88-a374-04e02f4c573d.png" width="450">

## プライベート・アクセス
追記日： 2022/12/24

2022年8月、Cloud Shellの<strong>プライベート・アクセス</strong>という<strong>新機能</strong>がリリースされました。Cloud Shellから、パブリック・ネットワークを経由せずにプライベート・ネットワークのリソースにアクセスできるになりました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/debaf6ef-dbb6-fcb7-3f78-81e19cb32209.png", width="650">
詳細については、次の記事をご参照ください。
[OCI Cloud Shell からプライベート・サブネット内のインスタンスに接続する](https://qiita.com/liu-wei/items/f28aa9ab2a3e5b49b42d)

# FAQ（よくある質問）
__質問-1__: Cloud ShellにSSHログインすることは可能ですか？
回答：通常のインスタンスではないため、Cloud ShellにSSHログインすることはできません。

__質問-2__: 自分のユーザーはCloud Shellを利用する権限がありません。利用するためにはどのIAMポリシーが必要ですか？
回答：次のIAMポリシーを作成し、対象ユーザーをグループに追加する必要があります。
`allow group <GROUP-NAME> to use cloud-shell in tenancy`

以上です。

----
__関連記事__
[「OCI Cloud Shell」と「AWS CloudShell」の比較](https://qiita.com/liu-wei/items/cc9a81c49ad095dc1860)
[OCI Cloud Shell上のSQL PlusからADBに接続する](https://qiita.com/liu-wei/items/38b968cee3a9619c63e5)
[OCI Cloud Shellにrcloneをインストールする](https://qiita.com/liu-wei/items/1f472a35a9544f5d1a5a)
[コスト節約術](https://qiita.com/letian/items/10152a4fec813c1b7d98#7-%E3%82%B3%E3%82%B9%E3%83%88%E7%AF%80%E7%B4%84%E8%A1%93%E9%87%8D%E8%A6%81)

# 参考資料
__OCI ドキュメント__
[OCI Cloud ShellのGAアナウンス](https://blogs.oracle.com/cloud-infrastructure/announcing-oracle-cloud-shell)
[OCI Cloud Shellのオフィシャルドキュメント](https://docs.oracle.com/ja-jp/iaas/Content/API/Concepts/cloudshellintro.htm)

__MOS (My Oracle Support)__
OCI Cloud Shell Frequently Asked Questions - OCI Cloud Shell ([Doc ID 2736099.1]())
OCI Cloud Shell - How to Allow Access to Cloud Shell to Specific Groups in Tenancy ([Doc ID 2946835.1](https://support.oracle.com/knowledge/Oracle%20Cloud/2946835_1.html))

__OCI Blog__
[Oracle Cloud Shell Commands for Newbies](https://blogs.oracle.com/datawarehousing/post/oci-cli-commands-for-newbies)