You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda访问OpenSearch出现无法验证服务器为Elasticsearch错误如何解决

错误产生原因
  1. 你使用的第三方AWS连接库@acuris/aws-es-connection是为旧版Elasticsearch客户端设计的,和OpenSearch官方客户端兼容性不足,会触发客户端的产品校验逻辑
  2. OpenSearch JS客户端默认会发起产品兼容性校验请求,你当前使用的AWS凭证没有权限访问校验所需的服务端接口,请求被权限拦截后客户端无法确认服务端产品类型,抛出该错误
  3. 部分高版本OpenSearch客户端默认会校验服务端是否为兼容的Elasticsearch/OpenSearch版本,AWS托管OpenSearch在权限受限情况下无法返回校验所需的元数据,也会触发该报错
排查解决方法
  • 第一步:优先关闭客户端的产品校验
    初始化OpenSearch客户端时添加skipProductValidation: true参数,跳过不必要的产品校验逻辑,修改后的代码示例:
const { Client } = require('@opensearch-project/opensearch');
const { createAWSConnection, awsGetCredentials } = require('@acuris/aws-es-connection');

const test = async () => {
    const awsCredentials = await awsGetCredentials();
    const AWSConnection = createAWSConnection(awsCredentials);
    const client = new Client({
        ...AWSConnection,
        node: 'https://<domain-name>.us-east-2.es.amazonaws.com',
        // 新增下面这行关闭产品校验
        skipProductValidation: true
    });
    await client.cat.help();
};
test();
  • 第二步:替换老旧的第三方AWS签名库,使用OpenSearch客户端原生的AWS SigV4签名能力
    @acuris/aws-es-connection已经停止维护很久,新版OpenSearch JS客户端原生支持AWS签名,不需要引入第三方依赖,代码示例:
const { Client } = require('@opensearch-project/opensearch');
const { AwsSigv4Signer } = require('@opensearch-project/opensearch/aws');
const { defaultProvider } = require('@aws-sdk/credential-provider-node');

const client = new Client({
  ...AwsSigv4Signer({
    region: 'us-east-2',
    service: 'es',
    getCredentials: () => defaultProvider()(),
  }),
  node: 'https://<domain-name>.us-east-2.es.amazonaws.com',
  skipProductValidation: true
});

const test = async () => {
  await client.cat.help();
};
test();
  • 第三步:检查IAM权限配置
    确认Lambda执行角色的IAM政策包含如下权限配置:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "es:ESHttp*",
            "Resource": "arn:aws:es:us-east-2:<你的AWS账户ID>:domain/<你的OpenSearch域名>/*"
        }
    ]
}

如果你的OpenSearch域开启了精细访问控制,还需要在OpenSearch的安全面板中将Lambda执行角色的ARN映射到具备对应操作权限的OpenSearch角色(例如只读角色、all_access角色)。

  • 第四步:排查网络连通性
    如果Lambda部署在VPC内,需要确认VPC安全组放通了到OpenSearch域443端口的出向访问,已经配置了OpenSearch的VPC端点或者VPC具备公网访问能力。

内容的提问来源于stack exchange,提问作者coolman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:18:01