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

如何使用AWS CDK创建OpenSearch Domain专属VPC端点?

问题

我正在VPC中搭建OpenSearch Domain,需要创建VPC端点以使其对部分Lambda函数可用。我发现OpenSearch Domain的VPC端点创建方式特殊:无需进入VPC服务页面的「端点」选项,而是要在OpenSearch服务页面左侧菜单中创建。这类VPC端点是集群专属的,创建时需指定对应Domain。

我通过AWS CDK可创建Lambda、STS等普通VPC端点,代码示例如下:

new InterfaceVpcEndpoint(this, 'STSEndpoint', {
  vpc,
  subnets: { subnets },
  service: new InterfaceVpcEndpointService(`com.amazonaws.${stageConfig.AWSProfileRegion}.sts`),
  privateDnsEnabled: true,
  open: true,
});

new InterfaceVpcEndpoint(this, 'LambdaEndpoint', {
  vpc,
  subnets: { subnets },
  service: new InterfaceVpcEndpointService(`com.amazonaws.${stageConfig.AWSProfileRegion}.lambda`),
  privateDnsEnabled: true,
  open: true,
});

但不知如何通过CDK创建这类OpenSearch专属端点,恳请指点实现方向。

解决方案
  • 首先要明确:你说的这种OpenSearch专属「VPC端点」,本质是OpenSearch Domain部署在VPC内时自动生成的弹性网络接口(ENI),并非独立的VPC端点服务,不需要像创建STS/Lambda端点那样单独调用InterfaceVpcEndpoint构造。

  • 在AWS CDK中,直接通过OpenSearch的Domain构造配置VPC参数即可自动完成网络部署,步骤如下:

  1. 准备VPC、子网和安全组
    先创建或复用目标VPC、子网,以及用于控制访问的安全组:

    import { Domain, EngineVersion } from 'aws-cdk-lib/aws-opensearchservice';
    import { Vpc, SecurityGroup, Port } from 'aws-cdk-lib/aws-ec2';
    
    // 假设已存在VPC和目标子网
    const openSearchSG = new SecurityGroup(this, 'OpenSearchSG', {
      vpc: yourVpc,
      description: 'Allow access to OpenSearch from Lambda',
    });
    
  2. 创建带VPC配置的OpenSearch Domain
    在Domain构造中指定VPC、子网和安全组,CDK会自动在指定子网创建ENI并配置网络:

    const osDomain = new Domain(this, 'MyVpcOpenSearchDomain', {
      version: EngineVersion.OPENSEARCH_2_11,
      vpc: yourVpc,
      vpcSubnets: { subnets: yourTargetSubnets }, // 指定部署Domain的子网
      securityGroups: [openSearchSG], // 关联安全组
      // 按需配置其他参数:实例类型、副本数等
      capacity: {
        dataNodes: 2,
        dataNodeInstanceType: 't3.small.search',
        masterNodes: 3,
      },
    });
    
  3. 配置Lambda访问权限
    给Lambda的安全组添加出站规则,允许访问OpenSearch安全组的443端口:

    // 假设已存在Lambda的安全组
    lambdaSG.connections.allowTo(openSearchSG, Port.tcp(443));
    
  4. 获取OpenSearch端点
    部署完成后,可通过osDomain.domainEndpoint获取Domain的VPC内部端点,在Lambda代码中直接使用该地址访问。

  • 如果你需要更底层的配置控制,可以使用CfnDomain的VPCOptions属性,手动指定子网ID、安全组ID:
    import { CfnDomain } from 'aws-cdk-lib/aws-opensearchservice';
    
    new CfnDomain(this, 'MyRawOpenSearchDomain', {
      domainName: 'my-domain',
      engineVersion: 'OpenSearch_2.11',
      vpcOptions: {
        subnetIds: ['subnet-xxxxxx', 'subnet-yyyyyy'],
        securityGroupIds: [openSearchSG.securityGroupId],
      },
      // 其他配置参数
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:13:11