'EC2'에 해당하는 글 8건

CodeStar

Server/AWS 2018. 9. 17. 21:31

특정 프로그래밍 언어로 개발/빌드/배포 환경을 미리 구성된 템플릿을 사용하여 빠르게 구축해 주는 서비스이다. 예를 들어, Laravel 로 PHP 개발을 하려 한다면, EC2 / Git / CodeBuild / CodeDeploy / CodePipeline 등을 미리 구성해 주며 git 에 push 만 하면 자동 배포되어 결과를 확인할 수 있다. 그리고 제공되는 대시보드에서 프로젝트의 개발/빌드/배포 등의 이벤트 현황을 즉시 확인할 수 있다. 아무래도 미리 준비된 템플릿으로 빠르게 구성되는 장점은 있지만, 언어나 프레임워크의 버전, 서버종류 등의 선택이 제한적인 단점 때문에 사용할 일이 있을지는 모르겠다.





CodeStar 는...


CodeStar 는 AWS 를 기반으로 애플리케이션을 빠르게 개발, 빌드, 배포할 수 있는 클라우드 기반 서비스이다. CodeStar 프로젝트를 생성하면 이미 만들어진 CloudFormation 템플릿 중 원하는 환경의 어플리케이션을 선택할 수 있다. 사용되는 Service 들이 모두 리전 별 서비스이므로 CodeStar 역시 리전 별로 서비스한다. CodeStar 자체는 무료이므로 함께 사용하는 리소스의 요금만 발생된다.



CloudFormation 템플릿 선택사항


  • Application : Web application / Web service / Static Website / AWS Config Rule
  • Service : Elastic Beanstalk / EC2 / AWS Lambda
  • Language : Python / PHP / C# / Node.js / Ruby / Java / Go / HTML


Web application 와 Web service 의 차이라면 Web application 은 UI 나 웹페이지 기능이 많고, Web service 는 RESTful 같은 API 기능에 특화되어 있는 것 같다. 그 외에도 빌드가 트리거 될 AWS CodeCommit 나 GitHub 중 하나의 저장소를 선택해야 하고, 리소스 구성 세부 정보에서 배포될 EC2 와 VPC, Subnet 등을 설정할 수 있다.


CodeStar 에는 프로젝트, 도구 체인 및 중요 이벤트를 전체적으로 보여주는 대시보드를 제공한다. 최신 프로젝트 활동 모니터링, 코드 변경, 빌드 결과 및 배포 상태 추적 같은 작업을 타일에 추가/제거하여 대시보드를 구성할 수 있다. 프로젝트를 생성하면 팀의 소유자로 추가되며, 다른 사용자를 더 추가하고 역할을 부여하여 함께 운용할 수 있다. GitHub 리포지토리나 Atlassian JIRA 같은 AWS 외부의 리소스를 사용하는 경우, 사용자 이름 및 이메일 주소를 가진 별도의 사용자 프로필을 사용할 수 있다. 코드를 변경하고 저장소에 푸시하면, Continuous deployment 타일에 진행 중인 작업이 표시되며, CodePipeline 에서 저장소의 변경 사항으로 빌드 및 배포되어 엔드포인트에서 결과를 확인할 수 있다.


프로젝트를 삭제하면 관련 내부 리소스는 자동으로 모두 삭제된다.




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

ECS Task

Server/AWS 2018. 8. 17. 22:16

Image 를 푸시하고 Cluster 를 생성하면 Image 를 구동할 수 있는 것처럼 얘기했지만, 해야 할 것이 하나 더 있다.


Docker 저장소의 Image 는 ECS 에서 사용하기 위해 Task 라는 작업에 정의해야 한다. 이 task 정의에는 실행할 이미지, 컨테이너 사양, 포트 등을 설정할 수 있으며, 이러한 Task 정의로부터 특정 ECS Cluster 를 선택하여 실행시킬 수 있다. Image 는 여러 Task 정의에서 가져다 쓸 수 있으며 Task 정의 역시 여러 Cluster 에서 실행시킬 수 있다.


이번에는 Task 정의를 생성하여 사용할 Image 를 설정해 보겠다.



1. 아키텍처 설계


컨테이너 서비스인 ECS 를 사용하여 어플리케이션을 운영한다는 것은 아키텍처 면에서 기존 방식과 조금씩 차이가 있을 수 있다. (이건 각자 알아서 ㅜ) 하나의 이미지를 여러 인스턴스에서 실행할 것인지 하나의 인스턴스에 여러 이미지를 실행할 것인지 등을 생각해 보아야 한다. 일단 하나의 Docker 이미지로 웹 서버 2대를 사용한다고 했을 때 필요한 것은,


web Image:1 -> web Task 정의:1 -> web Cluster (EC2:2)


