如何从 Google 的标准 App Engine (Python 3.7) 连接到 Redis 实例 (memorystore)
How to connect to Redis instance (memorystore) from Google's Standard App Engine (Python 3.7)
我一直在尝试从 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 中可用,我在亚洲获得了 App Engine 实例和 Memorystore (Redis) 运行 -东北1.
有没有人运气好让这个工作?总的来说,google 非常擅长记录他们的东西,但这对我来说似乎很缺乏,真的没有关于如何让它工作的明确文档。
目前(2019 年 9 月),您确实只能在 us-central1 区域创建 VPC conector。考虑到它目前是一项 beta 功能。可用性将逐步添加到其他地区,同时走向普遍可用性。
您无法在没有 VCP 连接器的情况下连接到 MemoryStore 的原因是 App Engine 标准应用程序 运行 在 Google 拥有的网络中,而不是在您的网络之一中. VPC conector 本质上是一个 Compute Engine 实例 运行 在您的项目中选择的网络中,并设置为通过内部 IP 代理对 MemoryStore 的请求。
您可以在其他区域使用 VPC 连接器,但只能使用 gcloud 命令行。在 GUI 上,只有 us-central1 可用。
从 App Engine 标准环境应用程序和 App Engine Flex 应用程序 2020 连接到 Redis 实例
1.Download 并安装 Cloud SDK。
2.If 您已经安装了 Cloud SDK,通过 运行 以下命令更新它:
gcloud components update
3.Create一个新项目:
gcloud projects create [YOUR_PROJECT_ID] --set-as-default
4.Verify项目已创建:
gcloud projects describe [YOUR_PROJECT_ID]
5.Set您刚刚创建的项目:
gcloud config set core/project PROJECT_ID
6.Initialize 您的 App Engine 应用程序和您的项目并选择其区域:
gcloud app create --project=[YOUR_PROJECT_ID]
7.When提示,select你的App Engine应用所在的地区located.Remember地区,我们将在同一地区创建Redis实例和VPC连接器。我的 App Engine 应用程序在 europe-west2
8.Make 确保为您的项目启用了计费。需要将计费帐户链接到您的项目,以便将应用程序部署到 App Engine。
9.Install 满足以下先决条件:
b.Run 以下命令安装包含 Python 3.7 的 App Engine 扩展的 gcloud 组件:
gcloud components install app-engine-python
c.Prepare your environment for Python development
10.Create Redis 的 Memorystore instance.Enter 以下命令在 'europe-west2' 区域
中创建一个 2 GiB 基本层 Redis 实例
gcloud redis instances create myinstance --size=2 --region=europe-west2 /
--redis-version=redis_4_0
11.After实例创建完成,输入describe命令获取instance.You的IP地址和端口,将使用主机和端口值连接到instance.Also找到您的 Redis 实例的授权网络
gcloud redis instances describe myinstance --region=europe-west2
12.Configuring 无服务器 VPC Access.Make 确保在与您的应用程序和 Redis 实例相同的区域中创建连接器,并确保连接器连接到 Redis 实例的授权 VPC 网络。记住连接器的名称。
13.Ensure 已为您的项目启用无服务器 VPC 访问 API:
gcloud services enable vpcaccess.googleapis.com
14.Create 带有命令的连接器:
gcloud compute networks vpc-access connectors create connector --network default --region europe-west2 --range 10.10.0.0/28
15.Verify 您的连接器在使用前处于 READY 状态,输出应包含线路状态:READY
.
16.Clone python.
的存储库
git clone https://github.com/GoogleCloudPlatform/python-docs-samples
cd python-docs-samples/memorystore/redis
17.Preparing 用于部署的应用程序 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.Deploying应用到App Engine标准环境
cd ..
cp gae_standard_deployment/app.yaml .
19.Run部署命令
gcloud beta app deploy
20.After 部署完成,在下面的 URL 访问您的应用程序,将 [PROJECT_ID] 替换为您的 Google Cloud 项目 ID。
Visitor number: 4
成功!
21.Preparing 用于部署的应用程序 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.Deploying应用到App Engine标准环境
cd ..
cp gae_flex_deployment/app.yaml .
23.Run部署命令
gcloud beta app deploy
24.After 部署完成,在下面的 URL 访问您的应用程序,将 [PROJECT_ID] 替换为您的 Google Cloud 项目 ID。
Visitor number: 4
成功!
我一直在尝试从 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 中可用,我在亚洲获得了 App Engine 实例和 Memorystore (Redis) 运行 -东北1.
有没有人运气好让这个工作?总的来说,google 非常擅长记录他们的东西,但这对我来说似乎很缺乏,真的没有关于如何让它工作的明确文档。
目前(2019 年 9 月),您确实只能在 us-central1 区域创建 VPC conector。考虑到它目前是一项 beta 功能。可用性将逐步添加到其他地区,同时走向普遍可用性。
您无法在没有 VCP 连接器的情况下连接到 MemoryStore 的原因是 App Engine 标准应用程序 运行 在 Google 拥有的网络中,而不是在您的网络之一中. VPC conector 本质上是一个 Compute Engine 实例 运行 在您的项目中选择的网络中,并设置为通过内部 IP 代理对 MemoryStore 的请求。
您可以在其他区域使用 VPC 连接器,但只能使用 gcloud 命令行。在 GUI 上,只有 us-central1 可用。
从 App Engine 标准环境应用程序和 App Engine Flex 应用程序 2020 连接到 Redis 实例
1.Download 并安装 Cloud SDK。
2.If 您已经安装了 Cloud SDK,通过 运行 以下命令更新它:
gcloud components update
3.Create一个新项目:
gcloud projects create [YOUR_PROJECT_ID] --set-as-default
4.Verify项目已创建:
gcloud projects describe [YOUR_PROJECT_ID]
5.Set您刚刚创建的项目:
gcloud config set core/project PROJECT_ID
6.Initialize 您的 App Engine 应用程序和您的项目并选择其区域:
gcloud app create --project=[YOUR_PROJECT_ID]
7.When提示,select你的App Engine应用所在的地区located.Remember地区,我们将在同一地区创建Redis实例和VPC连接器。我的 App Engine 应用程序在 europe-west2
8.Make 确保为您的项目启用了计费。需要将计费帐户链接到您的项目,以便将应用程序部署到 App Engine。
9.Install 满足以下先决条件:
b.Run 以下命令安装包含 Python 3.7 的 App Engine 扩展的 gcloud 组件:
gcloud components install app-engine-python
c.Prepare your environment for Python development
10.Create Redis 的 Memorystore instance.Enter 以下命令在 'europe-west2' 区域
中创建一个 2 GiB 基本层 Redis 实例gcloud redis instances create myinstance --size=2 --region=europe-west2 /
--redis-version=redis_4_0
11.After实例创建完成,输入describe命令获取instance.You的IP地址和端口,将使用主机和端口值连接到instance.Also找到您的 Redis 实例的授权网络
gcloud redis instances describe myinstance --region=europe-west2
12.Configuring 无服务器 VPC Access.Make 确保在与您的应用程序和 Redis 实例相同的区域中创建连接器,并确保连接器连接到 Redis 实例的授权 VPC 网络。记住连接器的名称。
13.Ensure 已为您的项目启用无服务器 VPC 访问 API:
gcloud services enable vpcaccess.googleapis.com
14.Create 带有命令的连接器:
gcloud compute networks vpc-access connectors create connector --network default --region europe-west2 --range 10.10.0.0/28
15.Verify 您的连接器在使用前处于 READY 状态,输出应包含线路状态:READY
.
16.Clone python.
的存储库git clone https://github.com/GoogleCloudPlatform/python-docs-samples
cd python-docs-samples/memorystore/redis
17.Preparing 用于部署的应用程序 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.Deploying应用到App Engine标准环境
cd ..
cp gae_standard_deployment/app.yaml .
19.Run部署命令
gcloud beta app deploy
20.After 部署完成,在下面的 URL 访问您的应用程序,将 [PROJECT_ID] 替换为您的 Google Cloud 项目 ID。
Visitor number: 4
成功!
21.Preparing 用于部署的应用程序 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.Deploying应用到App Engine标准环境
cd ..
cp gae_flex_deployment/app.yaml .
23.Run部署命令
gcloud beta app deploy
24.After 部署完成,在下面的 URL 访问您的应用程序,将 [PROJECT_ID] 替换为您的 Google Cloud 项目 ID。
Visitor number: 4
成功!