Google Cloud Memorystore (Redis) ETIMEDOUT в App Engine - PullRequest
0 голосов
/ 12 марта 2020

Я пишу приложение NodeJS и пытаюсь подключиться к GCP Redis MemoryStore, но я получаю сообщение об ошибке ETIMEDOUT 10.47.29.131:6379. 10.47.29.131 соответствует REDISHOST. Я пытаюсь связаться с сервером по внутреннему частному IP-адресу.

Хотя приложение работает локально с установленным локальным Redis, оно не работает при развертывании в GCP AppEngine.

Мой GCP- Настройка

  • Экземпляр Redis, работающий в расположении europe-west3-a
  • Создан соединитель в разделе «Доступ к серверу VP C», который находится в europe-west3
  • Redis и VP C -коннектор находятся в одной сети "по умолчанию".
  • App Engine работает на западе Европы

Redis isntance: enter image description here

VP C -коннектор: enter image description here

app.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

Я следовал этим инструкциям, чтобы установить все up: 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 Ответ

0 голосов
/ 13 марта 2020

Ну, оказывается, проблема была в регионе, который я выбрал для экземпляра Redis.

Из Документация :

Важно : Для подключения к экземпляру Memorystore for Redis подключающийся клиент должен находиться в той же области , что и экземпляр.

Область конкретное c географическое местоположение, где вы можете использовать свои ресурсы. Каждый регион подразделяется на несколько зон.

Например, регион 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.

...