Google Cloud RunServiceをGoogleCloudSQLデータベースに接続する

Oct 30 2020

私は2つのグーグルクラウドサービスを持っています:

  1. Google Cloud Runサービス(ノードJ /ストラップ)
  2. Google Cloud SQLサービス(Mysql)

UIからGoogleCloud RunServiceにCloudSQL接続を追加し、Google Cloud SQLServiceのパブリックIPを取得しました。さらに、SQLServiceの承認済みネットワークにRunServiceIPを追加しました。

別のサーバー(Google Cloudの外部)から接続しようとすると、Google Cloud SQLServiceに簡単に接続してクエリを実行できます。しかし、まったく同じ設定(Ip、database_nameなど)でGCloud Run Service内から接続しようとすると、接続がハングし、ログにタイムアウトエラーが表示されます...

GcloudSQLがGCloudRUNからの接続を受け入れるように適切に許可するにはどうすればよいですか?

私はここで他の答えを探しましたが、それらはすべて非常に古く見えます(2015年頃)

回答

3 guillaumeblaquiere Oct 30 2020 at 02:55

3つのモードを使用してデータベースにアクセスできます

  • 組み込み機能を使用します。この場合、IPアドレスを指定する必要はありません。これは、ドキュメントで説明されているように、データベースと通信するために開いているLinuxソケットです。
  • CloudSQLプライベートIPを使用します。今回は、Cloud Runサービスで接続を構成する必要はありません。Linuxソケットではなく、IPを使用するため、接続は使用しません。このソリューションには2つのことが必要でした
    • まず、データベースをVPCに接続し、プライベートIPを付与します
    • 次に、CloudRunのプライベートIPトラフィックをVPC経由でルーティングする必要があります。このためには、サーバーレスVPCコネクタを作成してからCloudRUnサービスに接続する必要があります
  • CLoudSQLパブリックIPを使用します。今回も、Cloud Runサービスで接続を構成する必要はありません。Linuxソケットではなく、IPを使用するため、接続を使用しません。これを実現するには、より多くの手順が必要です(そして安全性が低くなります)
    • CloudRunのすべての出力トラフィックをVPC経由でルーティングする必要があります。このためには、サーバーレスVPCコネクタを作成してからCloudRUnサービスに接続する必要があります
    • サーバーレスVPCコネクタと出力接続パラメータを使用してCloudRunサービスを「すべて」にデプロイします
    • 次に、クラウドNATを作成して、すべてのVPCコネクタのIP範囲トラフィックを単一のIP(またはIPのセット)にルーティングします(リンクはクラウド機能のドキュメントですが、まったく同じように機能します)
    • 最後に、CloudSQLで承認されたネットワークでCloudNATIPを承認します。

あなたの場合、Cloud Run IPをホワイトリストに登録しましたが、これは共有IPであり(他のサービスでも同じように使用できます!!注意してください)、常に同じとは限りません。Googleクラウドで使用されるIPアドレスのプールがあります。