@aws-cdk/aws-opensearchservice

中文文档
1.204.0发布于 2023/06/20Apache-2.0TypeScriptCommonJS近 30 天下载 1.4万

AWS 的 CDK 构建库: OpenSearch Service

此软件包已被标记为弃用

AWS CDK v1 has reached End-of-Support on 2023-06-01. This package is no longer being updated, and users should migrate to AWS CDK v2. For more information on how to migrate, see https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html

中文使用文档
文档目录15 节
  1. 快开始
  2. 关于 SLR 的说明
  3. 导入已存在的域
  4. 权限
  5. 行政会议
  6. 加密
  7. VPC 支持
  8. 计量
  9. 精细的谷物出入控制
  10. 使用未签名的基本认证
  11. 自定义准入政策
  12. 审计记录
  13. 超温
  14. 自定义终点
  15. 高级选项

亚马逊 OpenSearch 服务构建库


End-of-Support

AWS CDK v1在2023-06-01上达到了支持结束. 此软件包不再更新,用户应该迁移到 AWS CDK v2.

关于如何移徙的更多信息,请参见: 移动到 AWS CDK v2 指南。 。 。 .


特征稳定
CFN 资源Stable
域名更高层次的构造Stable

CFN 资源: 所有课程与 Cfn 此模块中的前缀( n)CFN 资源总是 稳定安全使用.

稳定 : 本单元中标出稳定的更高层次的构造将不进行任何 打破更改。 他们将严格遵循 语义版本 型号.


见 移动到 OpenSearch 移民指令 @aws-cdk/aws-elasticsearch 至本单元, @aws-cdk/aws-opensearchservice。 。 。 .

快开始

通过简单指定版本创建开发集群:

const devDomain = new opensearch.Domain(this, 'Domain', {
  version: opensearch.EngineVersion.OPENSEARCH_1_0,
});

要进行版本升级而不替换整个域,请指定 enableVersionUpgrade 属性.

const devDomain = new opensearch.Domain(this, 'Domain', {
  version: opensearch.EngineVersion.OPENSEARCH_1_0,
  enableVersionUpgrade: true, // defaults to false
});

通过同时指定容量和 az 分布等事项来创建生产级组

const prodDomain = new opensearch.Domain(this, 'Domain', {
  version: opensearch.EngineVersion.OPENSEARCH_1_0,
  capacity: {
    masterNodes: 5,
    dataNodes: 20,
  },
  ebs: {
    volumeSize: 20,
  },
  zoneAwareness: {
    availabilityZoneCount: 3,
  },
  logging: {
    slowSearchLogEnabled: true,
    appLogEnabled: true,
    slowIndexLogEnabled: true,
  },
});

这创建了 Amazon OpenSearch 服务集群,并自动设置日志组 记录域日志并慢取搜索日志.

关于 SLR 的说明

一些集群配置(例如VPC访问)需要存在 AWSServiceRoleForAmazonElasticsearchService 服务链接角色.

在通过 AWS 控制台进行此类操作时,此 SLR 在需要时会被自动创建 。 然而,使用CloudFormation时,这不是行为. 如果需要SLR,但不存在,您将会遇到一个失败消息 simlar:

Before you can proceed, you must enable a service-linked role to give Amazon OpenSearch Service...

为了解决这个问题,你需要 创建 sLR号 我们建议使用AWS CLI:

aws iam create-service-linked-role --aws-service-name es.amazonaws.com

您也可以使用 CDK 创建它, 但请注意,只有第一个应用软件才会成功数字 :

const slr = new iam.CfnServiceLinkedRole(this, 'Service Linked Role', {
  awsServiceName: 'es.amazonaws.com',
});

导入已存在的域

要将已有域导入您的 CDK 应用程序, 请使用 Domain.fromDomainEndpoint 工厂方法. 此方法接受一个已经存在的域的域端点 :

const domainEndpoint = 'https://my-domain-jcjotrt6f7otem4sqcwbch3c4u.us-east-1.es.amazonaws.com';
const domain = opensearch.Domain.fromDomainEndpoint(this, 'ImportedDomain', domainEndpoint);

权限

行政会议

管理访问域的帮助方法也存在.

declare const fn: lambda.Function;
declare const domain: opensearch.Domain;

// Grant write access to the app-search index
domain.grantIndexWrite('app-search', fn);

// Grant read access to the 'app-search/_search' path
domain.grantPathRead('app-search/_search', fn);

加密

也可以通过加密创建域 :

const domain = new opensearch.Domain(this, 'Domain', {
  version: opensearch.EngineVersion.OPENSEARCH_1_0,
  ebs: {
    volumeSize: 100,
    volumeType: ec2.EbsDeviceVolumeType.GENERAL_PURPOSE_SSD,
  },
  nodeToNodeEncryption: true,
  encryptionAtRest: {
    enabled: true,
  },
});

