一、确认要使用的版本
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
字段。其中data
和master
表示此机型可以用于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