はじめに
あまり調べても公式ドキュメントしかわかるのがなかったので手順を記載しておきます。
やること
プロジェクト①にあるCloud SQLをプロジェクト②にあるCloud Run or Cloud Functionsの処理でプライベートIP経由で接続する
前提
・プロジェクト①をホストプロジェクト、プロジェクト②をサービスプロジェクトとする
・ホストプロジェクト側でサーバーレス VPC アクセスの API を有効にする
・サービスプロジェクト側で使用するサービス(Cloud Run、Cloud Functions)のAPIを有効にする
・使用するアクティブアカウントに下記ロールが付与する
・Computerネットワーク閲覧者(compute.networkViewer)
・プロジェクトIAM管理者(resourcemanager.projectIamAdmin)
・Service Usage管理者(serviceusage.serviceUsageAdmin)
・サーバーレスVPCアクセス管理者(vpcaccess.admin)
接続に必要なもの
ホストプロジェクト
・サーバーレスVPCアクセスコネクタ
・共有VPC
・Cloud SQLインスタンス(プライベートIP割り当て済)
サービスプロジェクト
・使用するサービス(Cloud Run、Cloud Functions)
手順
1. コネクタのアクセス権設定
下記画像にあるサービスエージェントにサーバレスVPCアクセスユーザーのロールを付与した同名のアカウントをホストプロジェクト側に作成する
2. 使用するサービスにアクセスするコネクタを指定する
下記画像にある各Functions、Runのサービスでコネクタを指定する
※今回はプライベートIP経由で接続するためラジオボタンには「プライベート IP へのリクエストだけを VPC コネクタ経由でルーティングする」を選択する
3. 接続先Cloud SQLを指定する(Cloud Runのみ)
サービスの詳細画面で「+接続を追加」ボタンを押下後カスタム接続文字列を選択し「プロジェクトID:プロジェクトのリージョン:SQLインスタンス名」を入力する
あとがき
これでRunやFunctionsの処理内で別プロジェクトのDBに接続が可能となりました。
DB接続のライブラリはpgpyを使いましたが上記の設定をすればどんな方法でも接続は出来ると思います。
※今回はホストプロジェクト側でコネクタを作成いたしましたが、サービスプロジェクト側でコネクタを作成する場合手順が少し異なります.....
機会があればGCPに限らず業務で学んだことを少しでも発信していきます!!
参考ドキュメント