此设置有节点可加密的域名 休养. 您也可以选择提供用于加密的 KMS 密钥 休养.

VPC 支持

域可以放入VPC内,提供亚马逊OpenSearch Service与VPC内其他服务之间的安全通信,而不需要互联网网关,NAT设备,或VPN连接.

访问 VPC 支持 Amazon OpenSearch 服务域 更多细节.

const vpc = new ec2.Vpc(this, 'Vpc');
const domainProps: opensearch.DomainProps = {
  version: opensearch.EngineVersion.OPENSEARCH_1_0,
  removalPolicy: RemovalPolicy.DESTROY,
  vpc,
  // must be enabled since our VPC contains multiple private subnets.
  zoneAwareness: {
    enabled: true,
  },
  capacity: {
    // must be an even number since the default az count is 2.
    dataNodes: 2,
  },
};
new opensearch.Domain(this, 'Domain', domainProps);

此外,您还可以使用 vpcSubnets 属性以控制将使用哪些子网,以及 securityGroups 要控制的属性 哪些安全小组将附属于域。 默认情况下, CDK 将选择全部 私营 vPC中的子网,并创建一个专用的安全组.

计量

存在帮助方法来访问共同域度量衡,例如:

declare const domain: opensearch.Domain;
const freeStorageSpace = domain.metricFreeStorageSpace();
const masterSysMemoryUtilization = domain.metric('MasterSysMemoryUtilization');

这个模块是 AWS 云开发套件 项目.

精细的谷物出入控制

也可以通过配置主用户来创建域. 密码可以 如果不提供则提供或动态创建.

const domain = new opensearch.Domain(this, 'Domain', {
  version: opensearch.EngineVersion.OPENSEARCH_1_0,
  enforceHttps: true,
  nodeToNodeEncryption: true,
  encryptionAtRest: {
    enabled: true,
  },
  fineGrainedAccessControl: {
    masterUserName: 'master-user',
  },
});

const masterUserPassword = domain.masterUserPassword;

使用未签名的基本认证

为方便起见,可以配置域允许未签名的 HTTP 请求 使用基本的认证。 除非域配置为 VPC 的一部分 表示任何人可以使用所配置的主用户名访问域并 密码.

要启用未签名的基本认证访问, 域名配置为访问 策略允许任意请求, HTTPS 需要,节点到节点加密, 在休息时加密 和精细的进取控制.

如果以上设置没有设定, 将配置为启用的一部分 未签名的基本认证 。 如果它们设置为相冲突值,则错误是 抛出.

如果没有配置主用户,则创建默认主用户 用户名 admin。 。 。 .

如果没有配置密码,将创建默认主用户密码 存储在 AWS 机密管理器中作为秘密 。 秘密有前缀 <domain id>MasterUser。 。 。 .

const domain = new opensearch.Domain(this, 'Domain', {
  version: opensearch.EngineVersion.OPENSEARCH_1_0,
  useUnsignedBasicAuth: true,
});

const masterUserPassword = domain.masterUserPassword;

自定义准入政策

如果域名需要自定义访问控制,则可以配置为 建造者财产,或后来通过帮助方法.

对于简单的权限 accessPolicies 构造器可能足以:

const domain = new opensearch.Domain(this, 'Domain', {
  version: opensearch.EngineVersion.OPENSEARCH_1_0,
  accessPolicies: [
    new iam.PolicyStatement({
      actions: ['es:*ESHttpPost', 'es:ESHttpPut*'],
      effect: iam.Effect.ALLOW,
      principals: [new iam.AccountPrincipal('123456789012')],
      resources: ['*'],
    }),
  ]
});

例如,对于更为复杂的使用大小写,设置域名以接收来自 a 交叉账户 Kinesis Firehose 页:1 addAccessPolicies 帮助方法 允许包含明确域 ARN 的政策.

const domain = new opensearch.Domain(this, 'Domain', {
  version: opensearch.EngineVersion.OPENSEARCH_1_0,
});
domain.addAccessPolicies(
  new iam.PolicyStatement({
    actions: ['es:ESHttpPost', 'es:ESHttpPut'],
    effect: iam.Effect.ALLOW,
    principals: [new iam.AccountPrincipal('123456789012')],
    resources: [domain.domainArn, `${domain.domainArn}/*`],
  }),
  new iam.PolicyStatement({
    actions: ['es:ESHttpGet'],
    effect: iam.Effect.ALLOW,
    principals: [new iam.AccountPrincipal('123456789012')],
    resources: [
      `${domain.domainArn}/_all/_settings`,
      `${domain.domainArn}/_cluster/stats`,
      `${domain.domainArn}/index-name*/_mapping/type-name`,
      `${domain.domainArn}/roletest*/_mapping/roletest`,
      `${domain.domainArn}/_nodes`,
      `${domain.domainArn}/_nodes/stats`,
      `${domain.domainArn}/_nodes/*/stats`,
      `${domain.domainArn}/_stats`,
      `${domain.domainArn}/index-name*/_stats`,
      `${domain.domainArn}/roletest*/_stat`,
    ],
  }),
);

