如何使用 Node.js 从 AWS CloudFront 连接到 AWS ElastiCache 集群?

时间:2021-01-09 01:39:17

标签: node.js amazon-web-services redis amazon-cloudfront amazon-elasticache

我是 AWS CloudFront 和 AWS 的新手。我有一个 Next.js(React SSR 框架)网站,我使用 serverless-nextjs (https://github.com/serverless-nextjs/serverless-next.js) 将其部署到 AWS 上。但是,我的网络应用程序还需要某种缓存。我决定使用 AWS 的 redis ElastiCache。我在 AWS 控制台上创建了一个 redis ElastiCache 集群。

我的尝试:

我像这样设置了连接到 redis ElastiCache 的代码:

import redis from 'redis';
...

export async function getServerSideProps() { // Server side function for Next.js
    const cache = redis.createClient(6379, "{PRIMARY-ENDPOINT-URL-AWS}");
}

然后我在我的 PC 上本地运行该网站。但是,我从 redis 收到超时错误:Error: connect ETIMEDOUT

我如何能够从 CloudFront 和我的本地 PC 连接到 redis ElastiCache 集群?

redis ElastiCache Cluster 窗口截图:

redis ElastiCache

1 个答案:

答案 0 :(得分:0)

无法直接从 AWS 外部(即您的本地工作站)连接到 ES。 ES 域旨在仅可从与 ES 域位于同一 VPC 中的资源(例如实例)中访问。来自docs

<块引用>

Elasticache 是一项设计用于在您的 VPC 内部使用的服务。由于 Internet 流量的延迟和安全问题,不鼓励外部访问。但是,如果出于测试或开发目的需要对 Elasticache 进行外部访问,则可以通过 VPN 完成

启用从 AWS 外部到您的 ES 的连接的唯一方法是在家庭/工作网络或 Direct Connect 之间建立 VPN 连接,如 AWS docs 中所述:

<块引用>

如果客户的 VPC 与数据中心之间存在通过 VPN 或 Direct Connect 的连接,也支持此方案。

但是,为了快速、临时设置,您可以在本地工作站和 ES 域之间使用 ssh 隧道。这将需要隧道将通过的一些跳转/基础 EC2 实例。