AWS Copilot을 사용하여 클러스터링된 애플리케이션을 Amazon ECS에 배포 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS Copilot을 사용하여 클러스터링된 애플리케이션을 Amazon ECS에 배포

작성자: 장 밥티스트 길로이스(AWS), 매튜 조지(AWS) 및 토마스 스콧(AWS)

코드 리포지토리: 클러스터링된 샘플 애플리케이션 데모

환경: 프로덕션

기술: 컨테이너 및 마이크로서비스, 비즈니스 생산성, 클라우드 네이티브, 소프트웨어 개발 및 테스트

AWS 서비스: Amazon ECS, AWS Fargate, Amazon ECR

요약

이 패턴은 AWS Copilot이 배포 작업을 간소화하는 방법을 보여주기 위해 Amazon Web Services(AWS) Management Console을 사용하는 방법과 AWS Copilot을 사용하는 두 가지 방법으로 Amazon Elastic Container Service(Amazon ECS) 클러스터에 컨테이너를 배포하는 방법을 보여줍니다.

Amazon ECS는 클러스터에서 컨테이너를 손쉽게 실행, 중지 및 관리할 수 있게 해주는 컨테이너 관리 서비스로서 확장성과 속도가 뛰어납니다. 컨테이너는 서비스 내에서 개별 작업이나 여러 작업을 실행하는 데 사용하는 작업 정의에 정의됩니다. AWS Fargate에서 관리하는 서버리스 인프라에서 작업 및 서비스를 실행할 수 있습니다. 또는 인프라에 대한 더 세부적인 제어를 위해 사용자가 관리하는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 클러스터에서 작업과 서비스를 실행할 수 있습니다.

AWS Copilot 명령줄 인터페이스(CLI) 명령은 로컬 개발 환경에서 Amazon ECS에 기반한 프로덕션 지원 컨테이너화된 애플리케이션의 구축, 릴리스 및 운영을 간소화합니다. AWS Copilot CLI는 인프라를 코드로 사용하는 것부터 사용자를 대신하여 프로비저닝되는 지속적 통합 및 지속적 전달(CI/CD) 파이프라인 생성에 이르기까지 최신 애플리케이션 모범 사례를 지원하는 개발자 워크플로우에 부합합니다. AWS Management Console 대신에 일상적인 개발 및 테스트 주기의 일부로 AWS Copilot CLI를 사용할 수 있습니다.

사전 조건 및 제한 사항

사전 조건

  • 활성 상태의 AWS 계정

  • AWS 계정을 사용하도록 AWS Command Line Interface(AWS CLI)가 로컬에 설치 및 구성됨(AWS CLI 설명서의 설치 지침구성 지침 참조)

  • AWS Copilot 로컬에 설치됨(Amazon ECS 설명서의 설치 지침 참조)

  • 로컬 시스템에 Docker가 설치됨(Docker 설명서참조)

제한 사항

  • Docker는 무료 요금제에서 IP 주소당 6시간당 컨테이너 이미지 100개의 풀 한도를 적용합니다.

아키텍처

대상 기술 스택  

  • Virtual Private Cloud(VPC), 퍼블릭 및 프라이빗 서브넷, 보안 그룹으로 설정된 AWS 환경

  • Amazon ECS 클러스터

  • Amazon ECS 서비스 및 작업 정의

  • Amazon Elastic Container Registry (Amazon ECR)

  • Amazon DynamoDB

  • Application Load Balancer

  • AWS Fargate

  • Amazon Identity and Access Management(IAM)

  • 아마존 CloudWatch

  • AWS CloudTrail

대상 아키텍처 

이 패턴에 대해 샘플 애플리케이션을 배포하면 여러 작업이 생성되어 별도의 가용 영역에 배포됩니다. 각 작업은 Amazon DynamoDB에 데이터를 저장합니다. 작업을 위해 웹 페이지에 액세스하면 다른 모든 작업의 데이터를 볼 수 있습니다.

AWS Copilot을 사용하여 컨테이너를 배포하기 위한 아키텍처

도구

