簡體   English   中英

使用 boto3 從 S3 存儲桶中的表單上傳文件,並在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM