我当前正在尝试将App Engine node.js服务连接到Google Cloud Memorystore。 在此guide之后,我需要同时在相同的网络和区域(以我的情况为欧洲)中运行。这似乎是不可能的,因为我只能在 europe-west-1 或 europe-west-4 中创建Redis实例,而App Engine为我提供了 europe-west < / em>, europe-west-2 或 europe-west-3 。
我假设“相同区域”代表 europe-west-x 吗?如果是这样,我仍然无法连接,如gcloud控制台(对于我的活动Redis实例)所述,在IP X.X.X.X:XXXX
上配置Node.js,应用抛出连接失败,ETIMEDOUT
是地区原因吗?
实例的授权网络设置为default
,应用程序 app.yaml 具有:
network:
name: default
更新:
即使我在 europe-west-1 中拥有GAE,并且在 europe-west 中拥有Memorystor,我也会得到
Redis与X.X.X.X的连接失败:XXXX-连接ETIMEDOUT X.X.X.X:XXXX
我正在使用node_redis和以下代码片段来测试连接(REDIS_PORT和REDIS_IP是我在Memorystore实例页面上看到的值):
const redis = require('redis');
let redisClient = redis.createClient(REDIS_PORT, REDIS_IP);
redisClient.set("string key", "string val", redis.print);
redisClient.hset("hash key", "hashtest 1", "some value", redis.print);
redisClient.hset(["hash key", "hashtest 2", "some other value"], redis.print);
redisClient.hkeys("hash key", function (err, replies) {
console.log(replies.length + " replies:");
replies.forEach(function (reply, i) {
console.log(" " + i + ": " + reply);
});
redisClient.quit();
});
redisClient.on("error", function (err) {
console.log("Redis rror " + err);
});
答案 0 :(得分:1)
地区是特定的地理位置,每个地区都有不同的区域(或只有一个)。例如, europe-west1-b 和 europe-west1-c 是同一区域(europe-west1),但区域不同( b 或 c )。
此外, europe-west1 和 europe-west2 是不同的区域,就像 europe-west1 和 us-central1 < / em>。
关于您的问题, europe-west 与 europe-west1 相同,因此您应该选择将GAE连接到Memorystore的方法。如果您为区域选择两个不同的“数字”,因为它们是不同的区域,则将无法连接。
以下是说明“ Regions and zones”的文档:
- 区域是区域的集合。区域具有到同一区域中其他区域的高带宽,低延迟网络连接。 [...]
- 区域是区域内的隔离位置。区域的标准名称由
region
-zone
组成。 [...]
答案 1 :(得分:1)
我意识到GAE服务必须在flex环境中运行,因此该应用程序也基于 Google Compute Engine 。 app.yaml中缺少n
。 GAE和Memorystore之间的通信正在使用此配置。
答案 2 :(得分:0)
我遇到了完全相同的问题,即使我的env: flex
中有app.yaml
,但这仍然给我ETIMEDOUT。
根据文档,我必须配置一个VPC连接器,并将其传递到app.yaml中的vpc_access_connector
,仍然无法正常工作。
您是否必须执行相同操作,或者在没有VPC连接器的情况下也可以正常工作?