FLASK - S3 연동

2024. 2. 8. 00:46python

Flask에서는 boto3를 사용하여 AWS S3에 액세스할 수 있습니다. 다음은 Flask에서 POST 형태로 전송된 버킷 이름과 키를 이용하여 S3에서 파일 내용을 읽어오는 간단한 예제입니다.

from flask import Flask, request, jsonify
import boto3
from botocore.exceptions import NoCredentialsError

app = Flask(__name__)

# AWS 자격 증명 설정 (안전한 방식으로 관리해야 합니다.)
aws_access_key = 'YOUR_AWS_ACCESS_KEY'
aws_secret_key = 'YOUR_AWS_SECRET_KEY'
s3_bucket_name = 'YOUR_S3_BUCKET_NAME'

def read_s3_file(bucket, key):
    try:
        # S3 클라이언트 생성
        s3 = boto3.client('s3', aws_access_key_id=aws_access_key, aws_secret_access_key=aws_secret_key)

        # S3에서 파일 내용 읽기
        response = s3.get_object(Bucket=bucket, Key=key)
        content = response['Body'].read().decode('utf-8')

        return content
    except NoCredentialsError:
        return "AWS credentials not available"
    except Exception as e:
        return f"Error reading S3 file: {str(e)}"

@app.route('/read_s3_content', methods=['POST'])
def get_s3_content():
    # POST로 전송된 JSON 데이터 파싱
    data = request.get_json()

    # 전송된 데이터에서 버킷 이름과 키 추출
    bucket_name = data.get('bucket')
    key = data.get('key')

    # S3에서 파일 내용 읽기
    content = read_s3_file(bucket_name, key)

    # 결과를 JSON 형태로 반환
    return jsonify({"content": content})

if __name__ == '__main__':
    app.run(debug=True)

이 Flask 앱은 /read_s3_content 엔드포인트를 가지고 있습니다. POST 요청을 통해 JSON 형식으로 {"bucket": "YOUR_BUCKET_NAME", "key": "YOUR_FILE_KEY"}를 전송하면 해당 버킷과 키에 있는 파일의 내용을 읽어와서 JSON 형태로 반환합니다.

YOUR_AWS_ACCESS_KEY, YOUR_AWS_SECRET_KEY, YOUR_S3_BUCKET_NAME 부분을 각각 본인의 AWS 자격 증명과 버킷 정보로 변경하시기 바랍니다. 그리고 보안 상의 이유로 액세스 키와 시크릿 키는 코드에 하드코딩하지 않는 것이 좋습니다. 최선의 방법은 환경 변수 또는 AWS의 보안 기능을 사용하여 관리하는 것입니다.