Amazon ECR 및 로드 밸런싱을 사용하여 Amazon ECS에 Java 마이크로서비스 배포 - AWS 권장 가이드

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

Amazon ECR 및 로드 밸런싱을 사용하여 Amazon ECS에 Java 마이크로서비스 배포

R 유형: 해당 없음

소스: Java

대상: Amazon ECS

작성자: AWS

환경: PoC 또는 파일럿

기술: 웹 및 모바일 앱, 컨테이너 및 마이크로서비스

AWS 서비스: Amazon ECS

요약

이 패턴은 애플리케이션을 더 쉽게 확장하고 더 빠르게 개발할 수 있도록 Amazon Elastic Container Service(Amazon ECS)에 컨테이너화된 Java 마이크로서비스 아키텍처를 배포하는 단계를 설명합니다. 이는 혁신을 가능하게 하고 새로운 기능을 가속화하는 time-to-market 데 도움이 됩니다. 

또한 이 패턴은 Amazon Elastic Container Registry (Amazon ECR) 를 사용하여 Docker 기반 컨테이너를 저장 및 관리하고, Python 스크립트가 포함된 CloudFormation AWS 템플릿을 사용하여 인프라 설정을 자동화합니다. 이 패턴은 AWS Compute 블로그에 게시된 Amazon Elastic 컨테이너 서비스에 Java 마이크로서비스를 배포하기 게시한 게시물을 기반으로 합니다.

마이크로서비스는 소프트웨어 개발에 대한 아키텍처 및 조직적 접근 방식을 제공합니다. 여기서 소프트웨어는 잘 정의된 애플리케이션 프로그래밍 인터페이스(API)를 통해 통신하는 작고 독립적인 서비스로 구성됩니다. 독립된 소규모 팀이 이러한 서비스를 소유합니다. 

Amazon ECS는 확장성이 뛰어난 고성능 컨테이너 오케스트레이션 서비스입니다. Docker 컨테이너를 지원하므로 AWS에서 컨테이너식 애플리케이션을 빠르게 실행하고 규모를 조정할 수 있습니다. Amazon ECS를 사용하면 더 이상 컨테이너 오케스트레이션 소프트웨어를 설치 및 운영하거나, 가상 머신(VM) 클러스터를 관리 및 규모 조정하거나, 해당 VM에서 컨테이너를 예약할 필요가 없습니다.

간단한 API 호출을 통해 Docker 지원 애플리케이션을 시작 및 중지하고, 요청의 전체 상태를 쿼리하고, AWS Identity and Access Management (IAM) 역할, 보안 그룹, 로드 밸런서, Amazon Events, AWS 템플릿 CloudWatch CloudFormation , AWS 로그와 같은 다양한 기본 기능에 액세스할 수 있습니다. CloudTrail

사전 조건 및 제한 사항

사전 조건

  • 활성 상태의 AWS 계정  

  • Java 마이크로서비스 소스 코드, Java 개발 키트 버전 1.7 이상 포함

  • 계정 내 사용자의 액세스 키 및 비밀 액세스 키

  • AWS Command Line Interface(AWS CLI)

  • Java, Python용 AWS 소프트웨어 개발 키트 (SDK) (Boto3), Docker 소프트웨어

  • 이전 기술 사용에 대한 지식

  • Amazon ECS, AWS CloudFormation, Elastic Load Balancing과 같은 AWS 서비스에 대한 지식

아키텍처

소스 기술 스택

  • Java로 구현되고 온프레미스 환경의 Apache Tomcat에 배포된 마이크로서비스

