尝试使用Serverless VPC Access在GAE(标准版)中使用Cloud Memorystore
现在来的行业
可以在GAE(标准版)中访问Cloud Memorystore。
请注意
Serverless VPC Access目前处于beta阶段。
即使有任何变化,也不是我的责任。
Serverless VPC Access是什么?
请阅读官方文档以了解如何通过GAE(也称为Cloud Functions)在VPC内部的资源上通过专用IP地址进行访问。
那么,你具体能做些什么呢?
-
- CloudSQL
-
- Cloud Memorystore
- GCEサーバー
可以使GAE(以及Cloud Functions)能够在不将资源公开到外部的情况下访问位于某个VPC中的资源。
另外,在GAE的第二代(Python3.7)中,不再支持使用第一代(Python2.7)中可以使用的Memcache,但已提到了其替代方案。
尝试使用Cloud Memorystore
我使用GAE(Python3.7+Standard)尝试了Serverless VPC Access来使用Cloud Memorystore。
准备VPC.
请通过gcloud或Console创建VPC。
鉴于后续的原因,如果只是尝试Serverless VPC Access,不创建子网会更方便。
准备 Serverless VPC 访问
由于Serverless VPC Access似乎“IP范围不得与VPC网络中现有的IP地址保留重叠”,请将IP地址范围设置得合适。
顺便说一下,如果IP地址范围重叠,将会在GCE子网中出现以下类似错误。
“字段 ‘resource.ipCidrRange’ 的值无效:’10.147.0.0/28’。自动子网模式网络中的扩展子网络不能与 ‘10.128.0.0/9’ 重叠。”
准备 Cloud Memorystore
我在创建的VPC中创建了一个Cloud Memorystore。
因为在连接属性中会显示IP地址和端口,所以我会记下来。
GAE的准备工作
即使在GAE Standard上,您仍然可以像在GAE Flexible上一样使用它。
# -*- coding: utf-8 -*-
from flask import Flask, request
import os
import redis
app = Flask(__name__)
redis_host = os.environ.get('REDISHOST', 'localhost')
redis_port = int(os.environ.get('REDISPORT', 6379))
redis_client = redis.StrictRedis(host=redis_host, port=redis_port)
@app.route('/hoge', methods=['GET'])
def hoge_request():
value = redis_client.incr('counter', 1)
return str(value), 200
app.yaml -> 应用程序配置文件.yaml
runtime: python37
service: default
entrypoint: gunicorn handlers:app --workers=1
env_variables:
REDISHOST: CloudMemorystoreのIPアドレス
REDISPORT: CloudMemorystoreのポート
vpc_access_connector:
name: "projects/projectのID/locations/asia-northeast1/connectors/コネクタの名前"
handlers:
- url: /hoge
script: auto
需要的文件.txt
flask
gunicorn
redis
在官方文档中也提到,需要给它加上beta标志(※)。
gcloud beta app deploy app.yaml
如果不加入beta,部署将成功,但在访问部署后的Memorystore时会失败。
最终成果
每次访问时,Redis将保存并递增计数。
> curl "https://エンドポイント.appspot.com/hoge"
8
> curl "https://エンドポイント.appspot.com/hoge"
9
其它
-
- GAEとServerless VPC Accessは同じリージョンである必要があります
リリースノートには無いですが、いつの間にかasia-northeast1で使えるようになっています