【问题标题】:Credentials can't be located for S3 Flask app in Heroku在 Heroku 中找不到 S3 Flask 应用程序的凭据
【发布时间】:2020-09-26 02:30:54
【问题描述】:

我的烧瓶应用程序在本地与 AWS S3 存储桶一起工作,但是当我尝试让它在 Heroku 中工作时,我不断收到此错误

2020-06-07T00:58:29.174989+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/botocore/signers.py", line 160, in sign
2020-06-07T00:58:29.174989+00:00 app[web.1]:     auth.add_auth(request)
2020-06-07T00:58:29.174989+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/botocore/auth.py", line 357, in add_auth
2020-06-07T00:58:29.174989+00:00 app[web.1]:     raise NoCredentialsError
2020-06-07T00:58:29.174994+00:00 app[web.1]: botocore.exceptions.NoCredentialsError: Unable to locate credentials

我已经讨论这个问题超过一天了。 这是我的 app.py 文件中的代码的 sn-p。

from flask import render_template, request, redirect, url_for
import boto3, os, zipfile, io


AWS_STORAGE_BUCKET_NAME ="some bucket"   

AWS_ACCESS_KEY_ID="some key"
AWS_SECRET_ACCESS_KEY="some secret key"


s3 = boto3.client(
    "s3",
    aws_access_key_id = AWS_ACCESS_KEY_ID,
    aws_secret_access_key = AWS_SECRET_ACCESS_KEY)
s3_resource = boto3.resource("s3")
my_bucket = s3_resource.Bucket(AWS_STORAGE_BUCKET_NAME)

另外,在我的存储桶中,我通过从文档中粘贴来配置 CORS 配置。

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

我的 requirements.txt 文件

Flask==1.1.1
Flask_SQLAlchemy==2.4.1
Werkzeug==1.0.0
Flask_WTF==0.14.3
SQLAlchemy==1.3.13
arrow==0.15.6
alembic==1.4.2
boto3==1.13.16
boto==2.49.0
botocore==1.16.16
Flask_Migrate==2.5.3
Pillow==7.1.2
psycopg2==2.8.4
gunicorn==19.9.0
requests==2.22.0
certifi==2019.6.16
chardet==3.0.4
Click==7.0
distributed==2.1.0
gunicorn==19.9.0
itsdangerous==1.1.0
Jinja2==2.10.1
MarkupSafe==1.1.1
pytz==2019.1

我目前在我的简单应用程序中所做的只是从我的存储桶中读取文件名,并将其显示在主页上。在我的本地应用程序上运行良好,但在 heroku 上运行良好。 任何帮助将不胜感激。

【问题讨论】:

    标签: python flask heroku amazon-s3


    【解决方案1】:

    我不确定向客户端方法提供身份验证参数是否会扩展到调用资源。 boto3.resource 是否可能未在 heroku 上进行身份验证,但可以通过环境变量或 .aws 目录在本地计算机上进行身份验证。您是否尝试过在 Heroku 中将机密设置为环境变量(参见:https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html),或者使用经过身份验证的会话来创建资源:

    session = boto3.Session( aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY)
    
    s3 = session.resource('s3')
    

    【讨论】:

      猜你喜欢
      • 2013-01-28
      • 1970-01-01
      • 2016-12-29
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      • 2020-06-26
      相关资源
      最近更新 更多