これはStackOverflowでの最初の質問ですので、情報が不足している場合は失礼します。
Google AppEngineのNestJSからCloudSQLのPostgreSQLに接続するのに苦労しています。ローカル環境でアプリケーションを使用しようとすると、プログラムは機能しますが、Google App Engineでの本番環境では、機能しません。
私は日々苦労したので、ここで素晴らしいコミュニティに尋ねることにしました。
runtime: nodejs10
env: standard
default_expiration: "4d 5h"
env_variables:
DATABASE_HOST: < public IP for Cloud SQL instance >
DATABASE_USERNAME: username
DATABASE_PASSWORD: password
DATABASE_NAME: databasename
INSTANCE_CONNECTION_NAME: "PROJECT_ID:REGION:INSTANCE_ID:DATABASE_NAME"
handlers:
- url: /.*
secure: always
redirect_http_response_code: 301
script: auto
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
[Nest] 18 - 02/27/2020, 8:25:46 AM [TypeOrmModule] Unable to connect to the database. Retrying (3)... +34816ms
2020-02-27 08:25:46 default[20200227t163916] Error: connect ETIMEDOUT 34.84.188.209:5432 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1106:
また、クラウドSQLクライアント権限をGAEサービスアカウント(このサービスのようなもの[email protected])に追加しました。
以下に説明するように、package.jsonも追加しました。
"engines": {
"node": "10.x.x"
},
typeormオプションで、追加のソケットパスを追加しました。
extra: {
socketPath: `/cloudsql/<INSTANCE_CONNECTION_NAME>/`,
},
このオプションを設定する必要があるかどうかわかりません(両方を試しました)。
socketPath: `/cloudsql/<INSTANCE_CONNECTION_NAME>/.s.PGSQL.5432
or
socketPath: `/cloudsql/<INSTANCE_CONNECTION_NAME>
GitHubで提供されている例によると
INSTANCE_CONNECTION_NAME環境変数には、パラメーターとしてDATABASE_NAMEが含まれていません。
おそらくこれが原因で、インスタンスの名前がプロキシに対して解決されていない可能性があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加