이렇게 구성하면 될 것이다. 2 대의 인스턴스를 로드 밸런서에 묶기 위해 Cluster 에 Service 라는 것도 추가해야 하지만 일단 생략했다. 공통 모듈을이나 구성 요소에 따라, 하나의 task 정의에 여러 컨테이너(Image) 를 정의할 수도 있을 것이고... 일단 가장 심플하게 가보자.



2. Task 정의 생성


먼저 콘솔의 ECS - Task Definitions - [Create new Task Definition] 을 선택한다. ECR 에서도 잠시 거론했지만, Task 정의도 가장 먼저 선택하는 것이 시작 유형이다. Fargate / EC2 인스턴스 시작 유형 중 하나를 가장 먼저 선택하게 되고, 선택한 시작유형에 따라 미세하게 설정에 차이는 있다. Network 모드나 Port 설정 등... ECS Document 에 보면 Task 정의를 Dockerfile 처럼 json 파일로 정의할 수 있게 만들어놨는데, 그걸 먼저 보면 토나온다. 설정하는 것은 몇개 안되는데 모든 항목들이 다 나와 있어서 매우 복잡해 보이지만, 콘솔 대신 json 파일로 작업해야 한다면 콘솔에서 제공하는 json 형태의 스크립트에서 설정할 항목만 뽑아서 가져다 쓰면 된다. EC2 인스턴스 시작 유형을 선택했다면 이것저것 설정할 항목이 많아 보이는데, 대부분 Default 로 두면 되고 설정할 것은 몇 개 안된다.


- Task 정의 이름

- Add container : 사용할 Image 의 Repository URI, 이 컨테이너에 할당할 메모리/CPU, Port 매핑


메모리와 CPU 는 사용할 인스턴스 사양과 추가할 컨테이너들을 고려하여 설정한다. 이게 끝이다. ㅋㅋ 컨테이너 Image 나 메모리/CPU, 포트 매핑 등을 수정하기 위해 task 를 업데이트 하면 새로운 리비전이 추가된다. 아마도 운영중에는 크게 수정할 일이 없을 것이다.



3. Task 실행


구동을 확인해 보고 싶다면, Task 정의 리스트에서 Task 정의를 선택하고 [Run Task] 를 클릭하여 실행할 Cluster 를 선택하고 Number of tasks 수를 입력하면 끝. 혹은 Cluster - Tasks 에서 [Run new Task] 를 선택해도 결과는 동일하다. Number of tasks 수를 2 로 지정하면 두 개의 인스턴스에서 Task 가 독립적으로 실행될 것이다. Cluster 에 지정된 인스턴스 수가 한 개라면 한 개의 Task 만 실행된다. Task 가 실행되고 나면 PENDING 상태에 돌입하고 수초내에 정상적인 인스턴스에서 실행되고 있다는 뜻의 RUNNING 상태가 된다. Cluster 에 등록된 인스턴스에서 Task 정의의 Image 를 실행시킬 것이고, Public DNS 를 통해 Image 구동을 확인할 수 있다. Task 를 Stop 시키면 인스턴스에의 task 도 곧 중지된다. 개발 중에는 이렇게 로드 밸런서를 통하지 않고 Task 정의를 클러스터에 다이렉트로 실행시켜서 바로 Image 를 확인할 수 있다.




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

ECS Clusters

Server/AWS 2018. 8. 16. 23:40



Docker 이미지를 생성하여 Repository(ECR) 에 푸시를 해 보았다.

Cluster 는 이러한 Docker 이미지들을 구동시킬 인스턴스들의 논리적 그룹으로 볼 수 있으며, ECS 의 가장 큰 범주로 볼 수 있다.

위 그림에서 처럼 VPC 안의 최상단에서 컨테이너 인스턴스들을 감싸고 있는 것이 바로 ECS Cluster 이다.

Image 를 실행시키려면 일단 Image 를 구동시킬 인스턴스를 배치할 Cluster 를 만들어야 한다.

Cluster 생성할 때 중요한 것은 Image 를 구동시킬 인스턴스의 사양을 정하는 것이다. 인스턴스 개수는 추후 [Scale ECS Instances] 에서 수정이 가능하다.


1. ECS - Cluster - [Create Cluster]

2. 시작 유형 선택 : Fargate 는 인스턴스를 구성할 필요 없음

3. EC2 의 경우 EC2 인스턴스 타입, Key pair, VPC, security group 등을 설정.


Cluster 생성을 완료하면, ECS Instances 탭에 설정한 만큼의 인스턴스가 생성된 것을 확인할 수 있다. 인스턴스 수를 늘리면 인스턴스가 추가되어 ACTIVE 상태가 되고 인스턴스 수를 줄이면 해당 인스턴스는 수 분 안에 삭제된다. 인스턴스를 ACTIVE 상태에서 DRAINING 으로 전환하면 기존 Task 에 영향을 미치지는 않지만, 해당 인스턴스에는 더 이상 Task 정의가 할당될 수 없으며 다시 ACTIVE 상태로 전환하면 가능해 진다.






WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,