首页 > 解决方案 > App Engine 中的 Google Cloud Memorystore (Redis) ETIMEDOUT

问题描述

我正在编写一个 NodeJS 应用程序并尝试连接到 GCP Redis MemoryStore,但我收到了ETIMEDOUT 10.47.29.131:6379错误消息。10.47.29.131对应REDISHOST于。我正在尝试通过其内部私有 IP 访问服务器。

虽然该应用在安装了本地 Redis 的情况下可以在本地工作,但在部署到 GCP AppEngine 时却不能。

我的 GCP 设置

重新分布: 在此处输入图像描述

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我找不到“定义受信任的图像项目”。任何地方

我在这里想念什么?

标签: google-app-enginegoogle-cloud-platformredis

解决方案


好吧,事实证明,问题在于我为 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-instance europe-west1,现在一切正常。

因此,redis 区域必须与 AppEngine 区域完全相同。region1与 相同region,但region2region3不同region


推荐阅读