Help us understand the problem. What is going on with this article?

Oracle Cloud にあるデータベースをコマンドライン(CLI)から起動・停止してみた

■■■Oracle Cloudのウェビナーシリーズは→こちら■■■

Oracle Cloud環境に、Compute Instanceや、データベース(Oracle DatabaseのVM Instance)や、Oracle Autonomous Data Warehouse Cloud(ADW)を作って最近よく触っているのですが、

OCIのインスタンスをiOSから操作できるOCI Managerを使ってみる

をセットアップし、iPhoneからインスタンスの起動停止を行なってみました。超便利!

ただ、現時点で、このツールはCompute InstanceとADWの起動停止はできるものの、データベースは対応していません。iPhoneから操作できないのは残念ですが、Webブラウザを起動してコンソールにアクセスして...ではなく、Windows環境からコマンド一発で操作できるよう OCI CLIをセットアップしてみました。

※以降、「データベース」とは「Oracle Cloud Infrastructure環境の、Database - Virtual Machines(PaaS)」のことを指しています。

※「データベースの起動・停止」と表現していますが、正確には「データベースが起動しているVMを起動・停止」しています。

まず結論から:実行したコマンド

上から順に、データベースの起動/停止/状態表示(=情報取得)

$ oci db node start --db-node-id <db nodeのOCID> --wait-for-state AVAILABLE
$ oci db node stop --db-node-id <db nodeのOCID> --wait-for-state STOPPED
$ oci db node get --db-node-id <db nodeのOCID>

※参考(最新情報等はこちらの公式ドキュメント↓)起動停止以外にも色々できる。
- Oracle Cloud Infrastructure CLI Command Reference

やったことを順番に

Windows10環境から、冒頭のコマンドを実行したかったので、そのセットアップ手順。

OCIのCLIを使うだけだけなら、WindowsのコマンドプロンプトやPowerShellコンソールなどでも実行可能。今回はLinuxでBashターミナルを利用しシェルスクリプト化したかったので、Windows Subsystem for Linux(WSL)をセットアップして、その中にOCIのCLIをインストールする。

環境

Windows 10
- WSL(Windows Subsystem for Linux)で Ubuntu をインストール
- (Ubuntu 内の Python3 Version は Python 3.6.7)

Windows 10 環境でWSLを有効にしUbuntuをインストール

Windows 10から利用可能な、WSL(Windows Subsystem for Linux)を使うと、Linux向けのバイナリプログラムをそのまま実行できるようになる。以下の手順で実行。

Windows 10でLinuxプログラムを利用可能にするWSLをインストールする(バージョン1803以降対応版)

手順内でUbuntuにログインするユーザ名/パスワードを設定しているので忘れないように。(久々に使おうとしたら、入力を求められるも忘れてて困りました。。。)

Oracle Cloud InfrastructureのCLIをインストール

インストール

Oracle Cloud InfrastructureのCLIをvirtualenv環境内にインストールする

の手順通りに、インストール。この手順に従った理由は引用参照↓↓↓。

Oracle Cloud Infrastructure(以下、OCI)のCLIはPythonで実装されています。Pythonのvirtualenvを使って、OCI CLI専用の環境を切ってインストールしておけば、Pythonにありがちな依存モジュールの問題に悩まされずに済みますので、このエントリーではその手順を書きます。

以下は実行したコマンドを備忘録として。詳細はリンク先参照。

   1  sudo apt update
   2  sudo apt install python3-pip
   3  pip3 install virtualenv
   4  python3 -m virtualenv ~/.pyenv_oci-cli --no-site-packages
   5  source ~/.pyenv_oci-cli/bin/activate
   6  pip install oci-cli
   7  oci -h

環境設定と確認

続けて、上のサイトに記載されているように

Oracle Cloud Infrastructure CLIを設定してみた

の手順で、接続に必要な環境設定を行う。

最初のステップの、ociコマンドを使って公開鍵・秘密鍵の生成をしているところを抜粋した。ここまでの手順でvirtualenvが有効な状態なので(上の 5 source ~/.pyenv_oci-cli/bin/activateにより有効になる)、コマンドプロンプトは先頭に(.pyenv_oci-cli)表示があるはず。

(.pyenv_oci-cli) miki@MKAWAUCH-JP:~$ oci setup keys
Enter a passphrase for your private key (empty for no passphrase):
Public key written to: /mnt/c/linux_home/.oci/oci_api_key_public.pem
Private key written to: /mnt/c/linux_home/.oci/oci_api_key.pem
Public key fingerprint: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX

最後のステップ(確認)では、以下のように、データベースの情報を表示。(WebコンソールからデータベースやコンパートメントのOCIDを確認してコマンドを実行する)

$ oci db database list -c <コンパートメントのOCID> --db-system-id <データベースのOCID>
WARNING: Permissions on /mnt/c/linux_home/.oci/config are too open. To fix this please execute the following command: oci setup repair-file-permissions --file /mnt/c/linux_home/.oci/config
WARNING: Permissions on /mnt/c/linux_home/.oci/oci_api_key.pem are too open. To fix this please execute the following command: oci setup repair-file-permissions --file /mnt/c/linux_home/.oci/oci_api_key.pem
{
  "data": [
    {
      "character-set": "AL32UTF8",
      "compartment-id": "ocid1.compartment.oc1..XXXXX",
      "db-backup-config": {
        "auto-backup-enabled": false
      },
      "db-home-id": "ocid1.dbhome.oc1.XXX.XXXXX",
      "db-name": "mydb",
      "db-unique-name": "mydb_XXXXXX",
      "db-workload": "OLTP",
      "defined-tags": {},
      "freeform-tags": {},
      "id": "ocid1.database.oc1.XXX.XXXXX",
      "lifecycle-details": null,
      "lifecycle-state": "AVAILABLE",
      "ncharacter-set": "AL16UTF16",
      "pdb-name": "pdb1",
      "time-created": "2019-01-15T04:06:14.838000+00:00"
    }
  ]
}

