如何从 Google 的标准 App Engine (Python 3.7) 连接到 Redis 实例(内存存储)

Nix*_*arn 4 google-app-engine redis google-cloud-platform google-cloud-memorystore

我一直在尝试从 App Engine 实例连接到 Redis 实例,但没有成功。我遇到连接超时。

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

env_variables:
  REDIS_HOST: '10.0.0.3'
  REDIS_PORT: '6379'
Run Code Online (Sandbox Code Playgroud)

并尝试按照示例中指定的方式进行连接:

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)
Run Code Online (Sandbox Code Playgroud)

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

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

mar*_*doi 6

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

1.下载并安装云SDK。

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

gcloud components update
Run Code Online (Sandbox Code Playgroud)

3.创建一个新项目:

gcloud projects create [YOUR_PROJECT_ID] --set-as-default
Run Code Online (Sandbox Code Playgroud)

4.验证项目已创建:

gcloud projects describe [YOUR_PROJECT_ID]     
Run Code Online (Sandbox Code Playgroud)

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

gcloud config set core/project PROJECT_ID
Run Code Online (Sandbox Code Playgroud)

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

gcloud app create --project=[YOUR_PROJECT_ID]
Run Code Online (Sandbox Code Playgroud)

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

8.确保您的项目启用了计费功能。需要将计费帐户链接到您的项目,以便将应用程序部署到 App Engine。

9.安装以下先决条件:

A。下载并安装 Git

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

gcloud components install app-engine-python
Run Code Online (Sandbox Code Playgroud)

C。准备 Python 开发环境

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

gcloud redis instances create myinstance --size=2 --region=europe-west2 /
--redis-version=redis_4_0
Run Code Online (Sandbox Code Playgroud)

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

gcloud redis instances describe myinstance --region=europe-west2
Run Code Online (Sandbox Code Playgroud)

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

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

gcloud services enable vpcaccess.googleapis.com
Run Code Online (Sandbox Code Playgroud)

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

gcloud compute networks vpc-access connectors create connector --network default --region europe-west2 --range 10.10.0.0/28
Run Code Online (Sandbox Code Playgroud)

15.使用前请验证连接器是否处于 READY 状态,输出应包含行 state: READY

16.克隆 python 存储库。

git clone https://github.com/GoogleCloudPlatform/python-docs-samples
cd python-docs-samples/memorystore/redis
Run Code Online (Sandbox Code Playgroud)

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

 cd gae_standard_deployment/
 cat app.yaml
Run Code Online (Sandbox Code Playgroud)

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>'

Run Code Online (Sandbox Code Playgroud)

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

cd ..
cp gae_standard_deployment/app.yaml .
Run Code Online (Sandbox Code Playgroud)

19.运行部署命令

gcloud beta app deploy
Run Code Online (Sandbox Code Playgroud)

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

Visitor number: 4
Run Code Online (Sandbox Code Playgroud)

成功!

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

cd gae_flex_deployment/
cat app.yaml
Run Code Online (Sandbox Code Playgroud)

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

Run Code Online (Sandbox Code Playgroud)

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

cd ..
cp gae_flex_deployment/app.yaml .
Run Code Online (Sandbox Code Playgroud)

23.运行部署命令

gcloud beta app deploy
Run Code Online (Sandbox Code Playgroud)

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

Visitor number: 4
Run Code Online (Sandbox Code Playgroud)

成功!