创建和管理 Amazon Elasticsearch Service 域 - Amazon Elasticsearch Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建和管理 Amazon Elasticsearch Service 域

本章介绍如何创建和管理 Amazon Elasticsearch Service (Amazon ES) 域。Amazon ES 域与 Elasticsearch 集群同义。域是具有您指定的设置、实例类型、实例计数和存储资源的集群。

入门教程中的简短说明不同,本章描述了所有选项,并提供了相关的参考信息。您可以使用针对 Amazon ES 控制台、AWS Command Line Interface (AWS CLI) 或 AWS SDKs 的说明完成每个过程。

创建 Amazon ES 域

本部分介绍如何使用 Amazon ES 控制台或将 AWS CLI 与 create-elasticsearch-domain 命令结合使用来创建 Amazon ES 域。

创建 Amazon ES 域 (控制台)

使用以下步骤使用控制台创建一个 Amazon ES 域。

创建 Amazon ES 域 (控制台)

  1. 转至 https://aws.amazon.com,然后选择 Sign In to the Console (登录控制台)

  2. Analytics (分析) 下,选择 Elasticsearch Service

  3. 选择 Create a new domain (创建新域)

  4. 对于 Choose deployment type (选择部署类型),选择与您的域的目的最匹配的选项:

    • Production (生产) 域使用多可用区和专用主节点来实现更高的可用性。

    • Development and testing (开发和测试) 域使用单个可用区。

    • Custom (自定义) 域能让您从所有配置选项中进行选择。

    重要

    不同部署类型在后续页面上显示不同的选项。这些步骤包括所有选项(Custom (自定义) 部署类型)。

  5. 对于 Elasticsearch version (Elasticsearch 版本),建议您选择最新版本。有关更多信息,请参阅支持的 Elasticsearch 版本

  6. 选择 Next (下一步)

  7. 对于 Elasticsearch domain name (Elasticsearch 域名),请输入域名。名称必须符合以下标准:

    • 对于您的账户和区域而言是唯一的

    • 以小写字母开头

    • 包含 3 到 28 个字符

    • 只包含小写字母 a-z、数字 0-9 和连字符 (-)

  8. 如果要使用自定义终端节点而不是 https://search-mydomain-1a2a3a4a5a6a7a8a9a0a9a8a7a.us-east-1.es.amazonaws.com 的标准终端节点,请选择 Enable custom endpoint (启用自定义终端节点)。然后,提供名称和证书。有关更多信息,请参阅创建自定义终端节点

  9. 对于 Availability Zones (可用区),选择 1-AZ2-AZ3-AZ。有关更多信息,请参阅配置多 AZ 域

  10. 对于 Instance type,为数据节点选择实例类型。有关更多信息,请参阅支持的实例类型

    注意

    并非所有可用区都支持所有实例类型。如果您选择 3-AZ,我们建议您选择最新一代实例类型,如 R5 或 I3。

  11. 对于 Number of nodes (节点数),选择数据节点数。

    有关最大值,请参阅群集和实例限制。单节点集群适合开发和测试,但不应用于生产工作负载。有关更多指导,请参阅调整 Amazon ES 域大小配置多 AZ 域

  12. 对于 Data nodes storage type (数据节点存储类型),选择 Instance (实例)(默认)或 EBS

    有关创建超大型域的指南,请参阅 PB 规模。如果您选择 EBS,下列选项将会出现:

    1. 对于 EBS volume type (EBS 卷类型),选择一个 EBS 卷类型。

      如果您选择 Provisioned IOPS (SSD) (预配置 IOPS (SSD)) 作为 EBS 卷类型,则对于 Provisioned IOPS (预配置 IOPS),请输入所需的基准 IOPS 性能。有关更多信息,请参阅 文档中的 Amazon EBS 卷Amazon EC2。

    2. 对于 EBS storage size per node (每个节点的 EBS 卷大小),请输入要附加到每个数据节点的 EBS 卷的大小。

      EBS volume size (EBS 卷大小) 是按节点计算的。您可以通过将数据节点数乘以 EBS 卷大小来计算 Amazon ES 域的总集群大小。EBS 卷最小容量和最大容量取决于指定的 EBS 卷类型及其挂载到的实例类型。要了解更多信息,请参阅 EBS 卷大小限制

  13. (可选)启用或禁用专用主节点。专用主节点可增强集群稳定性,对于包含 10 个以上实例的域而言是必需的。对于生产域,我们建议使用 3 个专用主节点。

    注意

    对于专用主节点和数据节点,可以选择不同的实例类型。例如,您可以为数据节点选择通用或存储优化实例,但为专用主节点选择计算优化实例。

  14. (可选)要启用 UltraWarm 存储,请选择启用 UltraWarm 数据节点。每种实例类型都有其可处理的最大存储量。将该数量乘以总可寻址温存储的温数据节点数。

  15. (可选)对于运行 Elasticsearch 5.3 及更高版本的域,自动快照开始时间不起作用。有关自动制作快照的更多信息,请参阅使用 Amazon Elasticsearch Service 索引快照

  16. (可选)选择 Optional Elasticsearch cluster settings (可选 Elasticsearch 集群设置)。有关这些选项的摘要,请参阅高级选项

  17. 选择 Next (下一步)

  18. Network configuration (网络配置) 部分中,选择 VPC Access (VPC 访问权限)Public access (公有访问权限)。如果您选择 Public access (公有访问权限),请跳至下一步。如果选择 VPC access (VPC 访问权限),则确保您满足先决条件,然后执行下列操作:

    1. 对于 VPC,选择要使用的 VPC 的 ID。

      注意

      VPC 和域必须位于同一 AWS 区域,并且您必须选择一个租赁设置为 Default (默认) 的 VPC。Amazon ES 尚不支持使用专用租赁的 VPCs。

    2. 对于 Subnet (子网),选择一个子网。如果您启用了多可用区,则必须选择两个或三个子网。Amazon ES 会将 VPC 终端节点和弹性网络接口 放入子网中。

      注意

      必须在子网中为网络接口预留足够的 IP 地址。有关更多信息,请参阅在 VPC 子网中预留 IP 地址

    3. 对于 Security groups (安全组),选择需要访问 Amazon ES 域的 VPC 安全组。有关更多信息,请参阅Amazon Elasticsearch Service 域的 VPC 支持

    4. 对于 IAM role (IAM 角色),保留默认角色。Amazon ES 使用此预定义角色(也称为服务相关角色)访问您的 VPC 并将 VPC 终端节点和网络接口放入 VPC 的子网中。有关更多信息,请参阅用于 VPC 访问的服务相关角色

  19. Fine-grained access control (精细访问控制) 部分中,启用或禁用精细访问控制:

    • 如果要使用 IAM 进行用户管理,请选择 Set IAM role as master user (将 IAM 角色设置为主用户),然后为 IAM 角色指定 ARN。

    • 如果要使用内部用户数据库,请选择 Create a master user (创建主用户) 并指定用户名和密码。

    无论您选择哪个选项,主用户都可以访问集群中的所有索引和所有 Elasticsearch APIs。 有关选择哪个选项的指南,请参阅重要概念

    如果您禁用精细访问控制,则仍可以通过将域放置在 VPC 中并/或应用限制性访问策略来控制对域的访问。您必须启用节点到节点加密和静态加密才能使用精细访问控制。

  20. (可选)如果要对 Kibana 使用 SAML 身份验证,请选择 Prepare SAML authentication (准备 SAML 身份验证)。在域可用后,请参阅用于 Kibana 的 SAML 身份验证以了解其他步骤。

  21. (可选)如果要对 Kibana 使用 Amazon Cognito 身份验证,请选择 Enable Amazon Cognito authentication (启用 Amazon Cognito 身份验证)

    1. 选择想要用于 Kibana 身份验证的 Amazon Cognito 用户池和身份池。有关创建这些资源的指南,请参阅Amazon Cognito用于 Kibana 的 身份验证

  22. 对于 Domain access policy (域访问策略),添加所需的 ARNs 或 IP 地址,或者从下拉列表中选择预配置的策略。有关更多信息,请参阅 Amazon Elasticsearch Service 中的 Identity and Access Management关于 VPC 域的访问策略

    注意

    如果您在步骤 18 中选择 VPC access (VPC 访问),则禁止基于 IP 的策略。但您可以使用安全组来控制哪些 IP 地址可以访问该域。有关更多信息,请参阅关于 VPC 域的访问策略

  23. (可选)如果要求对域的所有请求都通过 HTTPS 到达,请选中 Require HTTPS for all traffic to the domain (要求到域的所有流量都使用 HTTPS) 复选框。

  24. (可选)要启用节点到节点加密,请选中 Node-to-node encryption (节点到节点加密) 复选框。有关更多信息,请参阅 的节点到节点加密Amazon Elasticsearch Service

  25. (可选)要启用静态数据加密,请选中 Enable encryption at rest (启用静态数据的加密) 复选框。

    选择 (Default) aws/es ((默认) aws/es) 以让 Amazon ES 代表您创建 KMS 加密密钥(或使用它已创建的加密密钥)。否则,请从 KMS 主密钥菜单中选择您自己的 KMS 加密密钥。有关更多信息,请参阅 的静态数据的加密Amazon Elasticsearch Service

  26. 选择 Next (下一步)

  27. Review (审核) 页面上,查看您的域配置,然后选择 Confirm (确认)

