Dev

AWS App2Container Application Containerize

sangkins 2023. 11. 19. 23:32
온프레미스 어플리케이션을 AWS로 마이그레이션 하게 되었다.
Docker + Kubernetes로 배포와 운영을 표준화하였으면 한다.

기존의 Java 어플리케이션을 Containerize 해야 하는데 
AWS의 A2C라는 CLI command Tool이 있다.

간단하게 Jar 어플리케이션을 컨테이너화, 분석, CI/CD 파이프라인 사용

간단한 자바 어플리케이션을 A2C로 Containerize 해보려고 한다

 

A2C (App2Container) 란?

AWS App2Container (A2C)는 온프레미스 데이터 센터 또는 가상 머신에서 실행되는 애플리케이션을 리프트 앤 시프트 하여 Amazon Elastic Container Service (Amazon ECS) 또는 Amazon Elastic Kubernetes Service (Amazon EKS)에서 관리하는 컨테이너에서 실행되도록 지원하는 CLI Tools.
 

애플리케이션 컨테이너화 - AWS App2Container - Amazon Web Services

AWS App2Container(A2C)는 Java 및 .NET 웹 애플리케이션을 컨테이너 형식으로 마이그레이션하고 현대화하는 명령줄 도구입니다. AWS A2C는 베어 메탈, 가상 머신, Amazon Compute Cloud(EC2) 인스턴스 또는

aws.amazon.com

 

 

사전지식

1. Dokcer 컨테이너 이해
2. 컨테이너화가 실행될 위치 결정
3. EC2 인스턴스의 보안그룹
4. AWS 기본 베이스 (IAM, ECS, EKS 등등)
5. IAM Role 
6. Key Pair

 

1. Amazon Linux2 (AMI)
2. Storage >= 20Gb (최소 용량 20GB. 30GB로 잡음)
3. 적절한 IAM Role이 부여된 계정
4. Key 페어 생성

 


 

EC2 인스턴스 생성

 

키 페어 생성

보안그룹은 HTTPS, HTTP 트래픽 허용 TCP 80 Port를 열어주는 보안그룹을 설정하면 된다.

 

EC2 인스턴스 볼륨의 크기는 20 GiB 이상으로 잡아주면 된다.

A2C에서 20 GiB이상이 요구된다.

 

AWS에서 제공하는 Connect to instance로 연결

 

1.  Key ID 입력
2. Secret Access Key 입력
3. EC2 인스턴스 시작 리전 입력 - ap-northeast-3
4. Output format : json  상관없음

 


 

A2C Flow

 

1. 실행 중인 어플리케이션을 검색하고 어플리케이션을 분석

2. 어플리케이션을 Containerize

3. Dokcer의 Image Size (조정)

4. 대용량 파일을 식별 

5. analysis.json 파일의 appExcludedFiles , appSpecificFiles 업데이트.

 

1. Linux java 설치 

#wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm

#sudo rpm -ivh jdk-17_linux-x64_bin.rpm

#sudo alternatives --config java

#java -version

 

2. Linux Docker 설치

 

서울 리전에서 실행 시 sudo yum update 에러로 오사카 리전에서 실행함.
# 패키지 업데이트
sudo yum update -y

# docker 설치
sudo yum install docker -y

# docker 서비스 실행
sudo service docker start

# ec2-user를 docker 그룹에 추가
sudo usermod -a -G docker ec2-user

 

 

3. Server로 jar 파일 전송 (Test)

 

- SCP -i로 전송

 

EC2 인스턴스에서 전송된 파일 확인

 

 

4. A2C 다운로드 (AWS 인스턴스)

 

#Amazon S3에서 App2Container 설치 패키지 다운로드
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

#서버의 로컬 폴더에 패키지 추출
sudo tar xvf AWSApp2Container-installer-linux.tar.gz

#패키지에서 추출한 설치 스크립트 실행
sudo ./install.sh

#검증을 위해 해시 생성
sha256sum AWSApp2Container-installer-linux.tar.gz

#다운로드의 진위 여부 확인

#1. App2Container 인증서 다운로드
curl -o app2container.cert https://app2container-keys.s3.us-east-1.amazonaws.com/latest/app2container.cert

#2. App2Container 서명 파일 다운로드
curl -o app2container.sig https://app2container-release-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/app2container.sig

#3. 서명 확인
openssl dgst -sha256 -verify app2container.cert -signature app2container.sig /usr/bin/app2container

 

5. Jar 파일 실행 및 확인 

#& -> 백그라운드에서 실행 java 앞에 nohup을 붙이면 무중단 배포.
java -jar xxxx.jar & 

#pid 확인
ps -ef

#종료
kill -9 pid

어플리케이션 동작 확인.

 

6. App2Container 초기화

App2Container의 전역 설정을 초기화 및 환경 설정.

 

sudo app2container init

#작업 공간 디렉토리 경로 : /root/app2container

#AWS 프로필 : default

#Amazon S3 버킷 : 기본값 no bucket

#명령 생성 아티팩트 : App2Container 지원에 자동업로드 y

#사용량 지표 수집 권한 : y

#서명된 이미지 적용 여부 : n

 

7. 어플리케이션 분석

sudo app2container inventory

 

java-app-id

 

java-app-id : java-generic-88209a86

 

sudo app2container analyze --application-id java-generic-88209a86

 

 

 

어플리케이션의 분석결과가 json 형태로 저장된다.

 

analysis.json

 

 

이미지의 크기 최적화 문서 참조
 

AWS App2Container 생성 도커 이미지 최적화 - AWS Prescriptive Guidance

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

 

8. 어플리케이션 변환

 

#어플리케이션 서버에서 어플리케이션을 컨테이너화
sudo app2container containerize --application-id java-app-id

 

용량에 따라 시간이 어느정도 걸릴 수 있음

 

9. 어플리케이션 배포

AWS EKS, ECS, App Runner에 배포.

# ECR Repository 생성
- generate app-deployment 

#배포 파일 사용자 정의 X
- generate app-deployment--deploy

#AWS에 어플리케이션 배포
- sudo app2container generate app-deployment --application-id java-app-id

 

 

10. Clean

 

1. App2Container /usr/local/app2container 설치된 폴더 삭제

2. AWS profile 정리 - awsconfigure set

 

 

 

 

이렇게 간단하게 A2C를 이용하여 Linux 서버에서 Java 어플리케이션을 Analysis, Containerize, Deployment까지 하는 법에 대해서 알아봤다. 간단한 Jar 어플리케이션을 분석해서 올리는건 쉬운일이지만 MSA로 구성된 어플리케이션을 A2C로 분석해서 배포하는 건 상당한 어려움이 있을 것 같다. 

 

 

 

문서 참조

 

What is AWS App2Container? - AWS App2Container

What is AWS App2Container? AWS App2Container (A2C) is a command line tool to help you lift and shift applications that run in your on-premises data centers or on virtual machines, so that they run in containers that are managed by Amazon ECS, Amazon EKS, o

docs.aws.amazon.com

 

 

틀린 부분은 댓글로 남겨주시면 감사합니다.