

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

# Fargate를 사용하여 Amazon ECS에 Java 마이크로서비스 배포
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate"></a>

*Vijay Thompson, Sandeep Bondugula, Amazon Web Services*

## 요약
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-summary"></a>

이 패턴은 Fargate를 사용하여 Amazon Elastic Container Service(Amazon ECS)에 컨테이너식 Java 마이크로서비스를 배포하기 위한 지침을 제공합니다. 이 패턴은 컨테이너 관리에 Amazon Elastic Container Registry(Amazon ECR)를 사용하지 않으며, 그 대신에 Docker 허브에서 Docker 이미지를 가져옵니다.

## 사전 조건 및 제한 사항
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-prereqs"></a>

**사전 조건 **
+ Docker 허브의 기존 Java 마이크로서비스 애플리케이션
+ 퍼블릭 Docker 리포지토리
+ 활성 상태의 AWS 계정
+ Amazon ECS 및 Fargate를 포함한 서비스에 대한 지식
+ Docker, Java 및 Spring Boot 프레임워크
+ Amazon Relational Database Service(Amazon RDS) 가동 및 실행 중(선택 사항)
+ 애플리케이션에 Amazon RDS(선택 사항)가 필요한 경우 Virtual Private Cloud(VPC)

## 아키텍처
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-architecture"></a>

**소스 기술 스택**
+ Java 마이크로서비스(예: Spring Boot에 구현됨) 및 Docker에 배포됨

**소스 아키텍처**

![Docker에 배포된 Java 마이크로서비스의 소스 아키텍처](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/65185957-2b8b-43a6-964c-95ce0a45ba17/images/0a946ca8-fe37-4ede-85cb-a80a1c36105d.png)


**대상 기술 스택**
+ Fargate를 사용하여 각 마이크로서비스를 호스팅하는 Amazon ECS 클러스터
+ Amazon ECS 클러스터 및 관련 보안 그룹을 호스팅하는 VPC 네트워크 
+ Fargate를 사용하여 컨테이너를 구동하는 각 마이크로서비스에 대한 클러스터/태스크 정의

**대상 아키텍처**

![Amazon ECS의 Java 마이크로서비스에 대한 대상 아키텍처](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/65185957-2b8b-43a6-964c-95ce0a45ba17/images/b21349ea-21fc-4688-b76a-1bde479858aa.png)


## 도구
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-tools"></a>

