You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 19:52:22