为什么我的 AWS Lambda 函数使用错误的 URL 与 OpenSearch 通信?

问题描述 投票:0回答:1

我有一个 lambda 函数,需要与 AWS OpenSearch 域通信。

域包含在 VPC 内,并且 lambda 函数已放置在同一 VPC 和子网内。

VPC 包含一个互联网网关和一个代理服务器,Opensearch 域除了自动生成的 URL 之外,还有一个可从 VPC 外部访问的 URL。

当 lambda 函数尝试连接到 Opensearch API 时,会超时。然而奇怪的是,它显示它正在尝试访问错误的 URL。无论我使用面向公众的 URL 还是以“https://vpc-{my-vpc-name}”开头的 VPC 内 URL,它都显示尝试联系“https://search-”时超时。 {我的 vpc 名称}'

我相信相关代码在这里:

RestClientBuilder builder = RestClient.builder(HttpHost.create({my-url-here}))
    .setHttpClientConfigCallback(httpAsyncClientBuilder -> httpAsyncClientBuilder.addInterceptorLast(interceptor));
restClient = new RestHighLevelClient(builder);

我真的不明白为什么它会使用修改后的(并且不存在的)URL,无论它被告知使用什么。这可能是某种 DNS 问题,还是我应该更多地了解 OpenSearch 和 AWS Java 库的工作原理?

amazon-web-services aws-lambda amazon-vpc opensearch
1个回答
0
投票

您可能缺少正确的安全组配置,请参阅下面的 CDK 片段来设置这些安全组

        SecurityGroup openSearchSecurityGroup = SecurityGroup.Builder.create(this, id + "sg-search")
            .vpc(vpc)
            .build();

    SecurityGroup lambdaSecurityGroup = SecurityGroup.Builder.create(this, id + "sg-lambda")
            .vpc(vpc)
            .build();

    lambdaSecurityGroup.addEgressRule(openSearchSecurityGroup, Port.tcp(443));
    openSearchSecurityGroup.addIngressRule(lambdaSecurityGroup, Port.tcp(443));
© www.soinside.com 2019 - 2024. All rights reserved.