审计记录

对一个域可以启用审计日志,但只有在启用了精细的谷物访问控制时才能启用.

const domain = new opensearch.Domain(this, 'Domain', {
  version: opensearch.EngineVersion.OPENSEARCH_1_0,
  enforceHttps: true,
  nodeToNodeEncryption: true,
  encryptionAtRest: {
    enabled: true,
  },
  fineGrainedAccessControl: {
    masterUserName: 'master-user',
  },
  logging: {
    auditLogEnabled: true,
    slowSearchLogEnabled: true,
    appLogEnabled: true,
    slowIndexLogEnabled: true,
  },
});

超温

可以启用UltraWarm节点,提供成本效益高的方法来存储大量只读数据.

const domain = new opensearch.Domain(this, 'Domain', {
  version: opensearch.EngineVersion.OPENSEARCH_1_0,
  capacity: {
    masterNodes: 2,
    warmNodes: 2,
    warmInstanceType: 'ultrawarm1.medium.search',
  },
});

自定义终点

自定义端点可以配置到自定义域名下的域.

new opensearch.Domain(this, 'Domain', {
  version: opensearch.EngineVersion.OPENSEARCH_1_0,
  customEndpoint: {
    domainName: 'search.example.com',
  },
});

还可能指定一个自定义证书,而不是自动生成的证书.

此外,如果为自定义终点提供了主机区,则创建自动的 CNAME 记录

高级选项

高级选项 可用于配置额外选项.

new opensearch.Domain(this, 'Domain', {
  version: opensearch.EngineVersion.OPENSEARCH_1_0,
  advancedOptions: {
    'rest.action.multi.allow_explicit_index': 'false',
    'indices.fielddata.cache.size': '25',
    'indices.query.bool.max_clause_count': '2048',
  },
});

版本与发布记录

@aws-cdk/aws-opensearchservice 共发布 93 个版本,首次发布于 2021/09/17;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.204.0latest2023/06/203 年前
1.203.02023/06/013 年前
1.202.02023/05/223 年前
1.201.02023/05/113 年前
1.200.02023/04/273 年前
1.199.02023/04/213 年前

关于 @aws-cdk/aws-opensearchservice 的常见问题

@aws-cdk/aws-opensearchservice 是什么?

AWS 的 CDK 构建库: OpenSearch Service注意:该包已被作者标记为弃用——AWS CDK v1 has reached End-of-Support on 2023-06-01. This package is no longer being updated, and users should migrate to AWS CDK v2. For more information on how to migrate, see https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html

如何安装 @aws-cdk/aws-opensearchservice?

在项目目录运行 npm install @aws-cdk/aws-opensearchservice,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@aws-cdk/aws-certificatemanager(1.204.0)、@aws-cdk/aws-cloudwatch(1.204.0)、@aws-cdk/aws-ec2(1.204.0)、@aws-cdk/aws-iam(1.204.0)、@aws-cdk/aws-kms(1.204.0)、@aws-cdk/aws-logs(1.204.0)、@aws-cdk/aws-route53(1.204.0)、@aws-cdk/aws-secretsmanager(1.204.0)、@aws-cdk/core(1.204.0)、@aws-cdk/custom-resources(1.204.0)、constructs(^3.3.69)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@aws-cdk/aws-opensearchservice 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@aws-cdk/aws-opensearchservice 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@aws-cdk/aws-opensearchservice 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >= 14.15.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@aws-cdk/aws-opensearchservice 可以商用吗?

@aws-cdk/aws-opensearchservice 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@aws-cdk/aws-opensearchservice 的下载量有多少?

根据 npm 官方下载统计,@aws-cdk/aws-opensearchservice 在 2026/10/08 – 2026/11/06 这 30 天内被下载 14,496 次,日均约 483 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@aws-cdk/aws-opensearchservice 还在维护吗?

最新版本 1.204.0 发布于 2023/06/20(3 年前);至今共发布 93 个版本,其中过去 12 个月发布了 0 个;首次发布于 2021/09/17。作者已将其标记为弃用,新项目建议寻找替代方案。