5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[GCP]Cloud FunctionsからプライベートIPアドレスを持つCloud SQLへのアクセス方法

Last updated at Posted at 2019-11-20

はじめに

Cloud FunctionsからプライベートIPアドレスを持つCloud SQLへのアクセス方法を記載しています。

手順

  1. VPCネットワークの作成
  2. ファイアウォールルールの作成
  3. Cloud SQLの作成
  4. Serverless VPC Access コネクタの作成
  5. Cloud Functions サービス アカウントに適切な権限を付与
  6. コネクタを使用するように関数を構成(デプロイ)

手順1〜3について
以下の記事にまとめております。
[GCP]プライベートIPアドレスを持つCloud SQL(MySQL)作成方法と、VPCネットワーク割り当て方法
https://qiita.com/hanzawak/items/84ad707ca9596eb98bcc

手順4〜6について
本記事にまとめています。
なお以下のサイトを参考に作成しております。
https://cloud.google.com/functions/docs/connecting-vpc?hl=ja

手順

Serverless VPC Access コネクタの作成

Serverless VPC Access API を有効化

gcloud services enable vpcaccess.googleapis.com

コネクタを作成

gcloud beta compute networks vpc-access connectors create CONNECTOR_NAME \
--network VPC_NETWORK \
--region REGION \
--range IP_RANGE
入力値 内容
CONNECTOR_NAME コネクタの名前。なんでも良いです
VPC_NETWORK 作成済みのVPCネットワーク名
REGION Cloud FunctionsとCloud SQLが配置されているリージョン
IP_RANGE 未使用の CIDR /28 IP 範囲。VPC ネットワーク内の既存の IP アドレス予約と重複してはならないたとえば10.1.0.0/28といったように指定する

Cloud Functionsの配置先リージョンの指定は、デプロイ時に--region asia-northeast1のようにフラグを追加するだけです。

コネクタの状態を確認

gcloud beta compute networks vpc-access connectors describe CONNECTOR_NAME --region REGION

出力にstate: READYが含まれていたらOKです。

Cloud Functions サービス アカウントに適切な権限を付与

プロジェクト番号の確認

gcloud projects describe PROJECT_ID --format="value(projectNumber)"

Cloud Functions サービス エージェントにviewerの役割を付与

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:service-PROJECT_NUM@gcf-admin-robot.iam.gserviceaccount.com \
--role=roles/viewer

Cloud Functions サービス エージェントに compute.networkUser の役割を付与

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:service-PROJECT_NUM@gcf-admin-robot.iam.gserviceaccount.com \
--role=roles/compute.networkUser

コネクタを使用するように関数を構成(デプロイ)

関数をデプロイ

gcloud beta functions deploy FUNCTION_NAME \
--vpc-connector projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME \
FLAGS...

FLAGS... は、関数のデプロイ時に渡す他のフラグです。
これでCloud FunctionsからCloud SQLへ通信できるはずです。

備考

Stackdriverのログで以下のようなものが出力されている場合は、Cloud FunctionsとCloud SQLの通信が取れていないものと思われます。
本記事の内容を実施しても以下のログが出力される場合は、以下を確認してください。

  • Cloud FunctionsとCloud SQLのリージョンが同じであるか
  • Cloud FunctionsとCloud SQLはVPCネットワークに追加しているか
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 111] Connection refused)")
Aborted connection 79914 to db: 'unconnected' user: 'root' host: 'localhost' (Got an error reading communication packets)" 
5
1
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
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?