![](/img/trans.png)
[英]How to upload a file from an html page in S3 bucket using boto3 and lambda?
[英]Upload a file from form in S3 bucket using boto3 and handler is created in lambda
我想使用 postman 將小尺寸的圖像、音頻文件從表單上傳到 S3 進行測試。 我從本地機器上運行的應用程序成功上傳了 AWS S3 存儲桶中的文件。 以下是我用於文件上傳的部分代碼。
import boto3
s3_client = boto3.client('s3',aws_access_key_id =AWS_ACCESS_KEY_ID,aws_secret_access_key = AWS_SECRET_ACCESS_KEY,)
async def save_file_static_folder(file, endpoint, user_id):
_, ext = os.path.splitext(file.filename)
raw_file_name = f'{uuid.uuid4().hex}{ext}'
# Save image file in folder
if ext.lower() in image_file_extension:
relative_file_folder =user_id+'/'+endpoint
contents = await file.read()
try:
response = s3_client.put_object(Bucket = S3_BUCKET_NAME,Key = (relative_file_folder+'/'+raw_file_name),Body = contents)
except:
return FileEnum.ERROR_ON_INSERT
我從另一個端點調用了這個 function,表單數據(例如姓名、出生日期和其他詳細信息)成功保存在 Mongodb 數據庫中,文件上傳到 S3 存儲桶中。
此應用程序正在使用 fastapi,文件在 S3 存儲桶中上傳,同時在本地計算機上部署此應用程序。
在 AWS lambda 和 S3 存儲桶中部署了相同的應用程序作為存儲。 為了處理整個應用程序,在端點文件中添加了以下內容。
handler = Mangum(app)
在 AWS 中部署應用程序后,從 AWS 的根用戶帳戶創建 lambda function 后,文件沒有上傳到 S3 存儲桶中。
如果我在表單中沒有提供文件,那么 AWS API 端點可以成功運行。 表單數據存儲在 MongoDB 數據庫(Mongodb atlas)中,並且使用 Lambda 托管的應用程序可以正常工作。
使用 Lambda function 部署的應用程序成功運行,除了文件上傳形式。 對於本地機器,S3 中的文件上傳成功。
編輯
在 Cloudwatch 中跟蹤時出現以下錯誤
exception An error occurred (InvalidAccessKeyId) when calling the PutObject operation: The AWS Access Key Id you provided does not exist in our records.
我多次檢查 AWS 訪問密鑰 ID 和密鑰,它們是正確的,並且保留了根用戶憑證。
看起來您已經使用執行 IAM 角色配置了 Lambda function,但是您在此處覆蓋了提供給 boto3 SDK 的 AWS 憑證:
s3_client = boto3.client('s3',aws_access_key_id =AWS_ACCESS_KEY_ID,aws_secret_access_key = AWS_SECRET_ACCESS_KEY,)
您無需顯式提供憑據,因為 boto3 SDK(和所有語言 SDK)會自動為您動態檢索憑據。 因此,請確保您的 Lambda function 配置了正確的 IAM 角色,然后按如下方式更改您的代碼:
s3_client = boto3.client('s3')
順便說一句,您表示您可能正在使用 AWS 根憑證。 不使用根憑證通常是 AWS 中的最佳安全實踐。 相反,創建 IAM 角色和 IAM 用戶。
我們強烈建議您不要將 root 用戶用於日常任務,即使是管理任務。 相反,請遵循僅使用根用戶創建您的第一個 IAM 用戶的最佳實踐。 然后安全地鎖定 root 用戶憑據並使用它們僅執行少數帳戶和服務管理任務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.