장고의 기능을 활용하여 AWS의 S3와 연동해보려 한다.
-준비F
AWS RDS,AWS S3 ,Django
-장고에서 pip install boto3 django-storages
AWS_REGION = 'ap-northeast-2'
AWS_STORAGE_BUCKET_NAME = 'kjs27-s3'
AWS_ACCESS_KEY_ID = ''
AWS_SECRET_ACCESS_KEY = ''
AWS_S3_CUSTOM_DOMAIN = '%s.s3.%s.amazonaws.com' % (AWS_STORAGE_BUCKET_NAME, AWS_REGION)
STATIC_URL = "https://%s/static/" % AWS_S3_CUSTOM_DOMAIN
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
MEDIA_URL = "https://%s/'media/" % AWS_S3_CUSTOM_DOMAIN
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
위 설정이 끝나면
models.py
from django.db import models
# Create your models here.
class Picture(models.Model):
img = models.ImageField(upload_to="", blank=True)
urls.py
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static
import app.views
urlpatterns = [
path('main/', app.views.main),
path('register/', app.views.register),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
views.py
from django.shortcuts import render, redirect
from app.models import Picture
import app
# Create your views here.
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('/main/')
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://kjs27-s3.s3.ap-northeast-2.amazonaws.com/{{ picture.img }}">
{% endfor %}
{% endif %}
</body>
</html>
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 renserver - url 접근 후
!Lambda
서버 없이 사용자가 등록해놓은 코드를 실행시킬수 있다.
CPU,메모리 없다. = 하지만 AWS측에 컴퓨터가 있기 때문에 아예 없다고 볼수는 없다.
함수를 몇번 실행 했는지에 따라 요금 계산
구성에서 제한시간 확인가능 = 3초안에 코드 불러오지 못하면 오류처리 하겠다. (늘릴수 있다.)
기본 설정은 제한시간 3초, 메모리 128MB, 임시 스토리지 512MB
밑에 내려가서 코드 소스에 테스트 - 테스트 이름 - 이벤트 생성 - Deploy로 배포 - 실행
- 코드 배포하기
import pymysql
def lambda_handler(event, context):
conn = pymysql.connect(host='web1.c0k4bofs0rrt.ap-northeast-2.rds.amazonaws.com',
user='',
password='',
db='web',
charset='utf8')
sql = "SELECT * FROM student"
with conn:
with conn.cursor() as cur:
cur.execute(sql)
result = cur.fetchall()
for data in result:
print(data)
-파이참에서 새 프로젝트에 아래 코드 입력
이후
pip install pymysql -t .\ 해서 모듈을 내가 있는 프로젝트에 설치 후 압축 파일로 만들어서
람다 - 함수 - 코드소스 오른쪽 업로드로 압축파일 업로드 - 테스트에서 테스트 실행 후 저장 - 로그 보기
'IT 매일매일' 카테고리의 다른 글
AWS 서버리스(server less) 3Tier conn 1 (0) | 2023.03.16 |
---|---|
AWS API GATEWAY? (0) | 2023.03.15 |
AWS S3 버킷 생성 (0) | 2023.03.15 |
클라우드와 AWS의 기초 (0) | 2023.03.13 |
파이썬 기초 2 (0) | 2023.02.20 |