创建 Amazon ES 域 (AWS CLI)

除了使用控制台创建 Amazon ES 域之外,您还可以使用 AWS CLI。有关语法,请参阅 Amazon Elasticsearch ServiceAWS CLI 命令参考 中的

示例命令

这第一个示例演示了以下 Amazon ES 域配置:

  • 使用 Elasticsearch 版本 5.5 创建名为 mylogs 的 Amazon ES 域

  • m4.large.elasticsearch 实例类型的两个实例填充该域

  • 使用 100 个 GiB 磁盘 EBS 卷作为每个数据节点的存储

  • 允许匿名访问,但只能从单个 IP 地址访问:192.0.2.0/32

aws es create-elasticsearch-domain --domain-name mylogs --elasticsearch-version 5.5 --elasticsearch-cluster-config InstanceType=m4.large.elasticsearch,InstanceCount=2 --ebs-options EBSEnabled=true,VolumeType=standard,VolumeSize=100 --access-policies '{"Version": "2012-10-17", "Statement": [{"Action": "es:*", "Principal":"*","Effect": "Allow", "Condition": {"IpAddress":{"aws:SourceIp":["192.0.2.0/32"]}}}]}'

下一个示例演示了以下 Amazon ES 域配置:

  • 使用 Elasticsearch 版本 5.5 创建名为 mylogs 的 Amazon ES 域

  • m4.large.elasticsearch 实例类型的六个实例填充该域

  • 使用 100 个 GiB 通用型 (SSD) EBS 卷作为每个数据节点的存储

  • 将对服务的访问限制为单个用户(由用户的 AWS 账户 ID 标识):555555555555

  • 跨三个可用区分配实例

