전체 글 24

[Terraform & Route 53] 클라우드 인프라 구축 - 3일 차 : 로그인 시스템 구현과 JWT 토큰 도입

이번에는 로그인 회원가입 기능과 JWT 토큰을 도입해서 수정과 삭제를 글을 쓴 사람만 할 수 있게 만들어 보겠습니다. 비밀번호를 평문으로 DB에 저장하면 해킹 당했을 때 곤란하기에 암호화 하기 위해 라이브러리를 추가해줍니다. RDS에 users 테이블과 회원가입 API를 추가해주는 코드를 추가해줍니다. 깃허브에 업로드 하고 서버를 배포해줍니다. 이제 제 웹사이트로 들어가서 뒤에 docs를 붙여주니 signup이 보입니다. 아이디와 비번을 입력했는데 암호화되어서 저장되는 것을 확인할 수 있었습니다. 아이디는 중복되지 않게끔 해주었습니다. 잘 로그인이 되는 모습입니다. 이제 작성자가 익명인지 회원인지 확인할 수 있고 오른쪽 위에서 로그인/회원가입을 할 수 있습니다. 로..

[Terraform & Route 53] 클라우드 인프라 구축 - 2일 차 : RDS 연결과 웹사이트 꾸미기

사용자가 글을 쓰고 로그인 같은 데이터를 저장할 수 있게 데이터베이스를 연결해 주겠습니다. RDS를 테라폼으로 구축해보려고 합니다. 바깥 폴더에 새 파일을 만들어서 RDS 생성을 위한 코드를 넣어줍니다. 그리고 데이터 베이스 엔드포인트를 알 수 있게 output 파일에 코드를 추가해줍니다. 백엔드는 학교에서 그래도 다뤄봤던 파이썬으로 선택했습니다. requirements.txt는 파이썬이 실행될 때 필요한 패키지들의 목록입니다.fastapi, uvicorn: 웹 서버를 띄우는 핵심 도구sqlalchemy, pymysql: MySQL 데이터베이스와 통신하는 도구 main.py에는 데이터베이스에 접속하고 글을 쓰는 기능을 넣었습니다. 나중에 수정해갈 예정입니다. Dockerfil..

[Terraform & Route 53] 클라우드 인프라 구축 - 1일 차 : 내 도메인에 인증서 붙이기

이번에는 제 이름이 들어간 홈페이지 이름을 사고 그 홈페이지를 aws와 연동해서 https로 접속해보겠습니다. 1. 도메인 연동 및 인증서 발급 우선 인프라를 다시 세워줍니다. 그리고 git 푸시 명령으로 도커 이미지를 채워줍니다. 새롭게 domain.tf 파일을 만들어줍니다. 여기에는 Route53에 제 호스팅 영역을 생성하고 aws가 할당한 네임 서버 4개의 주소를 출력해주는 코드를 넣습니다. 실행해주니 주소 4개가 나왔습니다. 제 이름의 주소는 가비아에서 미리 사놨습니다. (무려 2700원,,,) 이 주소의 네임서버 설정에 들어갑니다. 처음에 3차까지 있는데 추가로 4개를 만들어준 후에 아까 나온 주소 4개를 순서대로 넣어줍니다. 이제 도메인에 인증서를 걸어서 ht..

[GitHub Actions & ECS] CI/CD 배포 자동화 - 4일 차 (완) : 오토 스케일링과 트래픽 집중 시 알림 구현

이번에는 오토스케일링을 추가해서 서버에 트래픽을 몰아넣었을 때 자동으로 서버를 늘리고 알림까지 보내는 기능을 만들어 보겠습니다. 1. 오토 스케일링 환경 구성 인프라도 다시 만들어줍니다. ecs.tf 파일 아래에 오토스케일링 코드를 넣어줍니다. CPU 사용률이 70% 이상일 때 컨테이너를 3개까지 늘려주고 한 번 만든 후에 60초는 상황을 지켜보는 코드입니다. 이제 알림 보내주는 기능을 구현해주기 위해 EventBridge의 연결에 들어간 후 연결 생성을 해줍니다. 이름을 정해주고 권한 유형은 API 키를 선택해줍니다. 키 이름과 값은 Authorization, dummy로 넣어줍니다. 인증 정보를 보관하는 느낌입니다. 웹후크 URL과 인증 정보를 묶어주기 위해 API 대상에 들..

[GitHub Actions & ECS] CI/CD 배포 자동화 - 3일 차 : 디스코드 배포 알림 봇 설정

이번에는 새로 배포가 완료되면 디스코드의 알림 봇을 통해 배포가 완료된 것을 알 수 있는 시스템을 만들어보겠습니다. 시작하기 전에 제거했던 인프라를 다시 만들어줍니다. 디스코드의 새로운 서버를 만들고 채팅 채널 하나를 알림창으로 만들어줍니다. 만든 서버의 설정에서 웹후크 만들기를 눌러줍니다. 새 웹후크를 하나 만들어줬습니다. 이름은 git배포. 웹후크와 깃을 연결해주겠습니다. AWS 키 연동했을 때처럼 새 보안 저장소 생성을 해줍니다. 이름은 DISCORD_WEBHOOK을 넣고 Secret에는 생성한 웹후크를 클릭하면 주소 복사 탭이 있는데 그걸 넣어줍니다. AWS 키까지 해서 총 3개가 만들어져있습니다. 이제 서로 연동이 되었으니 yml 파일에 디스코드에 알림을..