서비스

  • Amazon ECR  Amazon Elastic Container Registry(Amazon ECR)는 안전하고 확장 가능하고 신뢰할 수 있는 AWS 관리형 컨테이너 이미지 레지스트리 서비스입니다. Amazon ECR은 IAM을 사용하여 리소스 기반 권한을 가진 프라이빗 리포지토리를 지원합니다.

  • Amazon ECS - Amazon Elastic Container Service(Amazon ECS)는 클러스터에서 컨테이너를 손쉽게 실행, 중지 및 관리하기 위한 컨테이너 관리 서비스로서 확장성과 속도가 뛰어납니다. AWS Fargate에서 관리하는 서버리스 인프라에서 작업 및 서비스를 실행할 수 있습니다. 또는 인프라에 대한 더 세부적인 제어를 위해 사용자가 관리하는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 클러스터에서 작업과 서비스를 실행할 수 있습니다.

  • AWS Copilot - AWS Copilot은 레지스트리로 푸시, 작업 정의 생성, 클러스터 생성을 포함하여 AWS에서 컨테이너화된 애플리케이션을 시작하고 관리하는 데 도움이 되는 명령줄 인터페이스를 제공합니다.

  • AWS Fargate — AWS Fargate는 서버를 관리하지 않고 애플리케이션 구축에만 집중할 수 있게 해주는 서버리스 pay-as-you-go 컴퓨팅 엔진입니다. AWS Fargate는 Amazon ECS 및 Amazon Elastic Kubernetes Service(Amazon EKS) 모두와 호환됩니다. Fargate 시작 유형 또는 Fargate 용량 공급자를 사용하여 Amazon Amazon ECS 태스크와 서비스를 실행할 때는 애플리케이션을 컨테이너에 패키징하고, CPU 및 메모리 요구 사항을 지정한 다음, 네트워킹 및 IAM 정책을 정의하고, 애플리케이션을 시작합니다. 각 Fargate 작업에는 자체 격리 경계가 있으며 다른 작업과 기본 커널, CPU 리소스, 메모리 리소스 또는 탄력적 네트워크 인터페이스를 공유하지 않습니다.

  • Amazon DynamoDB - Amazon DynamoDB는 완전 관리형 NoSQL 데이터베이스 서비스로, 원활한 확장성과 함께 빠르고 예측 가능한 성능을 제공합니다.

  • Elastic Load Balancing (ELB) – Elastic Load Balancing은 하나 이상의 가용 영역에서 EC2 인스턴스, 컨테이너, IP 주소 등 여러 대상에 걸쳐 수신되는 트래픽을 자동으로 분산합니다. 등록된 대상의 상태를 모니터링하면서 상태가 양호한 대상으로만 트래픽을 라우팅합니다. Elastic Load Balancing은 수신 트래픽이 시간이 지남에 따라 변경됨에 따라 로드 밸런서를 확장합니다. 대다수의 워크로드에 맞게 자동으로 조정할 수 있습니다.

도구

code

이 패턴에 사용된 샘플 애플리케이션의 코드는 클러스터 샘플 애플리케이션 리포지토리의 에서 GitHub 사용할 수 있습니다. 샘플 파일을 사용하려면 다음 섹션의 지침을 따르십시오.

에픽

작업설명필요한 기술
GitHub 리포지토리를 복제합니다.

다음 명령을 사용하여 샘플 코드 리포지토리를 복제합니다.

git clone https://github.com/aws-samples/cluster-sample-app cluster-sample-app && cd cluster-sample-app
앱 개발자, AWS DevOps
Amazon ECR 리포지토리를 생성합니다.
  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/ecr/repositories에서 Amazon ECR 콘솔을 엽니다.

  2. 리포지토리 생성을 선택합니다.

  3. 리포지토리 이름을 입력하십시오 cluster-sample-app.

  4. 기타 모든 설정은 기본값을 유지합니다.

  5. 리포지토리 생성을 선택합니다.

자세한 내용은 Amazon ECR 설명서의 프라이빗 리포지토리 생성을 참조하세요.

앱 개발자, AWS DevOps
도커 이미지를 빌드하고 태그를 지정하여 Amazon ECR 리포지토리에 푸시합니다.
  1. 방금 생성한 리포지토리를 선택하고 푸시 명령 보기를 선택합니다.

  2. 표시된 명령을 복사하고 로컬에서 실행하여 도커 이미지를 빌드하고 태그를 지정하고 푸시합니다. 이러한 명령은 다음과 비슷합니다.

