이번에는 Beanstalk 서비스를 이용하여 기본 웹 서버를 생성해 보겠습니다.
우리가 beantalk에서 웹 서버를 만들 때 서비스를 직접 찾고 설정하는 수고를 덜기 위해 만든 타사 서비스라고 생각할 수 있습니다.
따라서 Beanstalk 설정 후 필요한 서비스도 설정할 수 있습니다.(예: ALB, EC2 등..)
다만 서비스에 직접 들어가 수정을 하게 되면 빈스토크가 심각한 오류를 일으킬 수 있으므로 빈스토크에 없는 기능이 아니라면 빈스토크에서 설정하는 것을 권장한다.
API 프레임워크는 Django Rest Framework입니다.
블로그의 개요를 보고 싶으시면 아래 링크를 참조하십시오.
https://dream-developer-write.entry/AWS-beanstalk-%EC%9B%B9-%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%84 %A4%EA%B3%84-%EB%B0%8F-%EA%B5%AC%EC%B6%95-1-%EC%95%84%ED%82%A4%ED%85%8D% EC%B3%90-%EC%84%A4%EA%B3%84
AWS Beanstalk 웹 서비스 설계 및 구축(1) – 아키텍처 및 시스템 구축
개요 설명 저는 스타트업의 수석 개발자입니다. 이 글을 쓰게 된 계기는 지금까지 적용해 온 기술들을 스스로 정리하고 싶었기 때문입니다. 그리고 제가 적용한 서비스는 web
dream-developer-write.tistory.com
Beanstalk 아키텍처 도식 설명

EC2에서 docker를 설정하여 쉽게 배포할 수 있도록 설계되었습니다.
- nginx + gunicorn을 설정하여 웹서버를 구성하여 안정성을 높였습니다.
- Django Framework를 사용하여 API 프레임워크를 진행합니다.
AWS 빈스토크 생성
AWS 콘솔에서 탄력있는 콩나무’검색하여 액세스할 수 있습니다.
접속하시면 아래와 같은 내용을 보실 수 있습니다.

Beanstalk 설정(웹 앱 설정)

원하는 애플리케이션 이름을 입력하기만 하면 됩니다.

플랫폼을 Docker로 설정하고 플랫폼 분기를 ’64비트 Amazon Linux 2에서 실행되는 Docker’선택하다
플랫폼 버전은 권장 버전으로 설정됩니다.
이후

소프트웨어 설정

‘소프트웨어’ 영역에서.
S3 로그 스토리지
EC2 시스템 로그를 s3 서비스에 넣을지 여부에 대한 선택적 값입니다.
‘롤링 업데이트 및 배포 설정’ 정보에 따라서는 설정하지 않아도 되지만 지속적인 패치가 필수라고 가정한다면 무조건 설정해야 한다고 생각합니다. 그 이유는 무중단 패치의 경우 기존 EC2를 삭제하고 새로운 EC2를 생성한 후 서비스를 재시작하기 때문입니다. (나중에 롤링 업데이트 및 배포 설정에 대해 자세히 설명하겠습니다.)
서비스 이용 시 트래픽에 따라 요금이 부과되오니 유의하시기 바랍니다.
인스턴스 로그를 CloudWatch Logs로 스트리밍
이 설정은 EC2 시스템 로그를 CloudWatch Logs에 넣을지 여부를 결정합니다.
CloudWatch Logs에 대해 궁금해 하시는 분들이 많으실 것 같아서 간단히 설명드리겠습니다.
CloudWatch Log는 AWS에서 생성되는 다양한 로그를 수집할 때 CloudWatch Log 서비스를 이용하여 로그 데이터를 축적하고 로그 데이터를 조회하는 서비스라고 생각하시면 됩니다. (주제에 맞지 않아서 기회가 되면 소개하는 시간을 갖도록 하겠습니다^^)
이 옵션 값을 설정하면 CloudWatch Log 서비스를 통한 모니터링에 적합하므로 해당 서비스를 사용하는 것이 좋습니다.
서비스 이용 시 트래픽에 따라 요금이 부과되오니 유의하시기 바랍니다.
인스턴스 설정

