Node.js+SequelizeでCloud RunからCloud SQLへ接続する方法
この記事について
この記事ではCloud Runで実行されるNode.js+SequelizeのコードからCloud SQLへ接続する方法について紹介します。
おおまかな手順
おおまかな手順を下記に示します。
- コーディング
- デプロイ
- データベースの準備
- Cloud SQL Admin APIの有効化
- IAMの設定
- Cloud Runの設定
- 動作確認
コーディング
下記のコマンドを実行してコーディングの準備をします。
mkdir cloudrun-cloudsql
cd cloudrun-cloudsql
npm init -y
npm install --save express mysql2 sequelize
touch main.js
エディタでmain.jsを開いて下記の内容を入力します。
続いてエディタでpackage.jsonを開いてscriptsに "start": "node main.js",
を追記します。
デプロイ
下記のコマンドを実行してCloud Runへデプロイします。
gcloud run deploy cloudrun-cloudsql \
--source . \
--region asia-northeast1 \
--platform managed \
--allow-unauthenticated
デプロイが完了するとService URLが表示されるので後の手順のために控えます。
ちなみにこの状態でブラウザでService URLにアクセスすると必要な設定が済んでいないためエラーメッセージが表示されます。
データベースの準備
ブラウザでCloud SQLのインスタンスのページにアクセスして下記2点を後の手順のために控えます。この際、コピーボタンを利用すると便利です。
- パブリックIPアドレス(例:12.34.56.78)
- 接続名(例:project-id:asia-northeast1:db-instance)
続いてCloud Shellを利用するなどして下記のSQL文を実行します。
Cloud SQL Admin APIの有効化
GCPのWebコンソールのキーワード検索で「Cloud SQL Admin API」と入力するなどして Cloud SQL Admin APIのページ に移動してAPIを有効化します。
IAMの設定
ブラウザで IAMのページ にアクセスします。
アカウントの一覧の中からCloud Runのコンテナを実行するサービスアカウント(デフォルトではCompute Engine default service account)を探して右側にあるペンのアイコンのボタンをクリックすると権限を編集するモーダルが表示されるので「Cloud SQL クライアント」のロールを追加します。
保存ボタンをクリックして変更を保存します。
Cloud Runの設定
ブラウザでCloud Runのサービスの詳細ページにアクセスしてページの上側にある「新しいリビジョンの編集とデプロイ」リンクをクリックします。
新しいリビジョンをデプロイするページが表示されたら「変数とシークレット」タブをクリックします。
「変数を追加」ボタンをクリックすると環境変数の名前と値の入力部が追加されるので下記の内容を入力します。なお、値の「12.34.56.78」と「/cloudsql/project-id:asia-northeast1:db-instance」の部分は先の手順で控えたパブリックIPアドレスと接続名にそれぞれ置き換えます。
- 名前: DB_URL
- 値: mysql://dbuser:dbpass@12.34.56.78/dbname?socketPath=/cloudsql/project-id:asia-northeast1:db-instance
続いて「接続」タブをクリックしてから「接続を追加」ボタンをクリックするとCloud SQL インスタンスを選択するセレクトボックスが表示されるのでクリックしてインスタンスを選択します。
ページの最後の方にある「デプロイ」ボタンをクリックしてデプロイを開始します。
デプロイが完了したらサービスの変更内容のページにリビジョンが追加されます。
動作確認
ブラウザでService URLにアクセスして [{"status":"OK"}]
と表示されることを確認します。
参考にしたWebページ
記事を作成する上で参考にしたWebページを下記に示します。
おわりに
Cloud RunからCloud SQLへ接続するには下記3点の設定を行う必要があるので面倒です。
- Cloud SQL Admin APIの有効化
- IAMの設定
- Cloud Runの設定
同じプロジェクトであればCloud SQL Admin APIの有効化とIAMの設定は1回設定すればOKなので楽になります。
この記事ではCloud Runの ソースコードからデプロイする機能 を利用しましたが、このやり方ではビルドに1〜2分くらい時間がかかるのでトライ&エラーを繰り返す場合は待ち時間が長くなります。
別の記事で Node.jsでCloud Runにコンテナをデプロイする方法 について紹介しており、こちらの記事では自前でコンテナイメージを作成する方法について説明しているので興味がありましたら併せてご覧いただければ幸いです。
この記事でCloud RunからCloud SQLになかなか接続できなくて困っている方の参考になれば幸いです。
最後まで読んでいただきありがとうございました!
Discussion