[클라우드] AWS-S3

이정훈·2023년 3월 15일
0

클라우드

목록 보기
2/14
post-thumbnail
  • 클라이언트가 요구할 때 사용할 수 있게 해주는 서비스

S3 버킷 만들기

  • 이름만 설정해서 만들어 놓고 필요에 따라 언제든지 설정을 변경할 수 가 있다.

권한 설정

  • 자바 명령어를 사용하여 제작해야 하는데 AWS에서 자동으로 만들어준다.

  • 액션에서 GET OBJECT
  • 제출하면 알려준다!
  • 이걸 입력만 해주면 버킷 정책 권한이 형성

엑세스 키 만들기

  • 장고와 연동하기 위해!



장고 - S3

  • 우선 장고 프로젝트를 하나 만들어 RDS와 연동 시켜놓는다.
  • 장고여 연동을 해놓으면 장고에서 만든 페이지에서 사진을 올리면 RDS에도 올라가고 S3에도 올라가도록 설정

config-url

urlpatterns = [
    path('admin/', admin.site.urls),
    path('read', app.views.read),
    path('register', app.views.register),
    path('', app.views.main),

config-setting

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app',
    'corsheaders',
    'storages',
]
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'web',
        'USER': 'admin',
        'PASSWORD': 'qwer1234',
        'HOST': '[RDS 앤드포인트]',
        'PORT': '3306',
        'OPTIONS': {
            'init_command': 'SET sql_mode="STRICT_TRANS_TABLES"'
        }
    }
}
pip install django-storages
AWS_REGION = '[지역]'
AWS_STORAGE_BUCKET_NAME = '[버킷이름]'
AWS_ACCESS_KEY_ID = '[엑세스 키이름]'
AWS_SECRET_ACCESS_KEY = '[엑세스 비빌 키 이름]'

# 이미지를 받아가는 도메인 주소
AWS_S3_CUSTOM_DOMAIN = '%s.s3.%s.amazonaws.com' % (AWS_STORAGE_BUCKET_NAME, AWS_REGION)


# Static Setting
STATIC_URL = "http://%s/static/" % AWS_S3_CUSTOM_DOMAIN
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

# Media Setting
MEDIA_URL = "https://%s/media/" % AWS_S3_CUSTOM_DOMAIN
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

app-view

# 조회 페이지 반환 하는 함수
def main(request):
    pictures = Picture.objects.all()

    return render(request, 'main.html', {'result': pictures})


# 이미지 업로드 페이지 반환 및 이미지 업로드 수행 함수
def register(request):
    if request.method == 'GET':
        return render(request, 'register.html')
    elif request.method == 'POST':
        images = request.FILES.getlist("image")
        for image in images:
            picture = Picture()
            picture.img = image
            picture.save()

     return redirect('/')

app-models

class Picture(models.Model):
    img = models.ImageField(upload_to="", blank=True)

templates-main.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% if result %}

    {% for picture in result %}
        <img src="https://thisisghmybucket.s3.ap-northeast-2.amazonaws.com/{{ picture.img }}">

    {% endfor %}
{% endif %}
</body>
</html>

templates-register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" multiple name="image">
    <button>업로드</button>
</form>
</body>
</html>
python .\manage.py collectstatic
  • 연동!

  • 장고 기본 admin 이 올라가있는 것을 확인할 수 있다.

  • 오류가 있긴한데 파일들이 온곳이 R3 주소인것을 확인할 수 있다.
  • 이렇게 기본으로 제공되는 이미지들이 저장되어있다.

  1. S3 웹서버 방식(서비스리스, 요청 건수 당 요금)
    사용할때만 요금이 나간다 cpu, 메모리가 필요없다
    특정 시간에만 사용자가 폭발적으로 늘어나는 서비스에 사용(배달, 티켓팅)
  2. ec2 웹서버 방식(시간 당 요금)
    nginx와 같은 기능들을 사용 가능 cpu, 메모리등을 할당받아 사용
    24시간 내내 일정 사용자가 유지되는 서비스(게임 등)
profile
싱숭생숭늉

0개의 댓글