尝试使用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で使えるようになっています

广告
将在 10 秒后关闭
bannerAds