backend : Python Django
Dockerfile을 기반으로 Docker image를 빌드하여 ECS Fargate를 이용해 배포한다.
* 원래는 .env 에 환경변수를 저장해 os.environ.get(변수) 로 가져왔는데,
.env 파일은 깃허브에 올리지 않기 때문에 깃헙 액션에서 빌드-배포를 할때 변수 값을 Github Actions Secrets 사용해 넣어주고
Dockerfile과 yml 파일에서 이미지 빌드 시 해당 변수를 받아올 수 있도록 했다.
FROM python:3.9-alpine
COPY frontend /code/backend/frontend/
COPY ./backend/ /code/
WORKDIR /code
COPY --from=FRONTEND /code/backend/frontend/src/App.tsx .
RUN apk add --no-cache gcc musl-dev postgresql-dev curl
RUN pip install -r /code/backend/requirements/production.txt
EXPOSE 8000
ARG SECRET_KEY
ARG DB_NAME
ARG DB_USER
ARG DB_PASSWORD
ARG DB_HOST
ARG DB_PORT
ENV SECRET_KEY=${SECRET_KEY} DEBUG=${DEBUG} \
DB_NAME=${DB_NAME} DB_USER=${DB_USER} DB_PASSWORD=${DB_PASSWORD} DB_HOST=${DB_HOST} DB_PORT=${DB_PORT}
RUN ["python", "manage.py", "makemigrations"]
RUN ["python", "manage.py", "migrate"]
ENTRYPOINT [ "python", "manage.py", "runserver", "0.0.0.0:8000" ]
ARG 안넣고 ENV만 넣으면 값이 안 들어간다! 주의!
docker build --build-arg SECRET_KEY \
--build-arg DB_USER \
--build-arg DEBUG \
--build-arg DB_NAME \
--build-arg DB_USER \
--build-arg DB_PASSWORD \
--build-arg DB_HOST \
--build-arg DB_PORT \
-t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
aws.yml 파일에서는 이런 식으로 환경변수를 전달할수 있다.
Github Actions - new workflow - ecs 를 검색하면 workflow 양식이 바로 뜨는데,
이 양식만 사용하면
위와 같은 에러가 난다.
https://github.com/aws-actions/amazon-ecs-deploy-task-definition 를 참조해서
- name: Download task definition
run: |
aws ecs describe-task-definition --task-definition my-task-definition-family --query taskDefinition > task-definition.json
단계를 추가해주고
아래 단계의 task-definition을 다음과 같이 수정해주어야 한다.
- name: Fill in the new image ID in the Amazon ECS task definition
id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@v1
with:
task-definition: task-definition.json
container-name: ${{ env.CONTAINER_NAME }}
image: ${{ steps.build-image.outputs.image }}
이미지 빌드 시 requirements를 설치해주는게 매번 생각보다 오래 걸려서 총 작업은 5분이 넘게 걸린다.
뱅크샐러드 기술블로그를 참고하여 캐시를 추가해볼 예정이다!
'개발 > Python' 카테고리의 다른 글
GCP 버킷 안의 파일 GCP 주피터 노트북에서 unzip 하기 (0) | 2021.10.17 |
---|---|
GCP 주피터 노트북 인스턴스로 GCP 버킷의 mp4 비디오 읽기 (0) | 2021.09.05 |
파이썬으로 파일 부분 이름 한번에 바꾸기 (0) | 2021.09.05 |
파이썬 재귀함수로 문자열 거꾸로 출력하기 (0) | 2021.05.16 |
정규식을 사용하여 여러 패키지 버전 한 번에 지우기 (0) | 2021.05.08 |