Database
PostgreSQL の Database を作成し、手元の client から接続するまでの手順です。接続には acloud db proxy を使います。
始める前に
- Project で
databaseが有効で、database.databasesの上限が設定されていること(Project と権限) - 作成する人に
roles/database.creator、接続する人に対象 Database のroles/database.connectorがあること
作成する
Console では Project の「資源」から「Database を作成」を開きます。CLI では次のとおりです。
acloud db create main --display-name "Main" --project PROJECT_ID
acloud db describe main
作成は Operation として受け付けられ、しばらく PENDING のままのことがあります。応答を受け取れなかった場合は、同じコマンドをもう一度実行します。止まった Operation は次のコマンドで再送できます。
acloud operations list
acloud operations retry OPERATION
接続する
acloud db proxy は手元に port を開き、Database の接続 gateway へ中継します。短時間だけ有効な client 証明書と、Database の login(user、password、dbname)を取得し、期限が近づくと次の接続前に更新します。鍵と証明書はメモリにだけ置き、ファイルに保存しません。
acloud auth login
acloud db proxy main --project PROJECT_ID --show-credentials
別の端末から、表示された dbname と user で接続します。gateway との間は proxy が暗号化するため、手元の接続では SSL を使いません。
psql "host=127.0.0.1 port=55432 sslmode=disable dbname=DBNAME user=USER"
--show-credentialsを付けると、起動時と証明書の更新時に login を表示します。標準出力が端末でない場合は表示せずに止まります。付けない場合は login を表示しません。- 証明書を取り直すと login も新しくなります。期限の 1 分前を過ぎると、次の接続の前に取り直します。
- 手元の port は
--portで変えられます。既定は 55432 です。 - CLI にログインしていない場合、proxy は browser を開かずに止まります。先に
acloud auth loginを実行します。
接続方式を変える
PostgreSQL の接続方式には、client 証明書を必須にする相互 TLS(MTLS)と、user と password で接続できる TLS(TLS)があります。変更には roles/database.operator が必要です。
acloud db connection describe main
acloud db connection update main --tls-mode TLS --expected-tls-mode MTLS
--expected-tls-modeには、直前のdescribeが示した方式を指定します。その間に別の変更があった場合は拒否されます。- 相互 TLS へ戻すと、user と password だけの client は新しい接続を張れなくなります。
- 保存後、gateway に反映されるまでの間は旧方式で接続を受け付けることがあります。
メモリ上限を変える
変更できるのは 256〜2048 MiB のメモリ上限です。変更すると compute が再起動します。
acloud db configuration describe main
acloud db configuration update main --memory-limit-mi 1024
結果が不明な応答だった場合は、再実行する前に describe で現在の値を確かめます。
使用量を見る
Console では Database 詳細の「オブザーバビリティ」に表示します。読取には roles/database.viewer 以上が必要です。
acloud db metrics storage main
acloud db metrics network main --period 24h
通信量は gateway が中継した量です。報告の無い区間は 0 と区別して表示します。
削除する
acloud db delete main --project PROJECT_ID
削除には roles/database.operator が必要で、Owner だけではできません。削除すると credential が失効し、Platform には削除済みの記録が残ります。同じ ID は再利用できません。