대상 기술 스택

  • 클라이언트 요청을 검사하는 Application Load Balancer. 로드 밸런서는 라우팅 규칙에 따라 상태와 일치하는 대상 그룹의 인스턴스 및 포트로 요청을 전달합니다.

  • 각 마이크로서비스의 대상 그룹. 대상 그룹은 해당 서비스에서 사용 가능한 컨테이너 인스턴스를 등록하는 데 사용됩니다. 각 대상 그룹에는 경로가 있으므로 특정 마이크로서비스에 대한 경로를 직접 호출하면 올바른 대상 그룹에 매핑됩니다. 이를 통해 하나의 Application Load Balancer를 사용하여 경로에서 액세스하는 모든 마이크로서비스를 제공할 수 있습니다. 예를 들어 https:///owner/ *는 소유자 마이크로서비스를 매핑하여 전달합니다.

  • 각 마이크로서비스의 컨테이너를 호스팅하는 Amazon ECS 클러스터입니다.

  • Amazon ECS 클러스터 및 관련 보안 그룹을 호스팅하기 위한 Amazon Virtual Private Cloud(VPC) 네트워크입니다.

  • Amazon Elastic Container Registry (Amazon ECR) 리포지토리.

  • Amazon ECS 클러스터의 인스턴스에서 컨테이너를 가동시키는 각 마이크로서비스의 서비스 또는 작업 정의.

대상 아키텍처

도구

  • Amazon ESC - Amazon ESC에서는 간단한 API 직접 호출을 사용하여 컨테이너 기반 애플리케이션을 시작 및 중지할 수 있고 중앙 집중식 서비스를 사용하여 클러스터 상태를 확인할 수 있으며 다수의 친숙한 Amazon Elastic Compute Cloud(Amazon EC2) 기능에 액세스할 수 있습니다.

  • Amazon ECR – Amazon Elastic Container Registry(Amazon ECR)는 개발자가 Docker 컨테이너 이미지를 쉽게 저장, 관리, 배포할 수 있는 완전 관리형 레지스트리입니다. Amazon ECR은 Amazon ECS와 통합되어 워크플로를 단순화합니다. development-to-production Amazon ECR은 가용성과 확장성이 뛰어난 아키텍처에서 이미지를 호스팅하므로 애플리케이션을 위한 컨테이너를 안정적으로 배포할 수 있습니다. AWS Identity and Access Management(IAM)와 통합하면 각 리포지토리를 리소스 수준에서 제어할 수 있습니다.

에픽

작업설명필요한 기술
Amazon EC2 Linux 인스턴스를 프로비저닝하고, Docker를 설치하고, 각 마이크로서비스에 대한 Docker 파일을 생성합니다.Ops
Amazon ECR에 도커 이미지를 설정합니다.

(선택 사항) 푸시할 이미지의 Dockerfile이 있는 경우 이미지를 빌드하고 새 리포지토리용으로 태그를 지정합니다. 각 마이크로서비스에 대해 동일한 작업을 수행하십시오. 새로 태그가 지정된 이미지를 리포지토리에 푸시합니다.

Ops
AWS CloudFormation 템플릿을 생성합니다.

AWS CloudFormation 템플릿을 생성하여 가상 사설 클라우드 (VPC), Amazon ECS 클러스터 및 Amazon RDS (Amazon RDS) 를 프로비저닝합니다.

Ops
작업설명필요한 기술
이전에 만든 CloudFormation 템플릿을 사용하여 AWS 인프라를 생성합니다.

https://github.com/awslabs/amazon-ecs-java-microservices/blob/master/2_ECS_Java_Spring_ PetClinic _Microservices/setup.py 의 Python 스크립트를 사용하여 이전에 만든 AWS CloudFormation 템플릿을 호출하십시오. 이 템플릿은 대상 환경에 필요한 AWS 인프라를 생성합니다.

Ops
Amazon ECR 리포지토리, 작업, 서비스, Application Load Balancer, 대상 그룹을 생성합니다.

Python 스크립트는 AWS CloudFormation 템플릿의 출력을 읽고 BOTO3 API 호출을 사용하여 Amazon ECR 리포지토리, 작업, 서비스, 애플리케이션 로드 밸런서 및 대상 그룹을 생성합니다.

Ops