データベースのOCIDは、左上「MENU」→ 「Bare Metal, VM and Exadata」から、対象のデータベースを表示することで確認できる。

01menu.png

補足:実行時のWARNING

WSLのホームディレクトリの設定場所(デフォルトから変更した場合など)によっては、冒頭に WARNING: が2つ出る場合がある。ファイルのパーミッションが緩いことに起因(両方共777だった)するが、WARNING内に指定のコマンドを実行しても変わらなかったのでこのままにしている。

$ ls -la /mnt/c/linux_home/.oci/oci_api_key.pem
-rwxrwxrwx 1 root root 1679 Jan 22 15:15 /mnt/c/linux_home/.oci/oci_api_key.pem
$ ls -la /mnt/c/linux_home/.oci/config
-rwxrwxrwx 1 root root 308 Jan 22 15:24 /mnt/c/linux_home/.oci/config

OCI CLIからデータベースの起動停止を実行

データベースのノードのOCIDを確認する

ここからの操作は、先程使用したデータベースのOCIDではなく、ノードのOCIDを指定する。

データベースを表示した後、左下「Resources」にある「Nodes(1)」をクリックすると、以下の画面になる。Nodes内にある OCIDが、ノードのOCID。

02node.png

コマンド実行:データベースを起動

ここから、冒頭のコマンドを順に実行していく。

--wait-for-state <ステータス名> の指定は、そのステータスになるまで、コマンドプロンプトが返らない。(必須ではないが便利)

$ oci db node start --db-node-id <db nodeのOCID> --wait-for-state AVAILABLE
Action completed. Waiting until the resource has entered state: AVAILABLE <== この後、AVAILABLEになるまでしばらく待つ
{
  "data": {
    "backup-vnic-id": null,
    "db-system-id": "ocid1.dbsystem.oc1.XXX.XXXXX",
    "hostname": "mydb",
    "id": "ocid1.dbnode.oc1.XXX.XXXXX",
    "lifecycle-state": "AVAILABLE",
    "software-storage-size-in-gb": 200,
    "time-created": "2019-01-15T04:06:14.837000+00:00",
    "vnic-id": "ocid1.vnic.oc1.XXX.XXXXX"
  },
  "etag": "XXXXXXXX"
}

Webのコンソールの「Resources -> Nodes(1)」で見てみると、AVAILABLE表示。

image.png

コマンド実行:データベースを停止

$ oci db node stop --db-node-id <db nodeのOCID> --wait-for-state STOPPED
Action completed. Waiting until the resource has entered state: STOPPED
{
  "data": {
    "backup-vnic-id": null,
    "db-system-id": "ocid1.dbsystem.oc1.XXX.XXXXX",
    "hostname": "mydb",
    "id": "ocid1.dbnode.oc1.XXX.XXXXX",
    "lifecycle-state": "STOPPED",
    "software-storage-size-in-gb": 200,
    "time-created": "2019-01-15T04:06:14.837000+00:00",
    "vnic-id": "ocid1.vnic.oc1.XXX.XXXXX"
  },
  "etag": "XXXXXXXX"
}

Webのコンソールの「Resources -> Nodes(1)」で見てみると、STOPPED表示。

image.png

コマンド実行:状態確認

lifecycle-stateから、現在の状態が確認できる。
(get指定自体は、状態確認というよりは、このデータベースノードの情報を取得するためのもの)

$ oci db node get --db-node-id <db nodeのOCID>
{
  "data": {
    "backup-vnic-id": null,
    "db-system-id": "ocid1.dbsystem.oc1.XXX.XXXXX",
    "hostname": "mydb",
    "id": "ocid1.dbnode.oc1.XXX.XXXXX",
    "lifecycle-state": "AVAILABLE", <== ステータスはAVAILABLEであることが分かる
    "software-storage-size-in-gb": 200,
    "time-created": "2019-01-15T04:06:14.837000+00:00",
    "vnic-id": "ocid1.vnic.oc1.XXX.XXXXX"
  },
  "etag": "XXXXXXXX"
}
$

シェルスクリプト化

Ubuntuアイコンクリックし起動、./mydb.sh start (または stop, get) で実行できるよう、mydb.shとしてスクリプト化。(載せるほどでもないベタ書きですが・・・)

実行例

$ ./mydb.sh start
$ ./mydb.sh stop
$ ./mydb.sh get

スクリプト

mydb.sh
#!/bin/sh

. ~/.pyenv_oci-cli/bin/activate

if [ "$1" = "" ]
then
    echo "Usage: "
    echo $0 "stop"
    echo $0 "start"
    echo $0 "get"
    exit 1
fi

echo $1

case $1 in
        "stop" ) oci db node stop --db-node-id <db nodeのOCID> --wait-for-state STOPPED ;;
        "start" ) oci db node start --db-node-id <db nodeのOCID> --wait-for-state AVAILABLE ;;
        "get" | "status" ) oci db node get --db-node-id <db nodeのOCID> ;;
esac

参考

※本文中にリンク貼ったものを再掲

※それ以外

最後に

(一応念の為記載です、ご利用は自己責任にてよろしくお願いいたします。)

mikika
ここでの発言は私個人の見解であり、所属する会社&組織の見解を反映したものではありません。
oracle
Oracle Cloudは、最先端の機能をSoftware as a Service、Platform as a ServiceおよびInfrastructure as a ServiceおよびData as a Serviceとして提供します。
https://cloud.oracle.com/ja_JP/home
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away