230831_AWS_3

장종민·2023년 8월 31일

mentor

목록 보기
13/24

aws s3 연결해서 django에서 이미지 띄우기

  • AWS IAM을 사용한 접근 제어:

    • EC2 인스턴스에 IAM 역할을 부여하고, 해당 IAM 역할에 S3 버킷에 접근할 권한을 부여하는 방법

    • IP 주소 제약 없이 S3에 접근할 수 있도록 해줌

    • 방법

      1. IAM 역할 생성

        • IAM > 역할 > 역할만들기

        • AWS 서비스 타입 선택 / EC2 선택 / 다음

        • AmazonS3FullAccess선택

        • 완료

      2. 인스턴스에 IAM역할 할당

        • E2C > 설정할 인스턴스 선택 > 작업 > 보안 > IAM역할수정
        • 생성한 역할 선택 및 적용
      3. 장고에 boto3 설치

        pip install boto3
      4. 코드에 추가(두가지)

        1. 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>
profile
비전공 오르미부트캠프 2기

0개의 댓글