Docker 클라이언트를 레지스트리에 인증하려면:

aws ecr get-login-password --region <YOUR_AWS_REGION> | docker login --username AWS --password-stdin <YOUR_AWS_ACCOUNT>.dkr.ecr.<YOUR_AWS_REGION>.amazonaws.com

도커 이미지 빌드하려면:

docker build -t cluster-sample-app .

도커 이미지에 태그를 지정하려면:

docker tag cluster-sample-app:latest <YOUR_AWS_ACCOUNT>.dkr.ecr.<YOUR_AWS_REGION>.amazonaws.com/cluster-sample-app:latest

리포지토리에 도커 이미지를 푸시하려면:

docker push <YOUR_AWS_ACCOUNT>.dkr.ecr.<YOUR_AWS_REGION>.amazonaws.com/cluster-sample-app:latest
앱 개발자, AWS DevOps
애플리케이션 스택을 배포합니다.
  1. https://console.aws.amazon.com/cloudformation/ 에서 AWS CloudFormation 콘솔을 엽니다.

  2. 스택 생성을 선택합니다.

  3. 템플릿 준비에서 템플릿 준비 완료를 선택합니다.

  4. 템플릿 지정 섹션에서 템플릿 파일 업로드를 선택합니다.

  5. GitHub 리포지토리에서 복제한 로컬 파일을 cluster-sample-app-stack.yml CloudFormation 템플릿으로 선택한 후 다음을 선택합니다.

  6. 스택에 대해 이름을 입력한 후 다음을 선택합니다.

  7. 기본 옵션을 유지한 다음에 다음을 선택합니다.

  8. 모든 옵션을 검토하고 IAM 리소스 생성을 확인한 다음 스택 생성을 선택합니다.

  9. 애플리케이션 스택이 배포되면 출력 탭을 선택하고 URL을 복사한 다음 브라우저에서 열어 애플리케이션에 액세스합니다.

CloudFormation 템플릿 배포에 대한 자세한 내용은 AWS CloudFormation 설명서의 스택 생성을 참조하십시오.

AWS DevOps, 앱 개발자
작업설명필요한 기술
GitHub 리포지토리를 복제합니다.

다음 명령을 사용하여 샘플 코드 리포지토리를 복제합니다.

git clone https://github.com/aws-samples/cluster-sample-app cluster-sample-app && cd cluster-sample-app
앱 개발자, AWS DevOps
AWS Copilot CLI를 사용하여 컨테이너 이미지를 AWS에 배포합니다.

프로젝트의 루트 디렉터리에서 다음 명령을 사용하여 애플리케이션을 한 번에 배포합니다.

copilot init --app cluster-sample-app --name demo --type "Load Balanced Web Service" --dockerfile ./Dockerfile --port 8080 --deploy

그러면 출력으로 제공된 DNS 이름을 사용하여 애플리케이션에 액세스할 수 있어야 합니다.

앱 개발자, AWS DevOps
작업설명필요한 기술
AWS Management Console을 통해 생성된 리소스를 삭제합니다.

옵션 1(AWS Management Console)을 사용하여 애플리케이션 스택을 배포한 경우, 생성한 리소스를 삭제할 준비가 되면 다음 단계를 따릅니다.

  1. https://console.aws.amazon.com/cloudformation/ 에서 CloudFormation 콘솔을 엽니다.

  2. 생성한 스택을 선택한 다음 삭제를 선택합니다.

  3. Amazon ECR 콘솔(https://console.aws.amazon.com/ecr/repositories)을 엽니다.

  4. 생성한 리포지토리를 선택한 다음 삭제를 선택합니다.

앱 개발자, AWS DevOps
AWS Copilot에서 생성한 리소스를 삭제합니다.

옵션 2(AWS Copilot CLI)를 사용하여 애플리케이션 스택을 배포한 경우, 생성한 리소스를 삭제할 준비가 되면 프로젝트의 루트 디렉터리에서 다음 명령을 실행합니다.

copilot app delete
앱 개발자, AWS DevOps

관련 리소스