OCI-CLIを使用してOCIインスタンスのライフサイクル状態を取得する方法

このシリーズの他の記事は、[オラクル・クラウドの個人ブログ一覧 ](https://qiita.com/letian/items/10152a4fec813c1b7d98)からご覧いただけます。

# 初めに
OCI-CLIで、OCIの各インスタンスのライフサイクル状態を取得する方法を紹介します。バッチスクリプトでインスタンス起動・停止を実現する際の事前チェックとして使用できます。

|No.| OCI サービス | 稼働中の状態 | 停止中の状態 | OCI-CLI<br>コマンド |
|:--:|:-|:-:|:-:|:-:|
|1|[Compute](#1-compute-instance)|RUNNING|STOPPED   | [リンク](https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.40.1/oci_cli_docs/cmdref/compute/instance.html) |
|2|[Autonomous DB](#2-autonomous-db)| AVAILABLE | STOPPED  | [リンク](https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.40.1/oci_cli_docs/cmdref/db/autonomous-database.html)  |
|3|[Oracle Base DB](#3-oracle-base-db)|AVAILABLE| STOPPED| [リンク](https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.40.1/oci_cli_docs/cmdref/db/node.html)  |
|4|[Oracle Analytics Cloud](#4-oracle-analytics-cloud-oac)<br>(OAC)|<font color=blue>ACTIVE</font>|<font color=blue>INACTIVE</font> | [リンク](https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.40.1/oci_cli_docs/cmdref/analytics/analytics-instance.html)  |
|5|[OCI Data Integration](#5-oci-data-integration-oci-di)<br>(OCI DI)| <font color=blue>ACTIVE</font>|STOPPED|[リンク](https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.40.1/oci_cli_docs/cmdref/data-integration/workspace.html)|

- [付録 - query引数の書き方](#付録---query引数の書き方)

# 1. Compute Instance
- __指定したインスタンスの状態を取得__
`oci compute instance get --instance-id <Compute_OCID> --query 'data."lifecycle-state"'`

PowerShellの例：(RUNNING - 稼働中)
```powershell
PS C:\Users\opc> oci compute instance get --instance-id ocid1.instance.oc1.ap-tokyo-1.<中略> --query 'data.\"lifecycle-state\"'
"RUNNING"
PS C:\Users\opc>
```

- __指定したコンパートメント内のすべてのインスタンスの状態の取得__
`oci compute instance list -c <Compartment_OCID> --query 'data[].{"Name":"display-name", "State":"lifecycle-state"}' --output table`

PowerShellの例：
```powershell
PS C:\Users\opc> oci compute instance list -c ocid1.compartment.oc1..<中略> --query 'data[].{"Name":\"display-name\", "State":\"lifecycle-state\"}' --output table
+----------------+---------+
| Name           | State   |
+----------------+---------+
| Oracle_Linux_8 | RUNNING |
| Windows2019    | STOPPED |
+----------------+---------+
PS C:\Users\opc>
```

# 2. Autonomous DB
- __指定したADBインスタンスの状態を取得__
`oci db autonomous-database get --autonomous-database-id <ADB_OCID> --query 'data."lifecycle-state"'`

PowerShellの例：(AVAILABLE - 使用可能)
```powershell
PS C:\Users\opc> oci db autonomous-database get --autonomous-database-id ocid1.autonomousdatabase.oc1.ap-tokyo-1.<中略> --query 'data.\"lifecycle-state\"'
"AVAILABLE"
PS C:\Users\opc>
```
- __指定したコンパートメント内のすべてのADBインスタンスの状態の取得__
`oci db autonomous-database list -c <Compartment_OCID> --query 'data[].{"Name":"display-name", "State":"lifecycle-state"}' --output table`

PowerShellの例：
```powershell
PS C:\Users\opc> oci db autonomous-database list -c ocid1.compartment.oc1..<中略> --query 'data[].{"Name":\"display-name\", "State":\"lifecycle-state\"}' --output table
+-------+-----------+
| Name  | State     |
+-------+-----------+
| ADW02 | STOPPED   |
| ADW01 | AVAILABLE |
+-------+-----------+
PS C:\Users\opc>
```

# 3. Oracle Base DB
:::note
確認対象は、DBシステムではなくDBノードの状態です。
:::

DBの詳細画面から、DBノードのOCIDを取得できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/91c21144-5bcd-40ee-cd5d-27298f92889e.png)

__指定したDBノードの状態を取得__
`oci db node get --db-node-id <DBNode_OCID> --query 'data."lifecycle-state"'`

Cloud Shellの例：
```shell
<username>@cloudshell:~ (ap-tokyo-1)$ oci db node get --db-node-id ocid1.dbnode.oc1.ap-tokyo-1.<中略> --query 'data."lifecycle-state"'
"STOPPED"
```

# 4. Oracle Analytics Cloud (OAC)
__指定したインスタンスの状態を取得__
`oci analytics analytics-instance get --analytics-instance-id <OAC_OCID> --query 'data."lifecycle-state"'`

Cloud Shellの例：
```shell
<username>@cloudshell:~ (ap-tokyo-1)$ oci analytics analytics-instance get --analytics-instance-id ocid1.analyticsinstance.oc1.ap-tokyo-1.<中略> --query 'data."lifecycle-state"'
"DELETED"
```

:::note warn
OACインスタンスを一時停止しても、課金が完全に停止するわけではありません。<strong>通常の15%の課金が引き続き</strong>発生します。再開すると、通常の課金に戻ります。課金を完全に停止したい場合は、OACインスタンスを削除する必要があります。
:::


# 5. OCI Data Integration (OCI DI)
__指定したワークスペースの状態を取得__
`oci data-integration workspace get --workspace-id <Workspace_OCID> --query 'data."lifecycle-state"'`

Cloud Shellの例：
```shell
<username>@cloudshell:~ (ap-tokyo-1)$ oci data-integration workspace get --workspace-id ocid1.disworkspace.oc1.ap-tokyo-1.<中略> --query 'data."lifecycle-state"'
"STOPPED"
```


----
# 付録 - query引数の書き方

query引数の書き方は、実行環境の種類により違いがあります。

|実行環境|書き方|
|:--|:--|
|Linux (or Cloud Shell)|`--query 'data."lifecycle-state"'`|
|Windows BAT|`--query "data.\"lifecycle-state\""`|
|Windows PowerShell| `--query 'data.\"lifecycle-state\"'`|

:::note
"display-name" や "lifecycle-state" のようにハイフンが含まれる項目には、<strong>ダブルクォーテーション</strong>を付ける必要があります。Windowsの場合、ダブルクォーテーションを付ける際に '`\`'(バックスラッシュ) を忘れずに。
:::

以上

----
__関連記事__
[便利なOCI CLIコマンド例](https://qiita.com/letian/items/ed30da7a4d37a56ba8bc)
[OCIインスタンスの自動起動・停止](https://qiita.com/letian/items/2f059ec0ce4139632a11)
[OCI-CLIについてのFAQ](https://qiita.com/letian/items/890e3f285c0dff93509f)

----
# 参照資料
## OCI-CLI コマンド レファレンス
[Docs » compute » instance](https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.40.1/oci_cli_docs/cmdref/compute/instance.html)
[Docs » db » autonomous-database](https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.40.1/oci_cli_docs/cmdref/db/autonomous-database.html)
[Docs » db » node](https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.40.1/oci_cli_docs/cmdref/db/node.html)
[Docs » analytics » analytics-instance](https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.40.1/oci_cli_docs/cmdref/analytics/analytics-instance.html)
[Docs » data-integration » workspace](https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.40.1/oci_cli_docs/cmdref/data-integration/workspace.html)


## MOSドキュメント
MOSドキュメント（[Doc ID 2934259.1]()）の記載内容の抜粋：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/2432befc-6f49-ca55-1b11-ecba452642d5.png)