📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

适用版本: 6.8-8.9

1. 错误异常的基本描述 #

<storage_class> is not a valid S3 Storage Class 表示 Elasticsearch 在解析 S3 仓库配置时,发现 storage_class 不是 AWS SDK 可识别的有效存储类型,因此拒绝创建或使用该仓库配置。

常见现象 #

  • 注册或更新 S3 仓库时直接返回错误。
  • 节点日志显示某个 storage_class 无法转换为 S3 Storage Class。
  • 常见错误值包括拼写错误、大小写不对,或误用了 Glacier 这类不被当前实现支持的类型。

典型报错与异常栈 #

BlobStoreException: `<storage_class>` is not a valid S3 Storage Class.

2. 为什么会发生这个错误 #

源码表明,这里会尝试把字符串转成 AWS 存储类型枚举;如果转换失败,就抛出异常。除此之外,某些虽然是 AWS 合法值,但当前实现明确不支持,例如 Glacier,也会单独报错。

常见触发原因包括:

  • STANDARD_IA 写成 standard_iastandard-ia 等非标准形式。
  • 使用了当前 Elasticsearch 版本或仓库实现不支持的存储类型。
  • 从 Terraform、控制台或第三方文档复制参数时,没有按 Elasticsearch 期望的取值填写。

3. 如何排查和解决这个异常和解决这个异常 #

  1. 查看仓库配置中的 storage_class 原始值。
  2. 对照当前 Elasticsearch 版本和 S3 仓库文档确认支持列表。
  3. 检查是否使用了 Glacier 或其他归档类存储。
  4. 修正后重新注册或更新仓库,并执行一次 verify。

相关 Elasticsearch API 及调用说明 #

curl -X GET "http://localhost:9200/_snapshot/my_s3_repo?pretty"
curl -X POST "http://localhost:9200/_snapshot/my_s3_repo/_verify?pretty"

排查时需要注意的问题 #

  • 不同版本支持的取值和行为可能有差异,先看当前版本文档。
  • storage_class 填错时,先修正值,不要直接把问题归因到 IAM 或网络。

4. 如何解决这个错误 #

常用修复思路 #

  • storage_class 改为当前版本支持的合法值。
  • 避免使用仓库实现明确不支持的归档类存储类型。
  • 统一仓库模板,避免环境之间出现不同写法。

后续注意事项与推荐建议 #

  • 在发布仓库配置前,增加枚举值校验。
  • 为不同云环境维护明确的 S3 仓库配置样板。

借助 INFINI 产品提升排障效率 #

  • INFINI Console 可用于对比不同环境的仓库配置差异。
  • INFINI Gateway 可用于审计仓库配置变更请求,快速定位错误值来源。

5. 小结 #

is not a valid S3 Storage Class 说明问题不在快照数据,而在仓库配置值本身。把 storage_class 修正为当前实现支持的合法值,问题通常就能直接消除。

相关错误 #

附:日志上下文 #

throw new BlobStoreException("Glacier storage class is not supported");
}  return _storageClass;
} catch (final IllegalArgumentException illegalArgumentException) {
throw new BlobStoreException("`" + storageClass + "` is not a valid S3 Storage Class.");
}