我一直试图从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)。
有人有运气吗?总的来说,谷歌很擅长记录他们的东西,但这对我来说似乎很缺乏,实际上没有关于如何使其工作的明确文件。
答案 0 :(得分:4)
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。安装以下先决条件:
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可用。