

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

# AWS App2Container를 사용하여 온프레미스 Java 애플리케이션을 AWS로 마이그레이션
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container"></a>

*Dhananjay Karanjkar, Amazon Web Services*

## 요약
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-summary"></a>

AWS App2Container(A2C)는 코드를 변경할 필요 없이 가상 시스템에서 실행 중인 기존 애플리케이션을 컨테이너로 변환하는 데 도움이 되는 명령줄 도구입니다. A2C는 서버에서 실행 중인 애플리케이션을 검색하고, Amazon Elastic Container Service(Amazon ECS) 및 Amazon Elastic Kubernetes Service(Amazon EKS)에 원활하게 배포할 수 있도록 관련 아티팩트를 생성합니다.

이 패턴은 작업자 시스템을 통해 App2Container를 사용하여 애플리케이션 서버에 배포된 온프레미스 Java 애플리케이션을 AWS Fargate 또는 Amazon EKS로 원격으로 마이그레이션하는 단계를 제공합니다. 

작업자 시스템은 다음과 같은 사용 사례에 사용할 수 있습니다.
+ Java 애플리케이션이 실행되는 애플리케이션 서버에는 도커 설치가 허용되지 않거나 사용할 수 없습니다.
+ 서로 다른 물리적 또는 가상 서버에 배포된 여러 애플리케이션의 마이그레이션을 관리해야 합니다.

이 패턴은 AWS CodeCommit AWS CodePipeline, 및를 사용합니다 AWS CodeBuild.

## 사전 조건 및 제한 사항
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-prereqs"></a>

**사전 조건 **
+ Linux 서버에서 실행되는 Java 애플리케이션이 있는 애플리케이션 서버
+ Linux 운영 체제를 사용하는 작업자 시스템
+ 20GB 이상의 사용 가능한 디스크 공간이 있는 작업자 시스템

**제한 사항 **
+ 일부 애플리케이션은 지원되지 않습니다. 자세한 내용은 [Linux에서 지원되는 애플리케이션](https://docs.aws.amazon.com/app2container/latest/UserGuide/supported-applications.html)을 참조하십시오.

## 아키텍처
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-architecture"></a>

**소스 기술 스택  **
+ Linux 서버에서 실행되는 Java 애플리케이션

**대상 기술 스택  **
+ AWS CodeBuild
+ AWS CodeCommit
+ AWS CodeDeploy
+ AWS CodePipeline
+ Amazon Elastic Container Registry
+ AWS Fargate

**대상 아키텍처 **

![AWS의 온프레미스 Java 애플리케이션을 위한 아키텍처.](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/61ed65a0-fab2-4fc8-8531-18bfd56a25b3/images/602cde7b-ab0c-46a5-8c37-afe304adf061.png)


 

## 도구
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-tools"></a>

**도구**
+ [AWS App2Container](https://docs.aws.amazon.com/app2container/latest/UserGuide/what-is-a2c.html) – AWS App2Container(A2C)는 온프레미스 데이터 센터나 가상 머신에서 실행되는 애플리케이션을 리프트 앤 시프트하여 Amazon ECS 또는 Amazon EKS에서 관리하는 컨테이너에서 실행되도록 도와주는 명령줄 도구입니다.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) – AWS CodeBuild는 클라우드상의 완전관리형 빌드 서비스입니다. CodeBuild는 소스 코드를 컴파일하고 유닛 테스트를 실행하며 배포 준비가 완료된 아티팩트를 생성합니다.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) – AWS CodeCommit은 클라우드에서 자산(예: 문서, 소스 코드, 바이너리 파일)을 비공개로 저장하여 관리하는 데 사용할 수 있도록 Amazon Web Services에서 호스팅되는 버전 관리 서비스입니다.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) – AWS CodePipeline은 소프트웨어 릴리스에 필요한 단계를 모델링, 시각화, 자동화하는 데 사용할 수 있는 지속적 전달 서비스입니다.
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) – Amazon Elastic Container Service(Amazon ECS)는 클러스터에서 컨테이너를 실행, 중지 및 관리하기 위한 컨테이너 관리 서비스로서 확장성과 속도가 뛰어납니다.
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) – Amazon Elastic Container Registry(Amazon ECR)는 안전하고 확장 가능하고 신뢰할 수 있는 AWS 관리형 컨테이너 이미지 레지스트리 서비스입니다.
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) – Amazon Elastic Kubernetes Service(Amazon EKS)는 Kubernetes 컨트롤 플레인 또는 노드를 설치, 작동 및 유지 관리할 필요 없이 AWS에서 Kubernetes를 실행하는 데 사용할 수 있는 관리형 서비스입니다.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html) – AWS Fargate는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 서버나 클러스터를 관리할 필요 없이 컨테이너를 실행하기 위해 Amazon ECS에 사용할 수 있는 기술입니다. Fargate를 사용하면 더 이상 컨테이너를 실행하기 위해 가상 머신의 클러스터를 프로비저닝, 구성 또는 조정할 필요가 없습니다.

