Spring Boot部署EC2调用S3提示Bucket不存在问题求助
解决EC2部署Spring Boot S3项目时的NoSuchBucket错误
问题背景
Spring Boot对接S3的项目在本地、CloudType部署环境运行正常,但部署到EC2环境时提示指定Bucket不存在,已确认Bucket拼写无误,且其他环境可正常访问该Bucket。
环境信息
Gradle依赖
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
S3服务代码
@Service @RequiredArgsConstructor public class S3FileServiceImpl implements MyFileService{ private final AmazonS3 amazonS3; @Value("${cloud.aws.s3.bucket}") private String bucket; @Override public UploadFile uploadFile(MultipartFile file) throws IOException { String originalFilename = file.getOriginalFilename(); String storeFileName = UUID.randomUUID().toString(); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentLength(file.getSize()); metadata.setContentType(file.getContentType()); amazonS3.putObject(bucket, storeFileName, file.getInputStream(), metadata); return new UploadFile(originalFilename, storeFileName); } }
application.yml配置
cloud: aws: s3: bucket: ${PROD_S3_BUCKET} credentials: access-key: ${PROD_S3_ACCESS_KEY} secret-key: ${PROD_S3_SECRET_KEY} region: static: "ap-northeast-2" auto: false stack: auto: false
错误信息
com.amazonaws.services.s3.model.AmazonS3Exception: 指定的存储桶不存在 (Service: Amazon S3; Status Code: 404; Error Code: NoSuchBucket; Request ID: {SECRET}; S3 Extended Request ID: {SECRET}; Proxy: null)
排查及解决方向
- 检查EC2实例IAM角色优先级:EC2实例若绑定了IAM角色,该角色的权限会覆盖配置文件中的access-key/secret-key。确认实例绑定的IAM角色是否有权限访问目标Bucket,或是否使用了错误AWS账号导致找不到Bucket。
- 验证环境变量注入正确性:在EC2上确认
PROD_S3_BUCKET环境变量是否正确设置,可在代码中添加日志打印bucket变量值,确认实际使用的Bucket名称是否准确。 - 确认区域配置一致性:尽管配置了
ap-northeast-2,仍需检查S3客户端实际连接的区域是否与Bucket所在区域一致。可尝试显式指定S3 endpoint:@Bean public AmazonS3 amazonS3(@Value("${cloud.aws.credentials.access-key}") String accessKey, @Value("${cloud.aws.credentials.secret-key}") String secretKey) { return AmazonS3ClientBuilder.standard() .withRegion(Regions.AP_NORTHEAST_2) .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey))) .build(); } - 排查Bucket访问策略限制:S3出于安全考虑,当请求无权限时也可能返回NoSuchBucket。检查Bucket的访问策略,是否允许EC2实例的IP地址、VPC或IAM角色访问。
- 升级AWS相关依赖:当前使用的
spring-cloud-starter-aws:2.2.6.RELEASE版本较旧,可能存在兼容性问题。尝试升级到最新稳定版,或切换为AWS SDK v2的依赖(如software.amazon.awssdk:s3)。
内容的提问来源于stack exchange,提问作者DonnBimm
相关产品推荐
相关产品推荐

