LoginSignup
4
2

More than 1 year has passed since last update.

Cloud Function&Cloud Run 別プロジェクトCloud SQLの接続方法

Posted at

はじめに

あまり調べても公式ドキュメントしかわかるのがなかったので手順を記載しておきます。

やること

プロジェクト①にある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アクセスユーザーのロールを付与した同名のアカウントをホストプロジェクト側に作成する
Run内のサービスエージェント等のアカウント

IAM内のサービスエージェントに付与した権限

2. 使用するサービスにアクセスするコネクタを指定する

下記画像にある各Functions、Runのサービスでコネクタを指定する
※今回はプライベートIP経由で接続するためラジオボタンには「プライベート IP へのリクエストだけを VPC コネクタ経由でルーティングする」を選択する
Cloud Runサービス詳細画面
Cloud Functions詳細画面

3. 接続先Cloud SQLを指定する(Cloud Runのみ)

サービスの詳細画面で「+接続を追加」ボタンを押下後カスタム接続文字列を選択し「プロジェクトID:プロジェクトのリージョン:SQLインスタンス名」を入力する
Cloud Run Cloud SQL接続指定画面

あとがき

これでRunやFunctionsの処理内で別プロジェクトのDBに接続が可能となりました。
DB接続のライブラリはpgpyを使いましたが上記の設定をすればどんな方法でも接続は出来ると思います。
※今回はホストプロジェクト側でコネクタを作成いたしましたが、サービスプロジェクト側でコネクタを作成する場合手順が少し異なります.....

機会があればGCPに限らず業務で学んだことを少しでも発信していきます!!

参考ドキュメント

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2