私はしばらくの間、AppEngineとCloudSQLに取り組んできました。
最近、DBのパブリックアクセスを無効にしました。それ以来、App Engineを使用してCloudSQLに接続できません(AppEngineとCloudSQLの両方が同じGoogleCloudプロジェクトにあります)。
接続できる唯一の方法は、CloudSQLでApp EngineIPをホワイトリストに登録するときです。ただし、新しい展開ではIPが変更されるため、静的IPを追加することはこれに対する理想的な答えではありません。
[クラウドSQL接続]タブでは、次のように表示されます。
AppEngineの承認
このプロジェクトのすべてのアプリはデフォルトで承認されます。他のプロジェクトでアプリを承認するには、以下の手順に従ってください。このプロジェクトのアプリ:すべて承認済み。この場合、これは当てはまりません。
Cloud SQLAPIとCloudSQL AdminAPIが有効になっています。
問題をグーグルで検索し、ドキュメントやその他のスタックオーバーフローの質問の手順に従いました:
1)AppEngineからGoogleCloud SQLデータベースにアクセスできません
2)致命的なエラーの後にノードJS Mysql PROTOCOL ENQUEUE
3)ノード-MySqLの「PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR」
4)エラー:mysqlノードの致命的なエラーの後にクエリをエンキューできません
5)接続できませんgoogle appengineからのgooglecloud sql
これらのすべてはあまり役に立ちませんでした。
connection = mysql.createConnection({ host: 'INSTANCE_CONNECTION_NAME'、 user: 'db_user'、 password: 'db_password'、 database: 'db_name' });
期待: Get a Connection.
実際: getaddrinfo ENOTFOUND INSTANCE_CONNECTION_NAME INSTANCE_CONNECTION_NAME:3306
なぜINSTANCE_CONNECTION_NAME
2回かかるのかわかりません。
私があなたの問題を理解するならば、私に述べさせてください。
パブリックIPがありますが、プロジェクト内のアプリケーションのみがアクセスできるようにしています。これが事実であり、柔軟な環境を使用していることを考えると、以下の方法が役立つことがわかりました
1)接続を確立するときは、ホストを次のように記述します 172.17.0.6
2)app.yamlで、インスタンスの概要ページに記載されているようにINSTANCE_CONNECTION_NAMEを指定します。
3)デプロイして実行します。
これは、FlexibleNodeJs環境がDockerを使用して構築されているため機能します。使用されるデフォルトDBコンテナがでていると172.17.0.6
、インスタンスの接続名がここにアクセスされ、接続が間に確立されるApp Engine
とCloudSQL DB
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加