通过API查询Amazon OpenSearch服务(ElasticSearch)版本和可用机型

一、确认要使用的版本

Amazon OpenSearch Service 是一款开源的分布式搜索和分析套件,衍生自 Elasticsearch。Amazon OpenSearch Service 是 Amazon Elasticsearch Service 的后继者,提供最新版本的 OpenSearch,支持 19 个版本的 Elasticsearch(1.5 到 7.10 版本),并支持由 OpenSearch Dashboards 和 Kibana(1.5 到 7.10 版本)提供的可视化功能。

引擎版本差异在这里

至此的插件版本差异在这里

更多信息参考官网的FAQ页面这里(中文)。

如下引用部分官网FAQ文字解释说明。

问:为什么名称从 Amazon Elasticsearch Service 变更为 Amazon OpenSearch Service?

我们于 2021 年 4 月 12 日发布了 OpenSearch 项目,这是由社区开发的 Elasticsearch 和 Kibana 开源分支。我们承诺长期投入 OpenSearch,以确保用户继续获得安全、高质量、完全开源的搜索和分析套件,有建立丰富的新功能和创新路线图。此项目包括 OpenSearch(源自 Elasticsearch 7.10.2)和 OpenSearch Dashboards(源自 Kibana 7.10.2)。我们于 2021 年 7 月 12 日发布了 1.0 版 OpenSearch。作为对 OpenSearch 的长期承诺的一部分,我们于 2021 年 9 月 7 日在托管服务中增加了对 OpenSearch 1.0 的支持,并将名称从 Amazon Elasticsearch Service 变更为 Amazon OpenSearch Service。除了 OpenSearch 1.0 之外,我们还继续支持在服务中使用 7.10 版之前的旧版 Elasticsearch。除了名称变更之外,其他方面您都无需担心,我们将继续提供同样出色的体验,而不会对现有的操作、开发方法或业务使用产生任何影响。从此处了解更多关于 OpenSearch 的信息:https://opensearch.org/。

问:作为客户,在此次名称变更中我是否必须采取任何行动?

我们设法让此次名称变更尽可能无缝地融入您的体验。有些方面,例如新开发工具包/配置 API,会要求您采取措施以确保从服务中获得最大优势。虽然从兼容性角度来说现有的开发工具包继续可用,但是需要新配置 API 的任何新功能都将仅在新开发工具包中实现。因此,我们建议您改用新开发工具包。此外,无论是否使用新开发工具包,我们都强烈建议您迁移现有 IAM 策略以使用签名的配置 API。迄今为止,您的现有 IAM 策略都将继续适用于旧 API 定义。但是,我们将过渡到新型基于 API 的权限验证,最终我们将要求您在策略中使用新 API(尤其是对发生了名称变更的 API;例如,从 CreateElasticsearchDomain 变更为 CreateDomain)。请参阅文档以了解更多详细信息。

问:您要改用新开发工具包以升级到 OpenSearch 1.0 吗?

不。从向后兼容的角度来说,我们将确保现有的设置继续适用于 OpenSearch 1.0。但是,我们建议您最终改用最新的开发工具包,以获得上面所述的更干净的最新体验。

问:在此次名称变更之后,定价是否发生任何变化?

不,定价不变。

二、从API接口上查询可用版本的ID

注意:由于版本更新,因此需要使用最新的SDK,否则无法查询到OpenSearch版本和最新的Graviton 2即6g系列机型。以Python为例,可以这样更新SDK:

pip install --upgrade boto3

SDK升级到最新后,编写如下Python代码,可查询各版本在API接口中使用的ID。

import boto3
import json

client = boto3.client('opensearch')
response = client.list_versions(
#    MaxResults=123,
)

print(json.dumps(response))

执行如下命令。如果实现安装有jq能在shell下解析json格式更好。查询后获得结果如下:

{
  "ResponseMetadata": {
    "RequestId": "76d32da5-039c-4661-b0d8-0a5e10bfeaad",
    "HTTPStatusCode": 200,
    "HTTPHeaders": {
      "x-amzn-requestid": "76d32da5-039c-4661-b0d8-0a5e10bfeaad",
      "content-type": "application/json",
      "content-length": "463",
      "date": "Sun, 08 May 2022 04:47:19 GMT"
    },
    "RetryAttempts": 0
  },
  "Versions": [
    "OpenSearch_1.2",
    "OpenSearch_1.1",
    "OpenSearch_1.0",
    "Elasticsearch_7.10",
    "Elasticsearch_7.9",
    "Elasticsearch_7.8",
    "Elasticsearch_7.7",
    "Elasticsearch_7.4",
    "Elasticsearch_7.1",
    "Elasticsearch_6.8",
    "Elasticsearch_6.7",
    "Elasticsearch_6.5",
    "Elasticsearch_6.4",
    "Elasticsearch_6.3",
    "Elasticsearch_6.2",
    "Elasticsearch_6.0",
    "Elasticsearch_5.6",
    "Elasticsearch_5.5",
    "Elasticsearch_5.3",
    "Elasticsearch_5.1",
    "Elasticsearch_2.3",
    "Elasticsearch_1.5"
  ]
}

三、确认可用机型

以创建 7.10 版本为例,构造如下的Python程序:

import boto3
import json
client = boto3.client('opensearch')

response = client.list_instance_type_details(
    EngineVersion='Elasticsearch_7.10',
#    DomainName='string',
#    MaxResults=123, 
#    NextToken='string'
)

print(json.dumps(response))

如果本机安装了jq可以格式化为json格式的输出。返回结果是一个很长的清单,部分片段如下:

{
  "ResponseMetadata": {
    "RequestId": "4a7ee116-79d4-4cc9-a93b-bfe7eda5f384",
    "HTTPStatusCode": 200,
    "HTTPHeaders": {
      "x-amzn-requestid": "4a7ee116-79d4-4cc9-a93b-bfe7eda5f384",
      "content-type": "application/json",
      "content-length": "10255",
      "date": "Sun, 08 May 2022 06:51:14 GMT"
    },
    "RetryAttempts": 0
  },
  "InstanceTypeDetails": [
    {
      "InstanceType": "t3.small.search",
      "EncryptionEnabled": true,
      "CognitoEnabled": true,
      "AppLogsEnabled": true,
      "AdvancedSecurityEnabled": true,
      "WarmEnabled": false,
      "InstanceRole": [
        "data",
        "master"
      ]
    },
    {
      "InstanceType": "t3.medium.search",
      "EncryptionEnabled": true,
      "CognitoEnabled": true,
      "AppLogsEnabled": true,
      "AdvancedSecurityEnabled": true,
      "WarmEnabled": false,
      "InstanceRole": [
        "data",
        "master"
      ]
    },
    {
      "InstanceType": "c5.large.search",
      "EncryptionEnabled": true,
      "CognitoEnabled": true,
      "AppLogsEnabled": true,
      "AdvancedSecurityEnabled": true,
      "WarmEnabled": true,
      "InstanceRole": [
        "data",
        "master"
      ]
    },
    ....

接下来可以筛选下重点机型,例如grep一下r6g机型,可以获得如下结果:

      "InstanceType": "m6g.large.search",
      "InstanceType": "m6g.xlarge.search",
      "InstanceType": "m6g.2xlarge.search",
      "InstanceType": "m6g.4xlarge.search",
      "InstanceType": "m6g.8xlarge.search",
      "InstanceType": "m6g.12xlarge.search",
      "InstanceType": "c6g.large.search",
      "InstanceType": "c6g.xlarge.search",
      "InstanceType": "c6g.2xlarge.search",
      "InstanceType": "c6g.4xlarge.search",
      "InstanceType": "c6g.8xlarge.search",
      "InstanceType": "c6g.12xlarge.search",
      "InstanceType": "r6g.large.search",
      "InstanceType": "r6g.xlarge.search",
      "InstanceType": "r6g.2xlarge.search",
      "InstanceType": "r6g.4xlarge.search",
      "InstanceType": "r6g.8xlarge.search",
      "InstanceType": "r6g.12xlarge.search"

由此表示7.10版本可以使用这些Graviton2机型。此外,在上边的机型列表中,还包括Ultrawarm机型。例如如下的返回结果:

 {
      "InstanceType": "r6g.12xlarge.search",
      "EncryptionEnabled": true,
      "CognitoEnabled": true,
      "AppLogsEnabled": true,
      "AdvancedSecurityEnabled": true,
      "WarmEnabled": true,
      "InstanceRole": [
        "data",
        "master"
      ]
    },
    {
      "InstanceType": "ultrawarm1.medium.search",
      "EncryptionEnabled": true,
      "CognitoEnabled": true,
      "AppLogsEnabled": true,
      "AdvancedSecurityEnabled": true,
      "WarmEnabled": false,
      "InstanceRole": [
        "ultra_warm"
      ]
    },
    {
      "InstanceType": "ultrawarm1.large.search",
      "EncryptionEnabled": true,
      "CognitoEnabled": true,
      "AppLogsEnabled": true,
      "AdvancedSecurityEnabled": true,
      "WarmEnabled": false,
      "InstanceRole": [
        "ultra_warm"
      ]
    }

在以上返回结果中,可看到InstanceType对应了InstanceRole字段。其中datamaster表示此机型可以用于Master节点,也可以用于Data节点;而ultrawarm1.medium.search只能用于ultra_warm节点类型。

四、确认某机型可以创建的资源和配置参数范围

这里的网页介绍了不同机型可用的最大磁盘配置等限制。

此外,也可以通过API查询。构建如下代码:

import boto3
import json

client = boto3.client('opensearch')

response = client.describe_instance_type_limits(
#    DomainName='string',
    InstanceType='r6g.2xlarge.search',
    EngineVersion='Elasticsearch_7.10'
)

print(json.dumps(response))

替换机型和版本为要查询的信息。输出结果如下:

{
  "ResponseMetadata": {
    "RequestId": "42c86c58-ac65-420c-8067-a9ae4cdf58a1",
    "HTTPStatusCode": 200,
    "HTTPHeaders": {
      "x-amzn-requestid": "42c86c58-ac65-420c-8067-a9ae4cdf58a1",
      "content-type": "application/json",
      "content-length": "932",
      "date": "Sun, 08 May 2022 11:54:06 GMT"
    },
    "RetryAttempts": 0
  },
  "LimitsByRole": {
    "data": {
      "StorageTypes": [
        {
          "StorageTypeName": "ebs",
          "StorageSubTypeName": "io1",
          "StorageTypeLimits": [
            {
              "LimitName": "MaximumVolumeSize",
              "LimitValues": [
                "3072"
              ]
            },
            {
              "LimitName": "MinimumVolumeSize",
              "LimitValues": [
                "35"
              ]
            },
            {
              "LimitName": "MaximumIops",
              "LimitValues": [
                "16000"
              ]
            },
            {
              "LimitName": "MinimumIops",
              "LimitValues": [
                "1000"
              ]
            }
          ]
        },
        {
          "StorageTypeName": "ebs",
          "StorageSubTypeName": "gp2",
          "StorageTypeLimits": [
            {
              "LimitName": "MaximumVolumeSize",
              "LimitValues": [
                "3072"
              ]
            },
            {
              "LimitName": "MinimumVolumeSize",
              "LimitValues": [
                "10"
              ]
            }
          ]
        }
      ],
      "InstanceLimits": {
        "InstanceCountLimits": {
          "MinimumInstanceCount": 1,
          "MaximumInstanceCount": 80
        }
      },
      "AdditionalLimits": [
        {
          "LimitName": "MaximumNumberOfDataNodesWithoutMasterNode",
          "LimitValues": [
            "10"
          ]
        }
      ]
    },
    "master": {
      "InstanceLimits": {
        "InstanceCountLimits": {
          "MinimumInstanceCount": 2,
          "MaximumInstanceCount": 5
        }
      },
      "AdditionalLimits": [
        {
          "LimitName": "MaximumNumberOfDataNodesSupported",
          "LimitValues": [
            "200"
          ]
        }
      ]
    }
  }
}

以上信息即可看到本机型的参数限制。

五、参考文档

Amazon OpenSearch官方文档:

https://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/rename.html

API说明:

https://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/configuration-api.html