aws s3 연결해서 django에서 이미지 띄우기
AWS IAM을 사용한 접근 제어:
EC2 인스턴스에 IAM 역할을 부여하고, 해당 IAM 역할에 S3 버킷에 접근할 권한을 부여하는 방법
IP 주소 제약 없이 S3에 접근할 수 있도록 해줌
방법
IAM 역할 생성
IAM > 역할 > 역할만들기
AWS 서비스 타입 선택 / EC2 선택 / 다음
AmazonS3FullAccess선택
완료
인스턴스에 IAM역할 할당
장고에 boto3 설치
pip install boto3
코드에 추가(두가지)
view에서 바로 띄우기
views.py
from django.http import HttpResponse
import boto3
def index(request):
s3 = boto3.client('s3', region_name='ap-northeast-2')
# S3에서 이미지를 가져옴
bucket_name = 'test-bucket-forclass'
object_key = '1.jpg'
s3_response = s3.get_object(Bucket=bucket_name, Key=object_key)
image_data = s3_response['Body'].read()
# HTTP 응답으로 이미지를 반환
return HttpResponse(image_data, content_type='image/jpeg')
2. view에서 이미지 불러와 두고 context로 전달(Presigned URL사용)
views.py
from django.shortcuts import render
import boto3
def index(request):
s3 = boto3.client('s3', region_name='ap-northeast-2')
bucket_name = 'test-bucket-forclass'
object_key = '1.jpg'
url = s3.generate_presigned_url('get_object',
Params={'Bucket': bucket_name, 'Key': object_key})
# URL을 템플릿 컨텍스트에 추가
context = {'img_url': url}
return render(request, 'main/index.html', context)
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<img src="{{ img_url }}" alt="My S3 Image">
</body>
</html>