【Oracle Cloud Infrastructure】インスタンスのライフサイクルを管理する

クラウドに作成したインスタンスはいつでも停止、再起動、終了、再作成できる。
このインスタンスのライフサイクル管理をどうするか、それぞれのステータスで実際にインスタンスがどのような状態なっているかについて確認する。

# インスタンスの停止、再起動
インスタンスの停止、再起動処理、そのとき実行される動作について確認

## ブートボリュームへのファイルの作成
OCIのインスタンスは、すべてブート・ボリュームは iSCSIデバイスからネットワーク経由で iPEXブートされる。
このブート・ボリュームの変更（OSのパラメータ変更など）が、インスタンスのライフサイクル操作によってどのような影響を受けるかを確認するために、予めファイルを１つ作成する。

1. SSHターミナルを開き作成したインスタンスに sshでアクセスする<br><img width="504" alt="1__opc_testvm1____ssh_.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/8af94ebc-27db-e7cb-e1bb-f05920b9f2fb.png">

2. アクセスしたユーザホームディレクトリに、任意のファイルを作成する<br><img width="377" alt="1__opc_testvm1____ssh__と_サービス・リクエスト・ホーム.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/5bc5f25e-ee3a-cc21-ec50-db05c00586f4.png">

## インスタンスの停止
インスタンスを停止し、その時どんなことが起こるかを OCIコンソールから確認する。

1. コンソールメニューから「コンピュート」→「インスタンス」を選択し、作成したインスタンス名のリンクをクリックする<br><img width="536" alt="スクリーンショット_2019-12-08_17_00_24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/4a2c2d63-f6ce-9498-d7ab-6821d201a473.png"><br><img width="1400" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/fe24a58a-a08d-6759-436c-102bc9ad6536.png">

2. インスタンスの詳細画面の上部にある「停止」をクリック<br><img width="1409" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/1e1fea44-98a3-bc3b-f4b3-6a92afdf4dc6.png">

3. 確認を求めるメッセージ・ダイアログは「OK」をクリック<br><img width="727" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/155d584f-3b66-97f5-f98c-635bbae0148b.png">

4. インスタンスのステータウが「停止中」となり、停止済みになる<br><img width="1409" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/a9e9fcae-1f93-cd90-0cc8-d655767c4093.png"><br><img width="1410" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/70c6f4c9-fa07-bd86-79be-4a0081cdb504.png">
sshでアクセスしていたターミナル・ウィンドウは接続が切断される<br><img width="505" alt="1__opc_testvm1____bash_.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/7c134820-591c-78ef-c4ab-065e8ebe43e1.png">

5. 「停止済」になったインスタンスの状態をOCIコンソールから確認<br>主な確認ポイント
    - インスタンス概要画面の「プライマリVNIC情報」フィールドで、「プライマリIPアドレス」と「パブリックIPアドレス」にインスタンス起動時と同じIPアドレスが引き続き確保されていること<br><img width="1407" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/f83e0c0f-5ac3-62a0-c5a3-0056b5877a17.png">
    - 「アタッチされたブロック・ボリューム」フィールドに、アタッチした追加ボリュームが引き続き表示され、「アタッチ済み」のステータスになっていること<br><img width="1417" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/1e25d826-f95e-d866-b911-230dfdb9b457.png">
    - 「ブート・ボリューム」フィールドに、ブートボリュームが表示され、「アタッチ済」のステータスになっていること<br><img width="1410" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/eb39bb24-c8f4-b822-9315-d5fd63210f17.png">

✅ インスタンスが停止済ステータスになると、一部の例外のインスタンスを除き、インスタンスへの課金が停止します。一方ブロック・ボリュームなどの確保済のストレージ・リソースは存在しているため、課金は継続します。

