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

本地调试AWS Lambda遇HTTP/1.1 301错误及S3区域不符问题

问题分析与解决

核心原因

  1. S3桶实际区域为us-east-1:你提到桶"实际地理位置在us-east-1",但代码里硬指定了ap-south-1作为S3客户端的区域。当请求发送到ap-south-1的S3服务端点时,S3会检测到桶实际属于us-east-1,因此返回301重定向到正确的区域端点。
  2. AWS SDK未自动处理重定向:旧版本的AmazonS3 Java客户端默认不会自动跟随这类区域重定向,因此直接抛出301错误,而非继续请求到正确的端点获取文件内容或返回对象不存在的提示。
  3. 代码未利用环境变量的区域配置:你代码里定义了从环境变量读取region,但创建客户端时硬编码了ap-south-1,没有使用环境变量的配置,导致区域不匹配。

解决方案

1. 确认桶的真实区域

通过AWS控制台查看S3桶的「属性」标签,找到「区域」字段;或使用AWS CLI命令确认:

aws s3api get-bucket-location --bucket your-bucket-name

2. 修正S3客户端的区域配置

将硬编码的区域替换为桶的真实区域,或直接使用环境变量读取的region,保证客户端区域与桶实际区域一致:

AmazonS3 s3client = AmazonS3ClientBuilder
        .standard()
        .withRegion(region) // 改用环境变量中的region,而非硬编码
        .withCredentials(new AWSStaticCredentialsProvider(basicAWSCredentials))
        .build();

3. 配置SDK自动跟随重定向(可选)

如果暂时无法修改区域配置,可以开启S3客户端的全局桶访问模式,让SDK自动处理区域重定向:

AmazonS3 s3client = AmazonS3ClientBuilder
        .standard()
        .withRegion("ap-south-1")
        .withCredentials(new AWSStaticCredentialsProvider(basicAWSCredentials))
        .withForceGlobalBucketAccessEnabled(true) // 开启自动重定向处理
        .build();

4. 验证模拟事件的准确性

确保IntelliJ AWS Toolkit中模拟的S3 Put事件里,桶名称、对象键与实际存在的S3资源一致,避免因模拟事件参数错误导致的异常。

内容的提问来源于stack exchange,提问作者olivia-myrial

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:25:17