이제 루트 디스크를 설정할 차례입니다.
위 그림을 보시면 ‘Root Volume Type’, ‘Size’, ‘IOPS’, ‘Throughput’을 설정할 수 있습니다.
경우에 따라 해당 영역에 설정할 수 없는 경우가 있습니다. 하나씩 살펴보겠습니다.
루트 볼륨 유형
루트 볼륨 유형은 다음과 같습니다.
- 자기
- 범용(SSD)
- 범용 3(SSD)
- 프로비저닝된 IOPS(SSD)
누가 최근 마그네틱을 개발했는지는 모르겠지만 초년에도 CCTV나 대용량 데이터를 넣을 때 많이 사용했습니다.
(비디오테이프라고 했을 때 아시는 분은 아버님.. 저도 아버님.. ㅋㅋ)
현재로서는 비용 문제로 인해 테스트 목적이 아니면 사용하지 않는 것이 좋습니다.
보통 ‘범용(SSD)’과 ‘범용3(SSD)’가 있는데 ‘IOPS’와 ‘처리량’을 선택할 수 있다는 점이 다르다.
‘범용(SSD)’이 설정되지 않았다고 해서 IOPS나 처리량이 없는 것은 아닙니다.
‘범용(SSD)’의 경우 기본적으로 디스크 용량에 따라 IOPS와 처리량이 증가하는 것으로 알고 있습니다.
(정확한 수치는 나중에 찾아보겠습니다.)
그리고 ‘유니버셜 3(SSD)’가 후기 모델이기 때문에 성능이 훨씬 좋아질 것 같습니다.
그러나 범용 3(SSD)을 선택하면 ‘IOPS’와 ‘처리량’을 설정해야 하므로 충분한 지식이 없다면 실습용으로 ‘범용(SSD)’을 사용하는 것을 권장합니다. (실제로 데이터를 설정하기 위해서는 성능 테스트 후 설정하면 문제가 없습니다.)
IOPS
IOPS에 대해 알아봅시다. IOPS의 약어는 다음과 같습니다.
초당 입력/출력 작업
초당 I/O 수로 해석할 수 있습니다. 얼마나 쉬운가요? 하하 (갑자기 밥선생이 생각나..)
디스크를 읽고 쓸 때 초당 횟수입니다.
여하튼 AWS에서 초당 I/O 수를 설정하면 초당 횟수만큼만 사용하겠다고 선언하기 때문에 아무리 많은 부하가 발생하더라도 설정된 수만큼 IOPS가 발생하지 않는다.
(이 값으로 디스크 성능을 최적화하고 비용을 줄일 수 있습니다. 기회가 되면 성능 최적화에 대해 논의하겠습니다.)
처리량(처리량)
단위는 Mib/s이며 네트워크 트래픽 양으로 인식할 수 있습니다.
네트워크 트래픽 양이 디스크 처리에 영향을 받는 이유가 궁금할 수 있습니다.
(이것이 의심된다면 당신은 타고난 개발자입니다..)
기본적으로 EC2 디스크는 EBS라는 객체 스토리지 기반 디스크입니다.
오브젝트 스토리지는 물리적으로 존재하는 디스크가 아닌 네트워크 기반 스토리지입니다.
그래서 디스크에서 데이터를 주고 받을 때 네트워크를 사용할 수밖에 없는 구조입니다.
(이해가 안되는 부분은 댓글로 물어봐주세요.)
처리량은 수정된 값 이상으로 네트워크 트래픽을 사용할 수 없는 구조이므로 성능 테스트를 통해 설정하는 것을 권장합니다.
마치다
이번에는 콩나무 설정에 대해 알아보았습니다.
원래 블로그에 다 올리려고 했는데 내용이 많아서 두번에 나누어서 올리려 합니다.
할 설정은 다음과 같습니다.
- 용량 설정
- 로드 밸런서 설정(중요)
- 롤링 업데이트 및 배포 설정(중요)
- 보안 설정
- 모니터링 설정
- 관리형 업데이트 설정
- 알림 설정
- 네트워크 설정
아직 갈 길이 멀지만 최선을 다하겠습니다. ㅋㅋㅋ
그럼 다음 블로그에서 만나요^^.
참고 자료
- https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=skauter&logNo=10166521906
- https://ehfgk78.github.io/2018/02/01/AwsEbDocker/
AWS ElasticBeanstalk(Docker 플랫폼)로 Django 배포
파이썬 장고 코드 …
ehfgk78.github.io