首页 > 解决方案 > 将流量从 Windows EC2 实例转发到 ElasticSearch VPC Endpoint

问题描述

我有用于面向公众的 C# API 的 Windows EC2 实例。VPC(以及相关的 Internet 网关、子网等)都是默认的。

我现在已经使用他们更安全的 VPC 端点选项(而不是面向公众)设置了 AWS ElasticSearch 服务,并且我已将其关联到与我上面的 Windows EC2 实例相同的子网和 vpc。

我想让他们互相交谈。

https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-vpc.html阅读

看来您要做的是 ssh 隧道/端口将流量从 EC2 实例上的 localhost:9200 转发到实际的 Elastic Search 服务(通过该 VPC 端点)。

似乎这个命令是魔法发生的地方: ssh -i ~/.ssh/your-key.pem ec2-user@your-ec2-instance-public-ip -N -L 9200:vpc-your-amazon-es- domain.region.es.amazonaws.com:443

但这是针对 Linux EC2 实例的。

如果我在我的 Windows EC2 实例(API)中进行远程桌面访问,我该如何做到这一点,当我进入浏览器时,http://localhost:9200 会将流量发送到我的 VPC 端点:

vpc-your-amazon-es-domain.region.es.amazonaws.com:443

谢谢!

标签: amazon-ec2amazon-vpcssh-tunnelaws-vpcaws-elasticsearch

解决方案


好吧,那我来回答我的两个问题:

首先,它实际上非常简单,只需 RDP 到您的盒子并通过 VPC 端点直接访问实例。你不需要做任何古怪的事情,比如使用 netsh 命令或类似的东西进行端口转发。只需确保服务器(在我的情况下是我的 API)在同一个 VPC 上就可以了。我的连接字符串中有一个错误,这就是它没有连接的原因。为了确认,我 RDP'D 并能够直接在端口 80 上的浏览​​器中访问端点。虽然实际的 Elasticsearch 确实在端口 9200 上运行,但您不需要转发到 localhost:9200 --> vpc: 9200。

现在,关于第二个问题,关于在本地访问它,我认为问题在于,由于该服务缺少公共 IP 地址并且您无法访问它,因此您可以在 AWS 上进行一些复杂的设置,或者更简单的设置它现在可以在本地运行,直到您准备好使用 VPC(因此您的代码将运行)。另一种选择是使用安全组并暂时创建一个可公开访问的集群,然后当您的代码完成、搜索服务/层完成等时,您可以使用 VPC/安全 Elasticsearch 服务重新开始,应该就是这样。

许多人提到的另一件事是,如果您在本地计算机上设置自己的 Elasticsearch,然后在 EC2 上设置一个,它会更便宜/您可以更好地控制事物(这只是阅读博客并看到人们提到他们有多少挫败感用它)。


推荐阅读