ℹ️ インスタンスのシェイプ名称のうち、DenseIO / HighIO / HPC / GPUという名称がつくインスタンスに関しては、例外的に停止済ステータスになってもインスタンスへの課金が継続する。インスタンス停止時の課金に関する詳細については[マニュアル](hhttps://docs.oracle.com/cd/E97706_01/Content/Compute/Tasks/restartinginstance.htm#ResourceBillingforStoppedInstances)で確認できる。

以下、マニュアルから抜粋：
**停止済インスタンスのリソース請求**
VMとベアメタルの両方のインスタンスで、請求はインスタンスの作成に使用する[シェイプ](https://docs.oracle.com/cd/E97706_01/Content/Compute/References/computeshapes.htm)によって異なる：

- 標準シェイプ：インスタンスの停止は請求を一時停止します。ただし、停止されてたインスタンスは引き続きサービス制限を考慮してカウントされます。
- Dense I/Oシェイプ：請求処理は、NVMeストレージがアタッチされているために停止されたインスタンスを継続し、関連リソースは引き続きサービス制限に沿ってカウントされます。サービス制限からの請求および関連リソースの削除を停止するには、「インスタンスの終了」を実行する必要がある
- GPUシェイプ：請求は停止したインスタンスのために続行され、関連リソースは引き続きサービス制限に達するようになりいます。サービス制限からの請求および関連リソースの削除を停止するには「インスタンスの終了」を実行する必要があります。
- HPCシェイプ：請求処理は、NVMeストレージがアタッチされているために停止されたインスタンスを継続し、関連リソースは引き続きサービス制限に沿ってカウントされます。サービス制限からの請求および関連リソースの削除を停止するには、「インスタンスの終了」を実行する必要があります。

インスタンス内からインスタンスを停止しても、そのインスタンスの請求は停止しません。この方法でインスタンスを停止する場合は、必ずコンソールまたはAPIから 停止してください。

今使っている、「VM.Standard2.1」は標準にあたると思うけど、インスタンス停止しても請求は停止しなかった。停止後のコスト分析をメモって少し放置
<img width="1391" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/66636154-1ae3-f4be-da65-73dbf87d9a36.png">
これ「Compute->VM Standard Compute X7」ってX7てなっているのがもしかして「HPC」に該当するのだろうか
<img width="1388" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/238e1f7f-4c88-5dd9-ddaf-3131a5e72264.png">
やっぱり増えている。リージョンによって違う？

## インスタンスの起動
停止したインスタンスを再起動し、挙動を確認する。

1. 停止中のインスタンスの詳細画面上部の「開始」をクリック<br><img width="1403" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/8327276c-6b2a-830d-9d36-a5be6584bed4.png">

2. 確認を求めるメッセージ・ダイアログが立ち上がるので、「OK」をクリック<br><img width="721" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/6882833a-eefe-b053-d521-21478fcf3c45.png">
3. インスタンスのステータスが実行中に成るのを確認する<br><img width="1404" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/e4213ad0-0550-ffc7-e0fe-29226273077e.png"><br><img width="1410" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/e19814e9-dc1b-58cf-baf1-f3c01a466fe5.png"><br>ステータスが変わったらインスタンスの詳細情報を確認、停止中との違いを比較。。。ステータスだけで他に違いはなさそう
4. sshターミナルを起動し、opcユーザで sshログインする<br>ℹ️ インスタンスが実行中になってから、sshdが起動してsshアクセスできるようになるまで数分かかる
5. sshログインしたら、最初に作成したブート・ボリュームのファイルを確認する<br><img width="446" alt="1__opc_testvm1____ssh__と_Service_Requests_Home.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/8577b8f2-f66d-16a4-be9a-350df8a3ee92.png"><br>問題なくファイルが表示できる。<br>ブート・ボリューム（OS領域）に対する変更が、インスタンスの停止、再起動でも永続化されている。
6. アタッチされているボリュームの情報を確認<br><img width="379" alt="1__opc_testvm1____ssh_.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/54aed460-3cb4-4ff4-cdfe-1c8bb4df744a.png">
/dev/sdbというボリュームが表示されない！！！<br><img width="1410" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/6349033a-3425-1359-eeb6-7515d0901347.png"><br><img width="1410" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/cd048d78-fbf0-55ff-7c8e-e1eb1da93fa9.png">
<img width="1058" alt="1__root_testvm1____ssh_.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/46896399-4098-6034-1296-51a53f759d46.png">
iscsiの設定をミスったか？もう一度設定仕直し＆確認してインスタンスの再起動をしてみる<br><img width="828" alt="1__opc_testvm1____ssh__と_Service_Requests_Home.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/e9307426-fd2a-3e84-bb18-9a9aaa957b0d.png">

無事、インスタンスにアタッチされている、ブートボリュームを含むボリュームの一覧が表示された。
/dev/sdbは、[【Oracle Cloud Infrastructure】ブロック・ボリュームをインスタンスにアタッチする](https://qiita.com/junkers_rene/items/9f22a44887c59eaffac1)で追加したボリューム。
インスタンスの停止、再起動しても、ブロックボリュームへの iSCSIのログインが継続され、再起動後は自動ログインされる。


# インスタンスの終了（Terminate）
1. コンソールメニューから「コンピュート」→「インスタンス」を選択し、インスタンス名（testVM1）のリンクをクリック<br><img width="500" alt="スクリーンショット_2019-12-24_22_33_51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/ca68fbb2-d772-2476-f475-0e4d94bd1a24.png"><br><img width="1000" alt="インスタンス___Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/2de28745-4088-d958-f170-4ad82ed6b861.png">

2. インスタンスの詳細画面の上部にある「アクション▼」メニューから「終了」を選択<br><img width="1421" alt="インスタンス停止.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/789ef0db-123d-21b8-92d1-6a9b41d6583c.png">

3. インスタンスのブート・ボリュームをどうするかを選択するダイアログ・ボックスが起動する<br>「アタッチされたブート・ボリュームを完全に削除」というチェックボックスにチェックをつけると、インスタンスのブート・ボリュームが削除される。<br>今回は、ブート・ボリュームをまた使うので、チェックを外したまま「インスタンスの終了」ボタンを押す。<br><img width="723" alt="インスタンス___Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/fed2577e-a95a-77a4-c951-281231f64e83.png">

4. インスタンスの終了処理が始まる。終了処理中は「終了中...」というステータスになる。<br>この処理の間に、インスタンス作成時に確保された各種のリソースが順にデタッチ、または削除されていく。<br>OCIコンソール上では、リアルタイムで情報が変化し、削除されたリソースから表示が変化していくので、リアルタイムで状況がどう変わるかを確認できる。<br><img width="1000" alt="スクリーンショット 2019-12-27 2.19.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/b6aa8625-bcba-79b9-5bdb-719b11fb1ae7.png">
5. インスタンスの終了（Terminate）処理が完了すると、ステータスが終了済に変わる。<br>画面上のステータスアイコンで、ステータスが終了済になったことを確認する。<br><img width="1438" alt="インスタンス___Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/ed3e9ea0-894b-5725-f66a-e6caa25a4e9c.png">

6. 「プライマリVNIC情報」欄では、「プライベートIPアドレス」および「パブリックIPアドレス」が「使用不可」担っていることを確認する。<br>これは、インスタンスの終了とともに、アタッチされていたインスタンスのプライベートIPアドレス、パブリックIPアドレスがデタッチされ、IPのプールに返還された状態であることを示しています。これらのIPアドレスは、他のインスタンスで再利用することができる。<br><img width="1119" alt="インスタンス___Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/c7d0e0fe-ae58-7907-c192-e00470e338b0.png">

7. 「アタッチされたブロック・ボリューム」欄には、「このインスタンスにはアタッチされたブロック・ボリュームはありません。」と表示される。<br>インスタンスの終了とともに、アタッチされていた追加ボリュームはデタッチされていることがわかる。
8. 「アタッチされたVNIC」欄には、何も表示されていない。インスタンスの終了とともに、アタッチされていた仮想NICはすべて削除されている。<br>ℹ️ 現在のOracle Cloud Infrastructureでは、インスタンスの削除時に仮想NICを残しておいて、他のインスタンスにアタッチするような機能（Elastic Network Interface）はない。この機能は将来の実装が予定されている。<br>現在でも、予約IP機能を使ったグローバルIPアドレスの移動（Elastic Global IP）は可能。<br><img width="1000" alt="インスタンス___Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/6ac0d6fd-c6c3-cf1d-207c-3ffefad8288e.png">

9. Boot Volume欄には、「デタッチ済」というステータスのボリュームがひとつ表示されている。<br>削除時のダイアログで、ブートボリュームを削除しないという選択をしたため、ボリュームは保全されている。<br><img width="1130" alt="インスタンス___Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/556e9ff7-0b63-6ccb-9786-41d580f16f83.png">


「終了済」スタータスのインスタンスは、インスタンスのシェイプを問わず、すべて課金が停止している。
ただし、ブート・ボリュームを残す選択をした場合は、そのボリュームはインスタンス終了後も存続し、課金が継続する。

「終了済」スタータスのインスタンスは、暫くの間OCIコンソールに表示され続けるが、このインスタンスを復活させることはできない。暫くすると終了済インスタンスはOCIコンソールから表示が消える。
⚠️ DenseIO、HighIO、HPCなどの、インスタンス内部にストレージが付属するインスタンスの場合、インスタンスを終了（terminate）すると内部ストレージのデータが消去され、損失する。<br>もし内部ストレージのデータ保全が必要な場合は、予めブロック・ボリュームなどの他の永続ストレージにデータを保管してからインスタンスを終了するようにする。

# ブート・ボリュームからのインスタンスの再作成
終了したインスタンスを再度起動させることはできないが、ブート・ボリュームが保管されている場合はそこから新しく別のインスタンスを作成することができる。

1. コンソールメニューから「コンピュート」→「ブート・ボリューム」を選択<br><img width="500" alt="スクリーンショット_2019-12-27_21_03_02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/b119a341-736a-2746-da11-ab2ebd762259.png">
2. 削除したインスタンスのブート・ボリュームが表示される。<br><img width="1000" alt="ブート・ボリューム___Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/6214da2c-9a94-79b0-50a1-69cbc7c3654b.png"><br>ブート・ボリューム名をクリックする

3. ブート・ボリュームの詳細画面の上部にある「インスタンスの作成」というボタンを押す<br><img width="1000" alt="ブート・ボリューム___Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/37953907-0276-b340-ff30-e26b4a10b91e.png">
4. 「コンピュート・インスタンスの作成」ウィザードが起動してくる。以下の内容を入力して下部の「作成」をクリック
    - インスタンスの命名：任意
    - オペレーティング・システムまたはイメージ・ソースを選択します：削除したインスタンスのブート・ボリュームが選択されていることを確認<br><img width="937" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/42204fbf-07ef-1b53-1223-af307d6f1da4.png">
    - 可用性ドメイン：削除したインスタンスが存在していたアベイラビリティ・ドメインと同じものを選択
    - インスタンス・タイプ：任意
    - インスタンス・シェイプ：任意<br><img width="933" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/98ea8e44-eb7e-8e82-31a8-60891941e228.png">
    - ネットワーキングの構成
        - 仮想クラウド・ネットワーク・コンパートメント：VCNの生存するコンパートメントを選択
        - 仮想クラウド・ネットワーク：任意のVCNを選択
        - サブネット・コンパートメント：サブネットの存在するコンパートメントを選択
        - サブネット：任意のパブリック・サブネットを選択
        - ネットワーク・セキュリティ・グループを使用してトラフィックを制御
        - パブリックIPアドレスの割当て（デフォルト）／パブリックIPアドレスを割り当てないでください<br><img width="923" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/057af38d-8989-05e6-516a-2d0bd907edca.png"><br>✔️ Oracle Cloud Infrastructureでは、同一のイメージから仮想マシン、ベアメタルサーバの両方のインスタンスを作成することができる。このため、仮想マシンのブート・ボリュームからベアメタルサーバを立ち上げる、といったことや、その逆の操作も可能。この手順のシェイプ・タイプ及びシェイプで、もとのインスタンスとは違うものを選択することで実現出来る。
    - ブート・ボリューム：デフォルトのまま
    - SSHキーの追加：作成済みの鍵ペアのうち公開鍵（id_rsa.pub）を選択<br><img width="932" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/af92dfe4-6037-d06f-7cdb-b1d68c981a1d.png">
    - 拡張オプションの表示
        - 管理
            - インスタンスのコンパートメントを選択します：移動したい時はここを変更だ
            - フォルト・ドメインの選択
            - ユーザ・データ
            - Oracle Cloudエージェント<br><img width="920" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/0c9553eb-48b4-f4f9-219f-21648ea8f5bc.png"><img width="899" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/a59a746c-8187-c90c-b1a8-8d5800582f2c.png">
        - ネットワーキング<br><img width="924" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/c19eae44-5baf-2314-4a7b-8520027bffd4.png">
        - イメージ<br><img width="486" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/c3ea3570-076f-86a6-59dd-d8566c3a32d1.png">
        - ホスト<br><img width="957" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/5f71a977-8c31-149b-57b4-b20feef20e5e.png">
<br>設定を間違っていた時はこうやって直すってことができそう<br>
<img width="505" alt="Oracle_Cloud_Infrastructure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/efc7d644-e33d-6476-1039-97ea1188803b.png">
<br>ブート・ボリューム使い回しなのにこのメッセージ、、、もう嫌すぎる
5. インスタンスの作成が開始される。2-3分ほどでインスタンス作成が完了し、ステータスが「実行中」にかわる。<br>インスタンスに新しく割り振られたパブリックIPアドレスを確認する。
6. 確認したパブリックIPアドレスに対して sshでアクセスし、インスタンス削除前に作成したファイル（/home/opc/testfile）が存在することを確認する。<br>これにより、インスタンス削除時のOS領域のℹ️がインスタンスの再作成時も保全されていることがわかる。

インスタンスを終了（Terminate）せず、インスタンスの停止→ブートボリュームのデタッチ後のブートボリュームなら、元のインスタンスを残したまま新しいインスタンスを作成することも可能。この方法を使うと、一時的にインスタンスのタイプやシェイプを変更し、作業が終わったらまた元のインスタンスにアタッチして利用することも可能。