gpt4 book ai didi

amazon-web-services - 通过 HTTPS 从 Lambda 连接到 VPC 内的 AWS Elasticsearch

转载 作者:行者123 更新时间:2023-12-02 22:42:39 25 4
gpt4 key购买 nike

我有一个用 Python 编写的 Lambda,它将一些数据写入托管在 AWS 上的 Elasticsearch。 ES 服务在 VPC 内,所以我尝试使用 ES 的内部 DNS 连接到它。这是我的代码:

        es_client = Elasticsearch(
hosts=[{'host': es_host, 'port': 443}],
http_auth=aws_auth,
use_ssl=True,
verify_certs=True,
connection_class=RequestsHttpConnection
)

但是,我遇到了这个异常:

ssl.CertificateError: hostname 'x.y.internal' doesn't match '*.us-west-2.es.amazonaws.com

我不想不使用公共(public)主机名,因为它会不断变化。如何使用内部 DNS 连接到 ES 服务?

======更新=======

我可以通过以下代码使用 HTTP 连接到 ES 域:

es_client = Elasticsearch(
hosts=[{'host': es_host, 'port': 80}]
)

但我如何通过 HTTPS 连接?

最佳答案

使用 AWS.HttpClient 遇到了类似的问题。当您通过 https 连接到生成的 ES 的 VPC 端点时,会发生这种情况。您必须禁用证书验证:

es_client = Elasticsearch(
hosts=[{'host': es_host, 'port': 443}],
http_auth=aws_auth,
use_ssl=True,
verify_certs=False,
connection_class=RequestsHttpConnection
)

如果你像我一样使用 AWS.HttpClient,你必须像这样禁用它:

const AWS = require('aws-sdk');
const https = require('https');
AWS.NodeHttpClient.sslAgent = new https.Agent({ rejectUnauthorized: false });

const httpClient = new AWS.HttpClient();

关于amazon-web-services - 通过 HTTPS 从 Lambda 连接到 VPC 内的 AWS Elasticsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50845999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com