## 에픽
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-epics"></a>

### 보안 인증 설정
<a name="set-up-credentials"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 서버에 액세스하기 위한 암호를 생성하십시오. | 작업자 시스템에서 원격으로 애플리케이션 서버에 액세스하려면 AWS Secrets Manager에서 암호를 생성합니다. 암호에는 SSH 개인 키 또는 인증서와 SSH 개인 키를 사용할 수 있습니다. 자세한 내용은[AWS App2Container에 대한 보안 암호 관리](https://docs.aws.amazon.com/app2container/latest/UserGuide/manage-secrets.html)를 참조하십시오. | DevOps, 개발자 | 

### 작업자 시스템 설정
<a name="set-up-the-worker-machine"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| tar 파일을 설치합니다. | `sudo yum install -y tar`를 실행합니다. | DevOps, 개발자 | 
| AWS CLI를 설치합니다. | Amazon Command Line Interface(AWS CLI)를 설치하고 `curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"`을 실행합니다. <br />`awscliv2.zip`의 압축을 풉니다.<br />`sudo ./aws/install`을 실행합니다. | DevOps, 개발자 | 
| App2Container를 설치합니다. | 다음 명령을 실행합니다.<br />`curl -o AWSApp2Container-installer-linux.tar.gz https://app2container-release-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/AWSApp2Container-installer-linux.tar.gz`<br />`sudo tar xvf AWSApp2Container-installer-linux.tar.gz`<br />`sudo ./install.sh` | DevOps, 개발자 | 
| 프로파일을 구성합니다. | AWS 기본 프로파일을 구성하려면 `sudo aws configure`를 실행합니다.<br />명명된 AWS 기본 프로파일을 구성하려면 `sudo aws configure --profile <profile name>`을 실행합니다. | DevOps, 개발자 | 
| 도커를 설치합니다. | 다음 명령을 실행합니다.<br />`sudo yum install -y docker`<br />`sudo systemctl enable docker & sudo systemctl restart docker` |  | 
| App2Container를 초기화합니다. | App2Container를 초기화하려면 다음 정보가 필요합니다.[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-on-premises-java-applications-to-aws-using-aws-app2container.html)<br />`sudo app2container init`를 실행합니다. | DevOps, 개발자 | 

### 작업자 시스템 구성
<a name="configure-the-worker-machine"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 서버에서 App2Container 명령을 원격으로 연결하고 실행하도록 작업자 시스템을 구성합니다. | 작업자 시스템을 구성하려면 다음 정보가 필요합니다.[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-on-premises-java-applications-to-aws-using-aws-app2container.html)<br />`sudo app2container remote configure`를 실행합니다. | DevOps, 개발자 | 

### 작업자 시스템에서 애플리케이션을 검색, 분석 및 추출
<a name="discover-analyze-and-extract-applications-on-the-worker-machine"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 온프레미스 Java 애플리케이션을 살펴봅니다. | 애플리케이션 서버에서 실행 중인 모든 애플리케이션을 원격으로 검색하려면 다음 명령을 실행합니다.<br />`sudo app2container remote inventory --target <FQDN/IP of App server>`<br />이 명령은 `inventory.json`에 배포된 애플리케이션 목록을 생성합니다. | 개발자, DevOps | 
| 검색된 애플리케이션을 분석합니다. | 인벤토리 단계에서 얻은 application-id를 사용하여 각 애플리케이션을 원격으로 분석하려면 다음 명령을 실행합니다.<br />`sudo app2container remote analyze --application-id <java-app-id> --target <FQDN/IP of App Server>`<br />그러면 작업 공간 위치에 `analysis.json` 파일이 생성됩니다. 이 파일이 생성된 후 필요에 따라 컨테이너화 파라미터를 변경할 수 있습니다. | 개발자, DevOps | 
| 분석된 애플리케이션을 추출합니다. | 분석된 애플리케이션에 대한 애플리케이션 아카이브를 생성하려면 다음 명령을 원격으로 실행합니다. 그러면 작업 공간 위치에 tar 번들이 생성됩니다.<br />`sudo app2container remote extract --application-id <application id> --target <FQDN/IP of App Server>`<br />로컬 작업자 시스템에서 추출된 아티팩트를 생성할 수 있습니다. | 개발자, DevOps | 

### 작업자 시스템에서 추출된 아티팩트를 컨테이너화합니다.
<a name="containerize-the-extracted-artifacts-on-the-worker-machine"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 추출한 아티팩트를 컨테이너화합니다. | 다음 명령을 실행하여 이전 단계에서 추출한 아티팩트를 컨테이너화합니다.<br />`sudo app2container containerize --input-archive <tar bundle location on worker machine>` | 개발자, DevOps | 
| 대상을 확정합니다. | 대상을 확정하려면 `containerize` 명령이 실행될 때 생성되는 `deployment.json`을 엽니다. AWS Fargate를 대상으로 지정하려면 `createEcsArtifacts`를 `true`로 설정합니다. Amazon EKS를 대상으로 설정하려면 `createEksArtifacts`를 true로 설정합니다. | 개발자, DevOps | 

### AWS Artifact 생성 및 프로비저닝
<a name="generate-and-provision-aws-artifacts"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 작업자 시스템에서 AWS 배포 아티팩트를 생성합니다. | 배포 아티팩트 생성하려면 다음 명령을 실행합니다.<br />`sudo app2container generate app-deployment --application-id <application id>`<br />그러면 워크스페이스에 `ecs-master.yml` AWS CloudFormation 템플릿이 생성됩니다. | DevOps | 
| 아티팩트를 프로비저닝합니다. | 생성된 아티팩트를 추가로 프로비저닝하려면 다음 명령을 실행하여 AWS CloudFormation 템플릿을 배포하십시오.<br />`aws cloudformation deploy --template-file <path to ecs-master.yml> --capabilities CAPABILITY_NAMED_IAM --stack-name <application id>–ECS` | DevOps | 
| 파이프라인을 생성합니다. | 이전 스토리에서 만든 내용을 필요에 따라 `pipeline.json`을 수정합니다. 그런 다음 `generate pipeline` 명령을 실행하여 파이프라인 배포 아티팩트를 생성합니다. | DevOps | 

## 관련 리소스
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-resources"></a>
+ [App2Container란 무엇입니까?](https://docs.aws.amazon.com/app2container/latest/UserGuide/what-is-a2c.html)
+ [AWS App2Container 블로그 게시물](https://aws.amazon.com/blogs/aws/aws-app2container-a-new-containerizing-tool-for-java-and-asp-net-applications/)
+ [AWS CLI 구성 기본 사항](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)
+ [Amazon ECS용 도커 기본 사항](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html)
+ [도커 명령](https://docs.docker.com/engine/reference/commandline/cli/)