我正在写一个nodejs应用程序,试图连接到gcps redis memorystore,但是我得到了 ETIMEDOUT 10.47.29.131:6379
错误消息。这个 10.47.29.131
对应于 REDISHOST
. 我正试图通过服务器的内部专用ip访问它。
虽然该应用程序在本地工作,并安装了本地redis,但在部署到gcp appengine时却没有。
我的gcp设置
redis示例在位置europe-west3-a上运行
在europe-west3的“无服务器vpc访问”下创建了一个连接器
redis和vpc连接器在同一个网络上“默认”。
appengine在西欧运行
redis公司:
vpc连接器:
应用程序.yml
runtime: nodejs
env: flex
automatic_scaling:
// or this but without env: flex (standard)
vpc_access_connector:
name: "projects/project-ID/locations/europe-west/connectors/connector-name"
beta_settings:
cloud_sql_instances: project-ID:europe-west3:name
env_variables:
REDISHOST: '10.47.29.131'
REDISPORT: '6379'
// removed this when trying without env: flex (standard)
network:
name: default
session_affinity: true
我按照这些指示来设置一切:https://cloud.google.com/memorystore/docs/redis/connect-redis-instance-standard
深入挖掘,我发现:https://cloud.google.com/vpc/docs/configure-serverless-vpc-access 他们提到了权限和 serverless-vpc-access-images
,并且在尝试按照说明操作时:https://cloud.google.com/compute/docs/images/restricting-image-access#trusted_images 我在任何地方都找不到“定义可信映像项目”
我错过了什么?
1条答案
按热度按时间bfrts1fy1#
原来,问题是我为redis示例选择的区域。
根据文件:
重要提示:为了连接到redis示例的memorystore,连接的客户机必须位于与该示例相同的区域内。
区域是您可以运行资源的特定地理位置。每个地区被细分为几个区域。
例如,美国中部的us-central1地区有us-central1-a、us-central1-b、us-central1-c和us-central1-f区。
尽管文档清楚地说,appengine和memorystore必须在同一个区域,但我对实际区域的假设是错误的。
当我创建appengine时,我在
europe-west
,与europe-west1
. 另一方面,当我创建redis示例时,我使用europe-west3
,假设west3
同一地区west
,这不是。由于appengines区域无法更改,因此我在中创建了另一个redis示例
europe-west1
现在一切正常了。因此,redis区域必须与appengine区域完全相同。
region1
与相同region
,但是region2
或者region3
与…不一样region
.