创建AWS ES-Domain时WarmEnabled为false仍需指定WarmType的原因
问题原因及解决办法
这个问题出在LocalStack对Elasticsearch(现OpenSearch)域创建接口的参数校验逻辑和官方AWS API不一致:
- 官方AWS API中,当
WarmEnabled设为false时,WarmType是完全可选的,不需要指定; - 但LocalStack的旧版本(或特定版本)的ES模拟实现存在bug:即使你没在JSON里定义
WarmType,底层仍会默认传入null值,而它的参数校验逻辑没有忽略这个情况,直接触发了类型错误(要求str类型但收到None)。
解决方法
显式指定合法的
WarmType值
在你的JSON配置的ElasticsearchClusterConfig里添加WarmType字段,填写任意一个官方支持的实例类型即可,比如:{ "DomainName":"mydomain", "ElasticsearchVersion": "6.8", "ElasticsearchClusterConfig": { "DedicatedMasterEnabled": true, "DedicatedMasterCount": 3, "ZoneAwarenessEnabled": false, "InstanceCount": 3, "InstanceType":"m3.medium.elasticsearch", "DedicatedMasterType": "m3.medium.elasticsearch", "WarmEnabled":false, "WarmType": "ultrawarm1.medium.elasticsearch" }, "EBSOptions" : { "EBSEnabled" : true, "VolumeSize" : 1, "VolumeType" : "gp2" } }即使
WarmEnabled是false,LocalStack的校验逻辑会因为收到合法的字符串值而通过,且不会影响实际功能(暖节点处于禁用状态)。升级LocalStack到最新版本
该参数校验的bug在后续LocalStack版本中已被修复,升级到最新版后,无需额外指定WarmType即可正常创建域。
补充说明
你创建DDB、S3等资源正常,是因为LocalStack对这些服务的参数校验逻辑更贴合官方API,不存在这个特殊bug。
内容的提问来源于stack exchange,提问作者Makarand
相关产品推荐
相关产品推荐

