운동하는 공대생

Pre-signed URL using python for file upload in AWS S3 본문

AWS/S3

Pre-signed URL using python for file upload in AWS S3

운동하는 공대생 2022. 11. 8. 10:13
728x90
반응형

Intro 

출처 : https://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/limits.html

 AWS  REST API 통신을 하면서 파일을 첨부하여 s3에 저장하는 상황에서 한 번에 보낼 수 있는 바이트 양의 제한이 있었다. 그래서 조금 더 많은 데이터를 보내는 통신을 하기 위해서 미리 s3의 URL을 선언을 해서 직접 s3에 파일을 저장하는 방식으로 문제를 해결했다.

 

What is a Pre-signed URL

 s3 임시 URL 을 지정을 해주면 파일을 업로드하는 것을 직접 사용자가 계정에 들어가지 않고도 s3에 파일을 저장하는 게 가능하다. 사용되는 방식은 URL 임시로 생성하고 일정 시간 동안 접근을 가능하게 하여 이용자에게 s3를 접근하는 주소를 주는 것이다.

 

 

Get Ready

 URL을 생성하는 방식을 설명하기 이전에 몇 가지 미리 설정을 해야 하는 것들이 있다.

1. s3에 접근이 가능한 권한을 부여한 API & Lambda function

https://seungwoni.tistory.com/6

 

AWS Gate Way(Lambda)

1.Intro 이번에는 AWS에서 요청값을 라우팅받는 Lambda에 대하여 설명을 하겠다. Lambda에서는 요청값을 전달 받아서 값을 처리하거나 외부 API를 호출하는등 여러가지 작업이 가능하다. 프로젝트 작업

seungwoni.tistory.com

2. 저장하고자 하는 s3 

https://seungwoni.tistory.com/7

 

AWS S3

1.Intro s3 버킷은 아마존 웹 서비스에서 제공하는 온라인 클라우드 스토리지 웹 서비스로 Simple Storage Service를 줄여서 s3 라고 부른다. s3는 일반 저장 폴더처럼 데이터를 저장도 가능하고 API에서 호

seungwoni.tistory.com

 

이전 글에서 이미 API 권한 부여 방식과 Lambda 함수 설정법 그리고 s3 생성법에 대하여 설명을 했으므로 넘어가겠다. 

 

 

Lambda

-code

import json
import boto3
import base64
import ast
from botocore.client import Config
def lambda_handler(event, context):

    try:
        s3=boto3.client("s3",config= Config(signature_version='s3v4'))
    except Exception as e:
        return {
            "status_code":400,
            "error": e
        }
        
    bucketName= event.get('body-json')('bucket_name')
    fileKey = event.get('body-json').get('file_key')
    expiryTime= event.get('body-json').get('expiry_time')
    action = event.get('body-json').get('action')
    
    
    try:
        URL = s3.generate_presigned_url("put_object" if action =="upload" else "get_object",Params={"Bucket":bucketName,"Key": fileKey},
        ExpiresIn=expiryTime)
        return {
            "status_code":200,
            "URL":URL
        }
    except Exception as e:
        return {
            "status_code" : 400,
            "error": e
        }

-Request Json

{

“bucket_name”: “저장 하고자 하는 버킷 이름”,

“file_key”: "저장하고싶은 파일 이름”,

 #임시 접근 시간
“expiry_time”: 120,

 # upload or get_object 파일을 저장할지 다운받을지 요청
“action”: “upload”

}

 

 

Sample API Testing with Postman

  • URL 생성 API에서 요청을 보내서 URL을 생성

  • URL 응답

  • 생성한 URL 주소를 가지고 Postman에서 PUT 요청으로 파일 저장

728x90
반응형

'AWS > S3' 카테고리의 다른 글

AWS S3  (0) 2022.09.22
Comments