2

我目前正在尝试将我的 App Engine node.js 服务连接到 Google Cloud Memorystore。按照本指南,我需要在同一网络和区域(在我的情况下为欧洲)中运行。这似乎是不可能的,因为我只能在europe-west-1europe-west-4中创建 Redis 实例,而 App Engine 为我提供europe-westeurope-west-2europe-west-3

我假设“同一地区”代表europe-west-x?如果这是真的,我仍然无法连接,X.X.X.X:XXXX按照 gcloud 控制台(对于我的活动 Redis 实例)中的描述在 IP 上配置 Node.js,应用程序会抛出连接失败,ETIMEDOUT.

是地区的原因吗?

该实例已将授权网络设置为default,并且应用程序app.yaml具有:

network: name: default

更新:

即使我按照建议在欧洲西部有 GAE,在欧洲西部Memorystor

Redis 连接到 XXXX:XXXX 失败 - 连接 ETIMEDOUT XXXX: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);
});
4

3 回答 3

2

区域是特定的地理位置,每个区域都有不同的区域(或只有一个区域)。例如,europe-west1-beurope-west1-c是同一区域 (europe-west1) 但不同的区域 ( bc )。

此外,europe-west1europe-west2是不同的区域,就像europe-west1us-central1一样。

关于您的问题,europe-westeurope-west1相同,因此您应该选择将 GAE 连接到 Memorystore。如果您为区域选择两个不同的“数字”,因为它们是不同的区域,您将无法连接。

这是解释“区域和区域”的文档:

  • 区域是区域的集合。区域与同一区域中的其他区域具有高带宽、低延迟的网络连接。[...]
  • 区域是区域内的孤立位置。区域的完全限定名称由region-组成zone。[...]
于 2018-10-23T10:55:06.333 回答
2

我意识到 GAE 服务必须在 flex 环境中运行,所以该应用程序也是基于Google Compute Engine的。app.yaml中env: flex缺少 。GAE 和 Memorystore 之间的通信正在使用此配置。

于 2018-10-29T09:54:06.850 回答
0

我遇到了完全相同的问题,即使我env: flexapp.yaml.

根据文档,我必须配置一个 VPC 连接器并将其传递给vpc_access_connectorapp.yaml,但仍然无法正常工作。

您是否必须这样做,还是在没有 VPC 连接器的情况下也可以工作?

于 2020-03-12T08:03:43.447 回答