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

Heroku配置S3凭证报错:无法定位凭证问题求助

解决Heroku上无法定位S3凭证的问题

核心问题分析

  1. 环境变量名不匹配:你在Heroku设置的环境变量是S3_KEY和S3_SECRET,但代码里尝试获取的是AWS_ACCESS_KEY和AWS_SECRET_ACCESS_KEY,两者名称不一致,导致代码无法读取到凭证值。
  2. Boto3资源初始化未传凭证:路由中初始化s3_resource时没有显式传入凭证,而Heroku环境下Boto3无法自动识别自定义命名的环境变量,也没有默认的凭证文件可以读取。

解决方案

方案一:使用Boto3默认识别的环境变量名(推荐)

Boto3会自动读取AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY这两个标准环境变量,无需在代码中显式传入凭证:

  1. 更新Heroku的环境变量:
heroku config:set AWS_ACCESS_KEY_ID=(你的access key)
heroku config:set AWS_SECRET_ACCESS_KEY=(你的secret access key)
heroku config:set BUCKET_NAME=(你的bucket名)
  1. 简化代码:
import boto3
import os

S3_BUCKET = os.environ.get('BUCKET_NAME')

# 初始化client和resource时无需传入凭证,Boto3会自动读取标准环境变量
client_s3 = boto3.client('s3')

@app.route('/pasta-instrumento-usuario', methods=['GET', 'POST'])
def pasta_instrumento_usuario():
    s3_resource = boto3.resource('s3')
    my_bucket = s3_resource.Bucket(S3_BUCKET)
    return render_template('pasta-instrumento-usuario.html', my_bucket=my_bucket)

方案二:保持现有环境变量名,修正代码匹配

如果不想修改Heroku的环境变量名,调整代码中读取环境变量的名称,并显式传入凭证:

  1. 修正代码中的变量获取:
import boto3
import os

# 改为和Heroku设置的环境变量名一致
S3_BUCKET = os.environ.get('BUCKET_NAME')
S3_KEY = os.environ.get('S3_KEY')
S3_SECRET = os.environ.get('S3_SECRET')
  1. 初始化client和resource时显式传入凭证:
# init.py中
client_s3 = boto3.client(
    's3',
    aws_access_key_id=S3_KEY,
    aws_secret_access_key=S3_SECRET,
)

# 路由代码中
@app.route('/pasta-instrumento-usuario', methods=['GET', 'POST'])
def pasta_instrumento_usuario():
    s3_resource = boto3.resource(
        's3',
        aws_access_key_id=S3_KEY,
        aws_secret_access_key=S3_SECRET
    )
    my_bucket = s3_resource.Bucket(S3_BUCKET)
    return render_template('pasta-instrumento-usuario.html', my_bucket=my_bucket)

验证步骤

执行以下命令确认Heroku环境变量已正确设置:

heroku config

检查输出中是否存在对应的凭证变量,且值正确。

内容的提问来源于stack exchange,提问作者Junior Silva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 09:54:20