ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Clone-Coding][배프의 오지랖] onlineshop - AWS 관련
    Backend/Projects_report 2023. 9. 23. 12:24

    6.3 데이터베이스 설정하기

     

    2023.09.06

    AWS RDS 이용하여 MySQL Server 구축 (배프랖, 6.3 내용)

    RDS: 관계형 데이터베이스

    진행 과정)

    1. parameter 그룹 생성
    2. 데이터베이스 인스턴스 생성: “퍼블릭 액세스: 예” → 몇 분 소요됨.
    3. 인스턴스가 생성되는 동안 보안 규칙 생성: 인바운드에 모든 IP 대역(0.0.0.0/0)으로 MYSQL 접근 허용하는 규칙 추가

    문제1)

    배프랖 내용대로 데이터베이스 인스턴스 생성 후 pycharm에서 python manage.py migrate 하였으나

    ⚠️ django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on 'onlineshop-db.cuqmz5shveri.ap-northeast-2.rds.amazonaws.com' (timed out)")

    라는 error 발생.

    위 error는 아예 RDS로 연결 자체가 실패했다는 의미. (다른 설정 문제 X )

    원인: django에서 mysql 8.0 이상 버전만을 요구하면서 데이터베이스 인스턴스만 새로 생성했었는데 이미 파라미터 그룹에서 mysql5.7 을 선택하여 생성했기 때문에 새로 생성한 인스턴스와 파라미터그룹 간 충돌이 발생했을 것이라 추측

    해결: 파라미터 그룹의 mysql과 인스턴스의 mysql 버전을 맞추어 다시 생성. python manage.py migrate 진행 결과 위 error 가 발생하지 않음!. 그러나 …. 문제1-2)로 이동

     

    문제1-1)

    위 문제 해결을 위해 검색 도중 mysqlclient 모듈을 설치하라는 글을 봄. 그러나 python -m pip install mysqlclient 로는 설치 실패함.

     

    문제 1-2)

    python manage.py migrate 입력 결과 아래 error 발생

    ⚠️ django.db.utils.OperationalError: (1049, "Unknown database 'onlineshop-db'")

    settings의 NAME 에 인스턴스 식별자 값(=onlineshop-db)을 입력하였는데, 그곳은 인스턴스 식별자를 입력하는 곳이 아니었음. 바로 데이터베이스 이름을 입력하는 곳이었음. 그러나…

    !!!!!!!!!!……책을 꼼꼼히 보지 않은 나는 해당 부분을 공란으로 두었을 것으로 추측… 왜냐면 저기도 입력해야 하는 것을 이제 알았으니까…

    해결: 다시 또 인스턴스 삭제하고 새로 생성… 파라미터 그룹과 보안 규칙은 기존 것 재사용. → 드디어 성공!!!!!!! 6.3절 통과!🤩

     

    6.4 S3 미디어 서버 설정하기

     

    2023.09.06

    AWS S3를 이용하여 정적 파일을 보관하는 정적 미디서 서버 구축

    책 내용을 따라했지만 출판시점과의 간극으로 AWS 내 UI가 많이 바뀜. 임의로 진행.

    python manage.py collectstatic 결과…

    문제1)

    ⚠️ botocore.exceptions.ClientError: An error occurred (AccessControlListNotSupported) when calling the PutObject operation: The bucket does not allow ACLs

    검색 결과 아래 Link를 찾았고 그 중,

    https://stackoverflow.com/questions/54788998/djangoaws-s3-botocore-exceptions-clienterror-an-error-occurred-accessdenied

    그래서 내 {project}/config/settings.py 의 내용 중 AWS_DEFAULT_ACL = None 으로 변경!

    AWS_ACCESS_KEY_ID = "{액세스 키}"
    AWS_SECRET_ACCESS_KEY = "{비밀번호}"
    AWS_REGION = "ap-northeast-2"
    AWS_STORAGE_BUCKET_NAME="truffle-baepue-onlineshop"
    AWS_S3_CUSTOM_DOMAIN = f"{AWS_STORAGE_BUCKET_NAME}.s3.{AWS_REGION}.amazonaws.com"
    AWS_S3_OBJECT_PARAMETERS = {
        "CacheControl": "max-age=86400",
    }
    AWS_DEFAULT_ACL = None # 책 내용대로라면 "public-read" 였던 것을 None으로 바꿈.
    AWS_LOCATION = "static"
    
    STATIC_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/{AWS_LOCATION}"
    STATICFILES_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
    
    ➕ 2023.09.11) 위 문제는 ASW_DEFAULT_ACL=None이 아니어서 발생한 문제라기 보다는 S3 버킷 권한의 ‘퍼블릭 액세스 차단’ 설정을 해제하지 않아 발생한 문제일 것으로 추측… 현재는 AWS_DEFAULT_ACL=”public-read” 로도 잘 동작함.

    그 결과

    (venv) C:\Users\Jules\PycharmProjects\baepeu\onlineshop>python manage.py collectstatic

    You have requested to collect static files at the destination location as specified in your settings.

    This will overwrite existing files! Are you sure you want to do this?

    Type 'yes' to continue, or 'no' to cancel: yes

    125 static files copied.

    (venv) C:\Users\Jules\PycharmProjects\baepeu\onlineshop>

    성공!

    s3 버킷 내 static 폴더는 시간이 좀 지난 다음에 추가됨~

    댓글

Designed by Tistory.