c# - ElasticSearch.NET 在 POST 请求中传递 AWS Signature v4?
问题描述
我对 ElasticSearch 非常陌生,并且在 c# 中设置了一个 AWS Lambda 函数来获取 S3 对象(包含 JSON 数据)的内容,希望将它们发布到 ES 以进行搜索。
我正在使用 Elasticsearch.Net nuget 库。
在此处的文档中 - https://github.com/elastic/elasticsearch-net有配置节点 URI 等的示例,但我的理解是对 ES 的任何请求都需要使用 AWS Signature V4 签名(基于 Access/密钥)。我为此目的创建了一个 IAM 用户,但在文档中我找不到如何签署 POST 请求的方法。示例显示了发布方法,但没有包含签名的地方?
例如
var person = new Person
{
FirstName = "Martijn",
LastName = "Laarman"
};
var indexResponse = lowlevelClient.Index<BytesResponse>("people", "person", "1", PostData.Serializable(person));
byte[] responseBytes = indexResponse.Body;
var asyncIndexResponse = await lowlevelClient.IndexAsync<StringResponse>("people", "person", "1", PostData.Serializable(person));
string responseString = asyncIndexResponse.Body;
即使在实例化连接时,也没有地方可以添加您的凭据?
var settings = new ConnectionConfiguration(new Uri("http://example.com:9200"))
.RequestTimeout(TimeSpan.FromMinutes(2));
var lowlevelClient = new ElasticLowLevelClient(settings);
我检查了 ConnectionConfiguration 对象,但没有似乎相关的方法或属性。我错过了什么?
解决方案
使用elasticsearch-net-aws包,您应该能够像这样设置低级客户端:
var httpConnection = new AwsHttpConnection("us-east-1"); // or whatever region you're using
var pool = new SingleNodeConnectionPool(new Uri(TestConfig.Endpoint));
var config = new ConnectionConfiguration(pool, httpConnection);
config.DisableDirectStreaming();
var client = new ElasticLowLevelClient(config);
// ...
推荐阅读
- python - 在 Python 中,如何在共享上下文中使用多个 exec 调用?
- installation - 在 WSL 上安装后未启动 memgraph 服务
- c# - 在“params”中包含另一个参数(C#)
- javascript - 如何自动滑动使用 viewer.js 嵌入的 .odp .pdf 文档的页面
- android - 当我的助手没有任何回复时回退到 Google 助手
- reactjs - React-intl 不适用于 Link 组件
- c# - C# 一个 Linq Lamda 查询以形成一个视图模型列表
- python - 如何为 Entry 或任何其他输入字段指定输入语言?
- java - 如何获取矩阵中的数据切片
- java - 如何将 dbf.DbfReader 添加到我的 java 项目中?