問題タブ [cloud-sql-proxy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring-boot - Cloud Run エラーで SpringBoot を Cloud SQL に接続すると、接続が拒否されました
Maven SpringbootプロジェクトをGoogle Cloud Runにデプロイし、 Cloud Run からCloud SQLに接続しようとしています。接続するヘルパーとしてhttps://github.com/spring-cloud/spring-cloud-gcp/tree/master/spring-cloud-gcp-samples/spring-cloud-gcp-data-jpa-sampleを使用していますCloud SQL に。ローカルで作業すると、このライブラリを使用してインスタンスに接続しgcloud auth application-default login
、プロキシを作成できます。ただし、Cloud Run にデプロイすると、次の例外が発生しました。
また、Cloud Run (プロファイル: qa
) とローカル (デフォルト プロファイル)で異なるプロファイルを実行しています。
明確化: 私のローカル環境は、Docker イメージの MySql を使用しています。これは、ローカル データベースに接続することを意味します。これが、デフォルト プロファイル用にdatasource.url
内部にある理由です。application.yml
datasource.url
さらに、(デフォルトのプロファイル)から削除しapplcation.yml
て、Spring が接続ターゲットについて混乱するかどうかをテストしようとしましたが、エラーがまだ残っていることがわかりました。
編集 1
必要に応じて、Cloud Run サービスにアタッチされた cloud-sql-instance を既に設定しています。私のSQL インスタンスは、パブリック IP とプライベート IP の両方を許可し、非セキュア (非 SSL) 接続を許可します。アカウントの IAM ポリシー:
${PROJECT_ID}-compute@developer.gserviceaccount.com
(デフォルト SA) :Project Editor / Cloud SQL Admin
<Cloud Run Service Agent>
:Cloud Run Service Agent
公式ドキュメントによると、Cloud Run は特定のサービス アカウントを使用して Cloud SQL に対して認証を行うとのことでしたCloud SQL Admin/Client
。<Cloud Run Service Agent>
編集 2
これが私のpom.xml
編集 3
ローカル デプロイを介して Cloud SQL に接続できるようになりました。Cloud Build トリガーを介してデプロイすると、SQL インスタンスに接続できないようです。私は次のように接続文字列を使用しています: <project_id>:asia-southeast1:farose-test-db
Cloud Run はデフォルトのサービス アカウントを使用しています。
- Cloud SQL クライアント
- Cloud Run 呼び出し元
- 編集者
編集 4
この問題は、ビルド ステップ中にイメージ内のいくつかのファイルが見つからないことが原因で発生したようです。これは、ローカルでのビルドとデプロイがうまく機能する理由を説明しています。今、kaniko executor からキャッシュを無効にしました。
java - Spring Boot アプリケーションと Google Cloud SQL を接続するための推奨される方法は何ですか?
Google のドキュメントを読むと、推奨される方法はクラウド SQL プロキシの使用であることがわかります。
パブリック IP アドレスを使用して Google Kubernetes Engine から Cloud SQL に安全に接続するには、Cloud SQL Proxy を使用する必要があります。
春のドキュメントを読むと、反対側から次の実装方法が表示されます。
依存関係を追加:
プロパティを指定します。
私は春の方法を試してみましたが、うまくいきましたが、Googleのドキュメントのために推奨される方法であるかどうかはわかりません. 明確にしていただけますか?
PS
CloudSQL 側でパブリック IP からプライベート IP に切り替えたときに Spring Boot アプローチが機能しなくなりましたが、それを回復する方法がわかりません。