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

时间:2019-09-13 08:54:44

标签: 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'

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

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)。

有人有运气吗?总的来说,谷歌很擅长记录他们的东西,但这对我来说似乎很缺乏,实际上没有关于如何使其工作的明确文件。

3 个答案:

答案 0 :(得分:4)

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

1。下载并安装Cloud 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。安装以下先决条件:

a。Download and install Git

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

gcloud components install app-engine-python

c。Prepare your environment for Python development

10。为Redis实例创建Memorystore。输入以下命令在'europe-west2'区域中创建2 GiB Basic Tier Redis实例

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

11。创建实例后,输入describe命令获取实例的IP地址和端口。您将使用host和port值连接到实例。还要找到您的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。运行deploy命令

gcloud beta app deploy

20。部署完成后,请通过以下URL访问您的应用,并用您的Google Cloud项目ID替换[PROJECT_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。运行deploy命令

gcloud beta app deploy

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

Visitor number: 4

成功!

答案 1 :(得分:2)

目前(2019年9月),您实际上只能在us-central1区域中创建VPC连接器。考虑到它当前是beta功能。在向一般可用性过渡的同时,可用性将逐步添加到其他地区。

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

答案 2 :(得分:1)

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