Amazon ECS용 애플리케이션 아키텍처 설계
Amazon ECS용 애플리케이션 아키텍처 설계
애플리케이션의 태스크 정의를 만들어 애플리케이션을 설계해요. 태스크 정의에는 애플리케이션에 대한 정보를 정의하는 파라미터가 포함되는데, 여기에는 다음이 포함됩니다.
출처: 문서
본문
- 사용할 용량(capacity) — 태스크가 호스팅되는 인프라를 결정해요. EC2 용량 공급자를 사용하면 인스턴스 유형도 선택합니다. Amazon ECS Managed Instances 용량 공급자를 사용하면 Amazon ECS가 컴퓨팅 용량을 관리하도록 인스턴스 요구 사항을 제공할 수 있어요. GPU 같은 일부 인스턴스 유형에는 특정 파라미터를 설정해야 합니다. 자세한 내용은 Amazon ECS 태스크 정의 사용 사례(Amazon ECS task definition use cases)를 참고하세요.
- 컨테이너 이미지 — 애플리케이션 코드와 코드 실행에 필요한 모든 의존성을 담고 있어요.
- 태스크의 컨테이너에 사용할 네트워킹 모드 — 네트워킹 모드는 태스크가 네트워크를 통해 어떻게 통신하는지 결정해요. EC2 인스턴스와 Amazon ECS Managed Instances에서 실행되는 태스크에는 여러 옵션이 있지만
awsvpc네트워크 모드를 사용할 것을 권장합니다.awsvpc네트워크 모드는 애플리케이션이 서로, 그리고 VPC 안의 다른 서비스와 어떻게 통신하는지 더 많이 제어할 수 있게 해줘 컨테이너 네트워킹을 단순화해요. Fargate에서 실행되는 태스크는 반드시awsvpc네트워크 모드를 사용해야 합니다. - 태스크에 사용할 로깅 구성
- 태스크의 컨테이너와 함께 사용되는 모든 데이터 볼륨
태스크 정의 파라미터의 전체 목록은 Fargate용 Amazon ECS 태스크 정의 파라미터(Amazon ECS task definition parameters for Fargate)를 참고하세요. 태스크 정의를 만들 때는 다음 지침을 따르세요:
- 각 태스크 정의 패밀리를 하나의 비즈니스 목적으로만 사용하세요. 여러 유형의 애플리케이션 컨테이너를 같은 태스크 정의로 묶으면 그 컨테이너들을 독립적으로 확장할 수 없어요. 예를 들어 웹사이트와 API는 일반적으로 서로 다른 확장 패턴이 필요합니다. 트래픽이 증가하면 API 컨테이너와 다른 수의 웹 컨테이너가 필요할 수 있죠. 이 두 컨테이너가 같은 태스크 정의에 배포되어 있다면, 모든 태스크가 같은 수의 웹 컨테이너와 API 컨테이너를 실행하게 돼요.
- 각 애플리케이션 버전을 태스크 정의 패밀리 안의 태스크 정의 리비전과 일치시키세요. 태스크 정의 패밀리 안에서 각 태스크 정의 리비전은 특정 컨테이너 이미지 설정의 시점 스냅샷을 나타내요. 이는 컨테이너가 특정 버전의 애플리케이션 코드를 실행하는 데 필요한 모든 구성 요소의 스냅샷인 것과 비슷합니다. 애플리케이션 코드 버전, 컨테이너 이미지 태그, 태스크 정의 리비전 사이에 일대일 매핑을 만드세요. 일반적인 릴리스 프로세스는 git 커밋이 git 커밋 SHA로 태그된 컨테이너 이미지로 변환되는 것으로 시작해요. 그런 다음 그 컨테이너 이미지 태그가 자체 Amazon ECS 태스크 정의 리비전을 가지며, 마지막으로 Amazon ECS 서비스가 업데이트되어 새 태스크 정의 리비전을 배포합니다.
- 각 태스크 정의 패밀리에 다른 IAM 역할을 사용하세요. 각 태스크 정의를 자체 IAM 역할로 정의하세요. 각 비즈니스 구성 요소에 자체 태스크 정의 패밀리를 제공하는 방식과 함께 이 방식을 함께 구현하면, 각 서비스가 AWS 계정의 리소스에 얼마나 많은 액세스를 갖는지 제한할 수 있어요. 예를 들어 인증 서비스에는 비밀번호 데이터베이스에 연결하는 액세스만 부여하고, 동시에 주문 서비스만 신용카드 결제 정보에 액세스하도록 보장할 수 있습니다.