Hey Siri! Autonomous Databaseを起動して!


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

こちらで紹介されていた内容をやってみました。
https://blogs.oracle.com/developers/hey-siri-create-my-oracle-autonomous-database

上のBLOGではAutonomous Databaseを作成していますが、ここではAutonomous Databaseの起動/停止/ステータス確認をしています。

iOS 12以降で実装されている、iPhoneの「ショートカット」機能を使っていますが、それ以外の部分は、Oracle Cloudを利用する際の一般的な手順となります(コマンドベースでの管理ツールであるoci cliからAutonomous Databaseを操作する場合の一連の手順)。

ちなみに、OCI Manager という便利なiPhoneアプリ(公式ではありませんが)を使っても、
Autonomous Databaseの起動停止は簡単に行えます。
OCIのインスタンスをiOSから操作できるOCI Managerを使ってみる
(あれっ?OCI Managerをショートカットに登録すれば良かったのでは...という気がしますが、一旦忘れます)

環境

①iPhone --(SSH公開鍵認証)--> ②OCI上のCompute --(oci cliで操作)--> ③Autonomous Database

  • ②のOS:Oracle Linux 7
  • ②のOSユーザ名:app (事前に作成済み)

注:②Computeインスタンスには「パブリックIPアドレスを割当て」しておく。(下の図はインスタンス作成時にラジオボタンで指定している)

やったこと

oci cli を実行できるようセットアップする

①iPhone --(SSH公開鍵認証)--> ②OCI上のCompute --(oci cliで操作)--> ③Autonomous Database

②OCI上のComputeインスタンスに、appユーザでログインし

Oracle Cloud Infrastructure の Python SDKを使ってObject Storageにファイルをアップロード
「準備」の「公開鍵の登録」までを実行する。(途中、バケットの作成と、pipenv install oci は実施不要)

※冒頭のBLOGのように、Oracle Cloud Developer Imageを使用したComputeインスタンスを作成した場合は、Python環境を整えるところはSKIP可能。(その場合は使用したPython仮想環境に応じて後続の手順を、適宜読み替えて下さい)

Autonomous Databaseを起動停止するスクリプトを作成する

①iPhone --(SSH公開鍵認証)--> ②OCI上のCompute --(oci cliで操作)--> ③Autonomous Database

以前、(Autonomousではない)データベースを起動停止するベタ書きスクリプト(mydb.sh)を作成したときの内容を参考に、/home/app/mypj/util/mydb.sh として準備。--wait-for-state の説明などは前回分(リンク先)参照。

今回のmydb.sh では、

  • 変数ADBに、Autonomous Databaseのocidを指定
  • 今回のPython仮想環境が pyenv + pipenv なので、oci db .. の それぞれ冒頭で pipenv run
  • --query 'data."lifecycle-state"' 指定は、JMESPathでの指定(oci db .. 実行結果のjsonの一部だけ表示)
mydb.sh
#!/bin/sh

# Autonomous Databaseの ocidを指定する
ADB="ocid1.autonomousdatabase.oc1.xxx.xxxxxxxxxxxxxxxxxxx"

cd /home/app/mypj

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

case $1 in
        "stop" ) pipenv run oci db autonomous-database stop --autonomous-database-id ${ADB} --wait-for-state STOPPED --query 'data."lifecycle-state"' ;;
        "start" ) pipenv run oci db autonomous-database start --autonomous-database-id ${ADB} --wait-for-state AVAILABLE --query 'data."lifecycle-state"' ;;
        "get" | "status" ) pipenv run oci db autonomous-database get --autonomous-database-id ${ADB} --query 'data."lifecycle-state"' ;;
esac

(ついstatusと打ちたくなるので、case 内ではgetとstatusと両方受け付けるようにしている)

以下を実行し、Autonomous Databaseの起動/停止/ステータス確認する。

$ ./mydb.sh start
$ ./mydb.sh stop
$ ./mydb.sh status

それぞれ、「"AVAILABLE"」「"STOPPED"」「"<ステータスに応じた値>"」が返る。

iPhoneから「SSH経由でスクリプトを実行」するショートカットを作成する

①iPhone --(SSH公開鍵認証)--> ②OCI上のCompute --(oci cliで操作)--> ③Autonomous Database

ショートカットの作成は、

  • iPhoneで「ショートカット」を起動(「ショートカット」アプリがない場合はインストール)
  • 「ショートカットを作成」
  • 「スクリプティング」 → 「SSH経由でスクリプトを実行」を選択

こんな感じ↓↓で ②OCI上のComputeのPublic IPアドレスやユーザ名など、ログイン情報や、実行するスクリプトを入力。(下図では、いきなりOperation変数を定義して /home/.../mydb.sh を指定しているが、まずは引数無しでdateコマンドとかで試すのがよいかと)

  • 「認証」に「SSHキー」を選択
  • 「SSHキー」をクリックすると、SSHキーの作成画面になる
  • RSAの場合は 最低2048ビットを推奨、とマニュアルに記載があったのでそれを指定して作成した "A minimum of 2048 bits is recommended for SSH-2 RSA."

「キーを生成」をクリックし、SSHキーのペアを作成する。
「公開鍵を共有」をクリックし、公開鍵を何らかの形で吸い上げる。

SSH公開鍵認証でログインできるよう設定する

①iPhone --(SSH公開鍵認証)--> ②OCI上のCompute --(oci cliで操作)--> ③Autonomous Database

先の手順「公開鍵を共有」で得られたファイルを appユーザの $HOME/.ssh/authorized_keysに貼り付け。

マニュアルに少し手順があるが、追加で、ファイルのパーミッションについても設定が必要。
Adding Users on an Instance - Creating Additional SSH-Enabled Users on Linux Instances

今回はapp ユーザで、以下の内容を実施した。

$ mkdir ~/.ssh

### authorized_keysファイルに 公開鍵の内容を記入する
$ echo "ssh-rsa AAA*************************9XB iPhone XX" >>  ~/.ssh/authorized_keys

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

### (.sshディレクトリ, authorized_keysファイルのパーミッションは以下の状態)
$ ls -la ~/.ssh
total 8
drwx------.  2 app app   29 Nov  7 13:00 .
drwx------. 13 app app 4096 Nov  7 14:36 ..
-rw-------.  1 app app  391 Nov  7 13:00 authorized_keys

iPhoneからショートカットを実行してみる

ここまできたら iPhoneからのSSH公開鍵認証→スクリプト実行ができるので、再生ボタン▶をクリックして試しに実行してみる。

start/stop/statusを変数にしたり、アイコンを整える

最終的にこんな感じに。赤枠内が既に作成済みのところ、その前後に、Operationという名前の変数にリストから選んだ値を代入したり、最後に結果表示を入れたり。iPhoneのショートカットを初めて触ったので、これがベストかどうかは全く分かりませんが...。

ショートカットに付けた名前「Autonomous Database」が、Siriで起動するときの言葉になる。

最後に、アイコンを優しい赤色の車に変更する。(Autonomous Databaseといえば、いつも赤い車の絵で表現されるので、それっぽいアイコンを選びたい)

実行 (Hey Siri!)

「Hey Siri! Autonomous Database!」 と呼びかけると、

startをクリックし、起動が完了すると、

実行 (ショートカットのアイコンをクリック)

アイコンクリックし、「Status」を選んだときの様子。

最後に

本資料の内容は、動作確認を目的に、エラーハンドリング等もない簡単なサンプルコードとなります。

参考