**도구**
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)를 사용하면 자체 컨테이너 오케스트레이션 소프트웨어를 설치 및 운영하거나, 가상 시스템 클러스터를 관리 및 확장하거나, 가상 시스템에서 컨테이너를 예약할 필요가 없습니다. 
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html)를 사용하면 서버 또는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 관리할 필요 없이 컨테이너를 실행할 수 있습니다. Amazon Elastic Container Service(Amazon ECS)와 함께 사용합니다.
+ [Docker](https://www.docker.com/)는 애플리케이션을 신속하게 구축, 테스트 및 배포하기 위한 소프트웨어 플랫폼입니다. Docker는 소프트웨어를 컨테이너라는 표준화된 단위로 패키징합니다. *컨테이너*에는 라이브러리, 시스템 도구, 코드 및 런타임을 포함하여 소프트웨어 실행에 필요한 모든 것이 들어 있습니다. 

**Docker 코드**

다음 Dockerfile은 사용되는 Java Development Kit(JDK) 버전, Java Archive(JAR) 파일이 있는 위치, 노출되는 포트 번호, 애플리케이션의 진입점을 지정합니다.

```
FROM openjdk:11
ADD target/Spring-docker.jar Spring-docker.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","Spring-docker.jar"]
```

## 에픽
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-epics"></a>

### 새 태스크 정의 생성
<a name="create-new-task-definitions"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 작업 정의를 생성합니다. | Amazon ECS에서 Docker 컨테이너를 실행하려면 태스크 정의가 필요합니다. [https://console.aws.amazon.com/ecs/](https://console.aws.amazon.com/ecs/)에서 Amazon ECS 콘솔을 열고 **태스크 정의**를 선택한 다음 새 태스크 정의를 생성합니다. 자세한 내용은 [Amazon ECS 설명서](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html)를 참조하세요. | 시스템 관리자, 앱 개발자 | 
| 시작 유형을 선택합니다. | **Fargate**를 시작 유형으로 선택합니다. | 시스템 관리자, 앱 개발자 | 
| 태스크를 구성합니다. | 태스크 이름을 정의하고 적절한 양의 태스크 메모리와 CPU로 애플리케이션을 구성합니다. | 시스템 관리자, 앱 개발자 | 
| 컨테이너를 정의합니다. | 컨테이너 이름을 지정합니다. 이미지의 경우 Docker 사이트 이름, 리포지토리 이름 및 Docker 이미지(`docker.io/sample-repo/sample-application:sample-tag-name`)의 태그 이름을 입력합니다. 애플리케이션의 메모리 제한을 설정하고 허용된 포트에 포트 매핑(`8080, 80`)을 설정합니다. | 시스템 관리자, 앱 개발자 | 
| 태스크을 생성합니다. | 태스크 및 컨테이너 구성이 준비되면 태스크을 생성합니다. 세부적인 지침은 *관련 리소스* 섹션의 링크를 참조하세요. | 시스템 관리자, 앱 개발자 | 

### 클러스터 구성
<a name="configure-the-cluster"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 클러스터를 생성하고 구성합니다. | **네트워킹 전용**을 클러스터 유형으로 선택하고 이름을 구성한 다음 클러스터를 생성하거나 이용할 수 있다면 기존 클러스터를 사용합니다. 자세한 내용은 [Amazon ECS 설명서](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html)를 참조하세요. | 시스템 관리자, 앱 개발자 | 

### 태스크 구성
<a name="configure-task"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  작업을 생성합니다. | 클러스터 내에서 **새 태스크 실행**을 선택합니다. | 시스템 관리자, 앱 개발자 | 
| 시작 유형을 선택합니다. | **Fargate**를 시작 유형으로 선택합니다. | 시스템 관리자, 앱 개발자 | 
| 태스크 정의, 수정, 플랫폼 버전을 선택합니다. | 실행하려는 태스크, 태스크 정의의 수정, 플랫폼 버전을 선택합니다. | 시스템 관리자, 앱 개발자 | 
| 클러스터를 선택합니다. | 태스크를 실행하려는 해당 클러스터를 선택합니다. | 시스템 관리자, 앱 개발자 | 
| 태스크 수를 지정합니다. | 실행해야 하는 태스크 수를 구성합니다. 두 개 이상의 태스크으로 시작하는 경우 태스크 간에 트래픽을 분산하기 위한 로드 밸런서가 필요합니다. | 시스템 관리자, 앱 개발자 | 
| 태스크 그룹을 지정합니다. | (선택 사항) 관련된 태스크 집합을 태스크 그룹으로 식별할 수 있도록 태스크 그룹 이름을 지정합니다. | 시스템 관리자, 앱 개발자 | 
| 클러스터 VPC, 서브넷 및 보안 그룹 구성합니다. | 애플리케이션을 배포하고자 하는 클러스터 VPC와 서브넷을 구성합니다. 인바운드 및 아웃바운드 연결에 대한 액세스를 제공할 수 있도록 보안 그룹(HTTP, HTTPS, 포트 8080)을 생성하거나 업데이트합니다. | 시스템 관리자, 앱 개발자 | 
| 퍼블릭 IP 설정을 구성합니다. | Fargate 태스크에 퍼블릭 IP 주소를 사용할지 여부에 따라 퍼블릭 IP를 활성화하거나 비활성화합니다. **활성화**가 기본값이며 권장 옵션입니다. | 시스템 관리자, 앱 개발자 | 
| 설정 검토 및 태스크 생성 | 설정을 검토한 다음, **태스크 실행**을 선택합니다. | 시스템 관리자, 앱 개발자 | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 URL을 복사합니다. | 태스크 상태가 *실행 중*으로 업데이트되면 태스크을 선택합니다. 네트워킹 섹션에서 퍼블릭 IP를 복사합니다. | 시스템 관리자, 앱 개발자 | 
| 애플리케이션을 테스트합니다. | 브라우저에서 애플리케이션을 테스트할 수 있도록 퍼블릭 IP를 입력합니다. | 시스템 관리자, 앱 개발자 | 

## 관련 리소스
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-resources"></a>
+ [Amazon ECS를 위한 Docker 기본 사항](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html)(Amazon ECS 설명서)
+ [Fargate의 Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)(Amazon ECS 설명서)
+ [태스크 정의 생성](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html)(Amazon ECS 설명서)
+ [클러스터 생성](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html)(Amazon ECS 설명서)
+ [기본 서비스 파라미터 구성](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/basic-service-params.html)(Amazon ECS 설명서)
+ [네트워크 구성](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-configure-network.html)(Amazon ECS 설명서)
+ [Amazon ECS에 Java 마이크로서비스 배포](https://aws.amazon.com/blogs/compute/deploying-java-microservices-on-amazon-ec2-container-service/)(블로그 게시물)