본문 바로가기

AWS/Docker

[AWS/Docker] AWS Copilot CLI를 사용하여 Amazon ECS 시작하기

요구 사항

시작하기 전에 다음 요구 사항이 선행되어야 합니다.

데모 앱 Clone

git clone을 사용하여 AWS에서 제공하는 간단한 데모 앱을 clone합니다.

shell
닫기
$ git clone https://github.com/aws-samples/amazon-ecs-cli-sample-app.git demo-app

현재 디렉토리 트리는 다음과 같습니다. 도커 파일을 포함하고 있습니다.

shell
닫기
demo-app ​​​​├── CODE_OF_CONDUCT.md ​​​​├── CONTRIBUTING.md ​​​​├── Dockerfile ​​​​├── LICENSE ​​​​├── README.md ​​​​└── index.html

AWS Copilot CLI를 사용한 애플리케이션 설정 및 배포

copilot init은 Containerized 앱을 Amazon ECS에 도입하기 위해 가장 먼저 실행해야 하는 명령문입니다. 이 명령문은 도커 파일이 위치한 앱의 루트 디렉토리에서 실행됩니다.

shell
닫기
$ copilot init

AWS Copilot은 일련의 터미널 프롬프트로써 사용자의 첫 애플리케이션 및 서비스 설정을 안내합니다. 이미 AWS Copilot을 사용하여 애플리케이션이 배포된 경우 애플리케이션 이름 목록에서 하나를 선택하라는 메시지가 출력됩니다.

shell
닫기
What would you like to name your application? [? for help]

먼저 애플리케이션 이름을 demo로 지정합니다.

shell
닫기
Which workload type best represents your architecture? [Use arrows to move, type to filter, ? for more help] > Request-Driven Web Service (App Runner) ​​Load Balanced Web Service (Internet to ECS on Fargate) ​​Backend Service (ECS on Fargate) ​​Worker Service (Events to SQS to ECS on Fargate) ​​Scheduled Job (Scheduled event to State Machine to Fargate)

이어서 서비스 유형을 선택을 요구합니다. 키보드 화살표를 사용하여 서비스 유형을 선택 할 수 있습니다. 데모는 간단한 API로 동작하는 Flask 애플리케이션이므로 Load Balanced Web Service 항목을 선택합니다.

shell
닫기
What do you want to name this service? [? for help]

서비스의 이름을 api로 입력합니다.

shell
닫기
Which Dockerfile would you like to use for api? [Use arrows to move, type to filter, ? for more help] > ./Dockerfile ​​Enter custom path for your Dockerfile ​​Use an existing image instead

도커 파일을 선택합니다. copilot init 명령문이 실행된 경로에서 사용 가능한 도커 파일을 제안해줍니다. 키보드 화살표를 사용하여 적절한 도커 파일-데모 앱에서는 ./Dockerfile을 선택합니다.

shell
닫기
Which port do you want customer traffic sent to? [? for help] (80)

포트를 정의합니다. 80을 입력하거나 디폴트(80)를 사용하기 위해 Enter를 입력합니다.

shell
닫기
⠦ Creating the infrastructure to manage services and jobs under application demo.

이제 앱 리소스가 생성중임을 보여주는 로그가 출력됩니다. 잠시 기다린 후 리소스 생성이 완료되면 이어서 진행합니다.

shell
닫기
Would you like to deploy a test environment? [? for help] (y/N)

앱 리소스가 생성되었다면 테스트 환경을 배포합니다. y를 입력합니다.

shell
닫기
⠦ Linking account [AWS 계정 ID] and region [AWS 리전 코드] to application demo.

테스트 앱을 배포하는 상태 로그가 출력됩니다. 잠시 기다린 후 앱이 완전히 배포되면 다음 섹션을 이어서 진행합니다.

shell
닫기
✔ Deployed service api. Recommended follow-up action: ​​- You can access your service at http://demo-Publi-19H1JJ6HDHZ3X-859227431.[AWS 리전 코드].elb.amazonaws.com over the internet.

애플리케이션 실행 확인

다음 명령문은 앱 상태를 확인합니다. AWS Copilot 앱을 모두 나열합니다.

shell
닫기
$ copilot app ls

다음 명령문은 앱 환경 설정과 서비스 정보를 표시합니다.

shell
닫기
$ copilot app show

다음 명령문은 Copilot 환경 정보를 출력합니다.

shell
닫기
$ copilot env ls

다음 명령문은 앱의 엔드포인트, 용량 및 관련 리소스를 포함하여 서비스 정보를 표시합니다.

shell
닫기
$ copilot svc show

다음 명령문은 앱의 모든 서비스 목록을 표시합니다.

shell
닫기
$ copilot svc ls

다음 명령문은 배포된 서비스의 로그를 출력합니다.

shell
닫기
$ copilot svc logs

다음 명령문은 서비스의 상태를 표시합니다.

shell
닫기
$ copilot svc status

AWS 관리 콘솔에서 확인

AWS 관리 콘솔의 Amazon ECS에서 입장하여 실행 중인 컨테이너 인스턴스 목록을 확인 할 수 있습니다. 콘솔에서 Amzon ECS > 클러스터 > 실행 중인 클러스터 이름에 입장합니다.

작업(또는 태스크) 탭 > 실행 중인 태스크 이름을 선택합니다. 클러스터에서 실행 중인 컨테이너(이전 섹션을 따라서 진행하였다면 서비스 이름에 해당하는 api)를 확인 할 수 있습니다.

앱 설정 단계에서 서비스 유형으로 Load Balanced Web Service 항목을 선택하였습니다. AWS 관리 콘솔의 Amazon EC2에 입장합니다. EC2 대시보드 > 리소스 > 로드 밸런서에 입장합니다.

앱에 로드 밸런서가 배치되어 있습니다. 해당 로드 밸런서의 DNS로 요청을 보내면(웹 페이지에서 열면) 다음 페이지가 출력됩니다. 페이지에 출력되는 화면은 데모 앱의 index.html에 해당합니다.

demo-app/index.html

모든 리소스 삭제

테스트가 끝나면 추가 비용이 들지 않도록 모든 리소스를 삭제합니다. 이 명령문은 도커 파일이 위치한-copilot init 명령문을 실행한 동일 경로에서 실행되어야 합니다.

shell
닫기
$ copilot app delete

앱이 실행되지 않은 경로에서 호출하면 다음과 같이 실패합니다.

shell
닫기
$ copilot app delete ✘ could not find an application attached to this workspace, please run `app init` first