Spring Cloud AWS 2.3对接Localstack出现Unknown host错误如何解决
问题原因
AWS Java SDK默认采用虚拟主机式寻址访问S3资源,会自动将桶名拼接在Endpoint域名的前缀位置。你配置的S3 Endpoint是http://localhost:4566,最终拼接出来的访问地址就是http://mybucket.localhost:4566,本地DNS无法解析mybucket.localhost这个域名,因此抛出UnknownHostException异常。
你用S3浏览器可以正常访问,是因为这类工具默认采用路径式寻址,访问地址为http://localhost:4566/mybucket,不会触发域名解析问题。
解决方法
在Spring Boot配置文件中新增S3路径式寻址的开启配置即可:
cloud: aws: s3: endpoint: http://localhost:4566 path-style-access-enabled: true # 新增该配置项,开启路径式寻址 credentials: accessKey: test secretKey: test region: static: us-east-1 stack: auto: false
开启该配置后,SDK会将桶名放在请求路径中,最终访问地址变为http://localhost:4566/mybucket/index.txt,和S3浏览器的访问逻辑一致,即可正常对接Localstack读取资源。
注意事项
该配置仅适用于本地对接Localstack/MinIO等自建S3兼容服务的场景,线上对接AWS公有云S3时无需开启,保持默认的虚拟主机寻址即可。
内容的提问来源于stack exchange,提问作者ravikant
相关产品推荐
相关产品推荐

