2

我一直在尝试从 App Engine 实例连接到 Redis 实例,但没有任何运气。我得到一个连接超时。

我在 app.yaml 中设置了主机和端口:

env_variables:
  REDIS_HOST: '10.0.0.3'
  REDIS_PORT: '6379'

并尝试按照示例中的说明进行连接:

redis_host = os.environ.get('REDIS_HOST', 'localhost')
redis_port = int(os.environ.get('REDIS_PORT', 6379))
redis_client = redis.StrictRedis(host=redis_host, port=redis_port)

但它不起作用,一些文档似乎需要 en vpc 访问连接器,但这些仅在 us-cental1 中可用,并且我在 asia-northeast1 中运行了 App Engine 实例和 Memorystore (Redis)。

有没有人有运气让这个工作?一般来说,谷歌非常擅长记录他们的东西,但这对我来说似乎缺乏,没有关于如何让它工作的明确文档。

4

3 回答 3

4

从 App Engine 标准环境应用程序和 App Engine Flex 应用程序 2020 连接到 Redis 实例

1.下载并安装云SDK。

2.如果您已经安装了 Cloud SDK,请运行以下命令对其进行更新:

gcloud components update

3.新建项目:

gcloud projects create [YOUR_PROJECT_ID] --set-as-default

4.验证项目是否已创建:

gcloud projects describe [YOUR_PROJECT_ID]     

5.设置刚刚创建的项目:

gcloud config set core/project PROJECT_ID

6.使用您的项目初始化您的 App Engine 应用并选择其区域:

gcloud app create --project=[YOUR_PROJECT_ID]

7.出现提示时,选择您希望 App Engine 应用程序所在的区域。记住该区域,我们将在同一区域创建 Redis 实例和 VPC 连接器。我的 App Engine 应用程序在europe-west2

8.确保为您的项目启用计费。结算帐户需要与您的项目相关联,才能将应用程序部署到 App Engine。

9.安装以下先决条件:

一个。下载并安装 Git

b.运行以下命令以安装包含适用于 Python 3.7 的 App Engine 扩展的 gcloud 组件:

gcloud components install app-engine-python

C。为 Python 开发准备环境

10.为 Redis 实例创建 Memorystore。输入以下命令在“europe-west2”区域创建一个 2 GiB 基本层 Redis 实例

gcloud redis instances create myinstance --size=2 --region=europe-west2 /
--redis-version=redis_4_0

11.创建实例后,输入describe命令获取实例的IP地址和端口。您将使用主机和端口值连接到实例。同时找到您的Redis实例的授权网络

gcloud redis instances describe myinstance --region=europe-west2

12.配置无服务器VPC访问。确保您在与您的应用程序和Redis实例相同的区域创建连接器,并确保连接器连接到Redis实例的授权VPC网络。记住连接器的名称。

13.确保为您的项目启用无服务器 VPC 访问 API:

gcloud services enable vpcaccess.googleapis.com

14.使用以下命令创建连接器:

gcloud compute networks vpc-access connectors create connector --network default --region europe-west2 --range 10.10.0.0/28

15.在使用之前验证您的连接器是否处于就绪状态,输出应包含线路状态:READY

16.克隆python的存储库。

git clone https://github.com/GoogleCloudPlatform/python-docs-samples
cd python-docs-samples/memorystore/redis

17.准备应用程序以部署App Engine Standard。更新应用程序的配置以指定您的无服务器 VPC 访问连接器以及您的 Redis 实例的 IP 地址和端口:

 cd gae_standard_deployment/
 cat app.yaml

runtime: python37
entrypoint: gunicorn -b :$PORT main:app

# Update with Redis instance details
env_variables:
  REDISHOST: '<REDIS_IP>'
  REDISPORT: '6379'

# Update with Serverless VPC Access connector details
vpc_access_connector:
  name: 'projects/<PROJECT_ID>/locations/<REGION>/connectors/<CONNECTOR_NAME>'

18.将应用部署到App Engine标准环境

cd ..
cp gae_standard_deployment/app.yaml .

19.运行部署命令

gcloud beta app deploy

20.部署完成后,通过以下 URL 访问您的应用,将 [PROJECT_ID] 替换为您的 Google Cloud 项目 ID。

Visitor number: 4

成功!

21.为部署App Engine Flex准备应用程序。更新应用程序的配置以指定您的 Redis 实例的 IP 地址和端口:

cd gae_flex_deployment/
cat app.yaml

cp gae_flex_deployment/app.yaml 。


runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
  python_version: 3

# Update with Redis instance IP and port
env_variables:
  REDISHOST: '<REDIS_IP>'
  REDISPORT: '6379'

# Update with Redis instance network name
network:
  name: default

22.将应用部署到App Engine标准环境

cd ..
cp gae_flex_deployment/app.yaml .

23.运行部署命令

gcloud beta app deploy

24.部署完成后,通过以下 URL 访问您的应用,将 [PROJECT_ID] 替换为您的 Google Cloud 项目 ID。

Visitor number: 4

成功!

于 2020-03-13T11:21:10.303 回答
2

目前(2019 年 9 月),您确实只能在 us-central1 区域创建 VPC 连接器。考虑到它目前是一个测试版功能。可用性将逐步添加到其他地区,同时向一般可用性迈进。

如果没有 VCP 连接器,您将无法连接到 MemoryStore 的原因是 App Engine Standard 应用程序在 Google 拥有的网络中运行,而不是在您的网络中。VPC 连接器本质上是在项目中您选择的网络中运行的 Compute Engine 实例,并设置为通过内部 IP 代理对 MemoryStore 的请求。

于 2019-09-13T09:18:25.690 回答
1

您可以在其他区域使用 VPC 连接器,但只能使用 gcloud 命令行。在 GUI 上,只有 us-central1 可用。

于 2019-09-13T18:25:23.727 回答