Tusnori
@Tusnori (space)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Cloud SQLの状態をAPI経由で確認したい

Google CloudのCloud SQLでインスタンスの状態(起動しているとか停止している)を確認したいんだけど、
REST(v1beta4)で情報を取得して中身を確認してたらふと疑問が・・・・

疑問点

RESTの取得結果は以下のフォーマットで出力されます。公式ドキュメントはここ

{
  "kind": string,
  "state": enum (SqlInstanceState),
  "databaseVersion": enum (SqlDatabaseVersion),
  "settings": {
    object (Settings)
 ============ (無関係部分の省略)===============
  "outOfDiskReport": {
    object (SqlOutOfDiskReport)
  }
}

 
インスタンスの状態なんで、stateの値を見ればOKかな?っと思ったのですが、起動していても停止していてもインスタンスとして正常(サスペンドしたり、メンテなどしてない)であれば一律「RUNNABLE」という状態になってしまうようです。じゃあどこで起動、停止をジャッジするかというと、おそらくsetting内のactivationPolicyがNever(停止)、ALWAYS(起動)になっていることを確認すればよさそう。

なぜstateとactivationPolicyとで2つに分けて状態を分けて管理するのか良く分かんないんですが、理由があるんでしょうか?ちなみにCompute Engineのインスタンス情報には、status(PROVISIONING,STAGING,RUNNING, TOPPING,SUSPENDING, SUSPENDED,REPAIRING,TERMINATED)があり、こっちは直感的に理解しやすいなと思いました。

0

CloudSQLにそこまで詳しくなく、実際にAPIを叩いたわけでもない(ドキュメントを読んだだけ)ですが…

activationPolicyは状態ではなく設定のように読めます。リンクを張っていただいたドキュメントにも

Specifies when the instance is activated.

とあり、直訳すると「インスタンスが起動したときにどうするか、を指定する」です。

Cloud Monitoring APIのリファレンス には database/instance_stateRUNNABLE のほかに RUNNING があり、起動しているかどうかを取れそうに見えます。CloudSQLのAPIで取れないのには何か事情があるのかもしれませんね。

ところで、

Google CloudのCloud SQLでインスタンスの状態(起動しているとか停止している)を確認したい

には、インスタンスにpingを打つなり、インスタンス内の適当なテーブルをSELECTするのが良いと思いました。特にインスタンスが起動していても、内部のデータベースやテーブルが利用可能ではない、というケースもあるので。

1Like

@mamo3gr
ご確認ありがとうございます!
確かにCloud APIで起動してるか=DBとして利用可能でない可能性があるので、
selectとかで実際にデータ拾ってきた方がいいですね。

0Like

Your answer might help someone💌