aws es create-elasticsearch-domain --domain-name mylogs --elasticsearch-version 5.5 --elasticsearch-cluster-config InstanceType=m4.large.elasticsearch,InstanceCount=6,ZoneAwarenessEnabled=true,ZoneAwarenessConfig={AvailabilityZoneCount=3} --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=100 --access-policies '{"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::555555555555:root" }, "Action":"es:*", "Resource": "arn:aws:es:us-east-1:555555555555:domain/mylogs/*" } ] }'

下一个示例演示了以下 Amazon ES 域配置:

  • 使用 Elasticsearch 版本 5.5 创建名为 mylogs 的 Amazon ES 域

  • m4.xlarge.elasticsearch 实例类型的十个实例填充该域

  • m4.large.elasticsearch 实例类型的三个实例作为专用主节点填充该域

  • 使用 100 个 GiB 预配置 IOPS EBS 卷作为存储,并为每个数据节点配置基准性能 1000 IOPS

  • 限制对单个用户和单个子资源的访问,_search API

aws es create-elasticsearch-domain --domain-name mylogs --elasticsearch-version 5.5 --elasticsearch-cluster-config InstanceType=m4.xlarge.elasticsearch,InstanceCount=10,DedicatedMasterEnabled=true,DedicatedMasterType=m4.large.elasticsearch,DedicatedMasterCount=3 --ebs-options EBSEnabled=true,VolumeType=io1,VolumeSize=100,Iops=1000 --access-policies '{"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::555555555555:root" }, "Action": "es:*", "Resource": "arn:aws:es:us-east-1:555555555555:domain/mylogs/_search" } ] }'
注意

如果您尝试创建 Amazon ES 域并且已存在具有相同名称的域,则 CLI 不会报告错误。相反,它会返回现有域的详细信息。

创建 Amazon ES 域 (AWS SDKs)

AWS SDKs(除 Android 和 iOS SDKs 之外)支持 Amazon ES 配置 API 参考中定义的所有操作,包括 CreateElasticsearchDomain。 有关示例代码,请参阅将 AWS SDKs 与 Amazon Elasticsearch Service 结合使用。有关安装和使用 AWS SDKs 的更多信息,请参阅 AWS 软件开发工具包

配置访问策略

Amazon Elasticsearch Service 提供了多种方式来配置对您的 Amazon ES 域的访问权限。有关更多信息,请参阅 Amazon Elasticsearch Service 中的 Identity and Access Management 中的精细访问控制Amazon Elasticsearch Service

控制台提供了预配置的访问策略,您可以针对自己域的特定需求自定义这些策略。您也可以从其他 Amazon ES 域导入访问策略。有关这些访问策略如何与 VPC 访问交互的信息,请参阅关于 VPC 域的访问策略

配置访问策略 (控制台)

  1. 转至 https://aws.amazon.com,然后选择 Sign In to the Console (登录控制台)

  2. Analytics (分析) 下,选择 Elasticsearch Service

  3. 在导航窗格中的 My domains (我的域) 下,选择要更新的域。

  4. 选择 Actions (操作)Modify access policy (修改访问策略)

  5. 编辑访问策略 JSON,或使用下拉列表选择预配置的选项。

  6. 选择 Submit

高级选项

使用高级选项来配置以下内容:

rest.action.multi.allow_explicit_index

指定是否允许在 HTTP 请求正文中显式引用索引。将此属性设置为 false 可防止用户绕过子资源的访问控制。默认情况下,该值为 true。 有关更多信息,请参阅高级选项和 API 注意事项

indices.fielddata.cache.size

指定分配到字段数据的 Java 堆空间的百分比。默认情况下,该设置为 JVM 堆的 20%。

注意

许多客户查询轮换每日索引。对于大多数这些使用案例,我们建议您将 indices.fielddata.cache.size 配置为 JVM 堆的 40% 来开始基准测试。对于非常大的索引,您可能需要大型字段数据缓存。

indices.query.bool.max_clause_count

指定 Lucene 布尔查询中允许的子句的最大数量。默认值为 1024。如果查询具有的子句数超过了允许的子句数,则会导致 TooManyClauses 错误。有关更多信息,请参阅 Lucene 文档