ECS 的节点进程连接到 AWS Elasticache,但随后停止了

问题描述 投票:0回答:1

我尝试使用 NodeJS 从 ECS 实例与 Redis Elasticache 进行通信,日志显示它已连接,但没有发生任何其他情况。

  • 它们位于同一个 VPC 上
  • 它们位于同一子网中
  • ECS 的安全组允许任何出站 TCP 流量
  • Elasticache 的 SecurityGroup 允许 6379 和 6380 上的入站 TCP 流量

这是我正在运行的脚本:

const redis = require("redis");

(async () => {
  try {
    const client = redis.createClient({
      url: "redis://demo-cache-123abc.serverless.use1.cache.amazonaws.com:6379",
    });

    client.on("connect", () => console.log("Redis Client Connected"));
    client.on("ready", () => console.log("Redis Client is ready."));
    client.on("end", () => console.log("Redis Client has ended."));
    client.on("error", (err) => console.log("Redis Client Error", err));
    client.on("reconnecting", (err) => console.log("Redis Client is reconnecting...", err));

    console.log(`connecting...`);
    await client.connect();
    console.log(`connected!`);

    await client.set("key", "value123");
    const value = await client.get("key");

    console.log("value", value);

    await client.disconnect();
  } catch (error) {
    console.log("error:");
    console.log(error);
  }
})();

打印的日志是这样的:

connecting...
Redis Client Connected

然后它不会记录任何其他内容...没有错误。没有什么...

更奇怪的是该进程还在继续运行。如果我添加

setInterval(() => console.log(Date.now()), 3000)
那么日志每 3 秒打印一个新的时间戳。但我在
await client.connect();
行下面的代码永远不会执行。几乎就像承诺永远不会兑现......

从未记录任何错误。任务永远不会崩溃。它只是继续运行,并表示已连接,但从未与 Redis 交互。代码停止执行...

我什至不知道该问什么,除了我怎样才能让它工作?!我可以添加或删除或仔细检查哪些设置?

node.js amazon-web-services redis amazon-ecs amazon-elasticache
1个回答
0
投票

在 AWS 上,TLS 连接是强制性的(我没有找到关闭它的方法,而且我也不想这样做),所以我只需要添加一个简单的配置,上面的配置就开始工作。

const client = redis.createClient({
  url: "redis://demo-cache-123abc.serverless.use1.cache.amazonaws.com:6379",
  socket: {
    tls: true,
  },
});

大声喊出另一篇文章的答案:https://stackoverflow.com/a/75557575/4927236

© www.soinside.com 2019 - 2024. All rights reserved.