Jam*_*nan 3 amazon-web-services amazon-vpc amazon-kinesis amazon-elasticsearch amazon-kinesis-firehose
我正在使用Amazon Kinesis Data Generator将数据发送到测试 Kinesis Firehose Stream,以便在 Elasticsearch Service 集群中建立索引。
数据生成器发送一个相当基本的 json 文档进行处理,流元素工作正常,Lambda 转换也是如此。到目前为止,我已经验证并能够测试所有内容。仅当向我的 VPC 内的 Elasticsearch 发出请求时,我才会收到错误。
如果我将管道切换为使用公共 Elasticsearch 域,则效果很好,但当我在 VPC 内使用 Elasticsearch 域时,会收到503 错误。这是每个请求的一致错误,因此不是容量问题。
这是我看到的错误的示例。只是一个通用的 503。我不确定这是否来自负载均衡器或目标(Elasticsearch 本身)。
{
"deliveryStreamARN": "arn:aws:firehose:eu-west-2:xxx:deliverystream/firehose-test",
"destination": "arn:aws:es:eu-west-2:xxx:domain/elasticsearch-test",
"deliveryStreamVersionId": 1,
"message": "Error received from Elasticsearch cluster. <html><body><h1>503 Service
Unavailable</h1>\nNo server is available to handle this request.\n</body></html>",
"errorCode": "ES.ServiceException",
"processor": "arn:aws:lambda:eu-west-2:xxx:function:transform-test:$LATEST"
}
Run Code Online (Sandbox Code Playgroud)
VPC内的其他应用程序可以毫无问题地使用Elasticsearch服务。这似乎是 Firehose 特有的东西。
我已经阅读并重新阅读了文档,但无法弄清楚为什么相同的数据管道在公共 ES 域上工作正常,但在我的 VPC 内的 ES 域上却不能。我已经仔细检查了所有角色、策略、安全组和子网。Firehose 和 Elasticsearch 都使用相同的 VPC、安全组和子网。安全组的入站规则允许HTTPS。一切看起来都是正确的,但仍然出现错误,并且 Elastic 中没有任何内容被索引。
我还阅读了这篇 AWS 博客文章大约 15 遍,但毫无结果。 使用 Amazon Kinesis Data Firehose 在您的 VPC 隐私范围内将流数据引入 Amazon Elasticsearch Service
因此,经过几天的痛苦,我意识到我的 Firehose 设置错误/怪癖。
我的 Elasticsearch 集群是多可用区。创建 Firehose 时,我只是让它根据预先存在的 Elasticsearch 域选择默认安全组。我只在 Firehose 上定义了一个安全组。如果您的 Elasticsearch 位于 VPC 中,则需要两个。
然后需要使用 SG 规则将它们连接在一起。
Firehose Delivery Stream 设置向导不会警告您只有一个安全组并且这不起作用。(也许它适用于单个可用区上的 Elasticsearch 域,但我还没有测试过。)
在创建 Firehose 传输流之前,您必须创建两个必需的安全组。
为 Firehose 端点创建第一个安全组,允许 HTTPS/433 出站流量。然后确保 Elasticsearch 域安全组允许入站 HTTPS/433 流量,特别是来自您刚刚创建的 Firehose 端点安全组的流量。
下面是所需内容的图表(摘自这篇博客文章:使用 Amazon Kinesis Data Firehose 在 VPC 的隐私范围内将流数据引入 Amazon Elasticsearch Service)

| 归档时间: |
|
| 查看次数: |
1753 次 |
| 最近记录: |