[GitHub Actions & ECS] CI/CD 배포 자동화 - 2일 차 : 자동 배포 명령서 작성 및 확인

이번에는 자동 배포 명령서 작성을 통해 편리하게 웹사이트 배포를 해보겠습니다. 1. 자동 배포 명령 저번에 만든 ECS와 ECR같은 인프라를 다시 terraform apply로 만들어줍니다. 명령서를 깃허브가 찾기 편하게 코드가 있는 파일내에 새 폴더를 만들고 .github라고 이름 지어줍니다. .github안에 또 폴더를 만들어주고 workflows라고 지어줍니다. 이번에는 workflows안에 deploy.yml라고 파일을 만들어줍니다. 파일에 자동 배포 명령 코드를 작성해주고 저장합니다. git add. / git commit -m / git push origin 이렇게 3가지 푸시 국룰 명령을 입력해줍니다. 깃허브의 Actions를 보면 방금 푸시한 게 잘 도착한 것을 알..

[GitHub Actions & ECS] CI/CD 배포 자동화 - 1일 차 : GitHub 원격 저장소 및 보안 키 연동

이번 실습으로는 저번에 만든 ECS를 깃허브와 연동해서 자동으로 돌아가는 작업을 해보겠습니다.그중에서도 오늘은 깃허브 저장소를 만들고 VSCODE로 푸시해주기, 보안 키 연동을 할 겁니다. 1. 깃허브 연동 및 푸시 우선 저는 깃허브 계정이 없어서 만들고 로그인 해준 후의 화면입니다. 여기서 초록색 새 저장소 생성을 누릅니다. 원하는 이름으로 만들어주고 퍼블릭으로 설정해준 후에 생성해줬습니다. .gitignore 파일을 하나 만들어줄건데 여기에 넣은 애들을 빼고 저장소에 올라갑니다. 중요한 것이나 불필요한 것을 빼고 올리기 위해서 만드는 것입니다. 깃을 실행하는 명령인 git init을 쳤는데 에러가 떴습니다. 깃허브에 저장소는 만들었는데 이걸 올려줄 프로그램인 git은 별개라는 것을..

[Docker & ECS] 컨테이너 배포 해보기 - 4일 차 (완) : 무중단 배포 테스트하기

이번에는 배포한 컨테이너가 실제로 업데이트를 하여 버전을 바꾸더라도 멈추거나 오류를 내지않고 바로 바뀌는지 테스트 해보겠습니다. 우선 처음에 만든 웹페이지를 바뀐 것을 알아차리기 쉽게 업데이트합니다. 그리고 잊지않고 그동안 쓴 코드들을 모두 apply해주고 푸시명령까지 넣어서 창고를 채워줍니다. 이제 새로 넣은 업데이트버전으로 바로 교체할 수 있게 배포를 강제 적용해 줄 것입니다. ECS의 클러스터로 들어갑니다. 클러스터에 들어가서 만들었던 서비스에 들어가줍니다. 주황색의 서비스 업데이트를 눌러줍니다. 새 배포 강제 적용을 체크표시해주고 업데이트 해주면 됩니다. ALB의 DNS 주소를 치고 들어오면 바로 이렇게 바뀐 버전의 웹페이지가 보입니다.원래는 이전버전이 보이다가 ..

[Docker & ECS] 컨테이너 배포 해보기 - 3일 차 : ECS와 ALB 붙이기

이번엔 직접 ip를 치고 들어오지않고 ALB를 거쳐서 들어오도록 만들어주겠습니다. ALB 전용 보안 그룹을 먼저 만들어줍니다. 이게 방화벽으로써 트래픽을 걸러줄겁니다. apply를 통해서 보안 그룹이 잘 만들어진 것을 확인했습니다. 이제 진짜 ALB와 로드밸런서가 트래픽을 보내줄 목적지 명단인 타겟 그룹을 만들어줍니다. 에러내용을 보니 vpc가 서로 다른 두개의 가용영역에 있어야 한다고 합니다. 저번에 만든 vpc는 하나였기에 새로 하나를 더 만들어주려합니다. 미리 가용영역을 봐주고 다른 곳으로 만들어줍니다. 다른 가용영역으로 vpc를 하나 더 만들었습니다. 그 다음 진행하니 잘 추가된 모습입니다. 어제 만들었던 ECS 부분 코드에서 타겟 그룹과 서로 연결해주는 ..

[Docker & ECS] 컨테이너 배포 해보기 - 2일 차 : 24시간 돌아가는 서버 환경 구축

이번엔 창고에 있는 도커 이미지를 ECS Fargate로 가져와보겠습니다. 우선 ECR에서 이미지를 빼오기 위해 필요한 권한을 iam역할을 통해 부여해주는 코드를 넣어줍니다. 다음으로 컨테이너들이 모이는 구역인 클러스터, 도커 컨테이너의 스펙을 적어두는 설계도인 작업 정의서를 만들어주는 코드를 넣어줍니다. 에러가 떠서 내용을 확인해보니 컨테이너 이미지 주소에 유효하지 않은 문자가 들어있다고 해서 수정해서 다시 입력했습니다. ( [ ] 가 문제였습니다) 수정해주니 잘 만들어졌습니다. 이제 실제로 보안그룹과 ECS 서비스를 만들어줍니다. Fargate타입으로 띄워줬습니다. 만드는 과정에서 또 오류가 나서 봤는데 서브넷이 비어있다는 오류였습니다. 전에 요금 나갈까봐 모든 vpc를 ..