app2Container(A2C) 란?
app2Container(A2C)란 .NET과 Java 애플리케이션을 컨테이너화된 애플리케이션으로 현대화(modernizing)하는 CLI 도구(tool) 입니다.
A2C를 사용하여 온프레미스, 가상 머신에서 실행되는 애플리케이션을 Amazon ECS 또는 Amazon EKS에서 관리하는 컨테이너로 쉽게 리프트 앤 시프트(lift and shift)할 수 있습니다.
app2Container(A2C)가 수행하는 작업
- 분석
- ASP.NET(Windows) 및 Java 응용 프로그램(Linux)을 식별하는 응용 프로그램 서버에 대한 인벤토리 목록을 생성하며
- 프로세스 및 네트워크 포트 종속성을 포함하여 실행 중인 지원되는 애플리케이션의 런타임 종속성을 분석 합니다.
- 추출 및 컨테이너화
- 컨테이너화를 위한 애플리케이션 아티팩트를 추출하고 Dockerfile을 생성 합니다.
- 애플리케이션 컨테이너에 대한 빌드를 시작합니다.
- 배포 아티팩트 생성
- AWS에 애플리케이션 컨테이너를 배포하는 데 필요한 아티팩트를 생성
- Amazon ECS 또는 Amazon EKS를 사용하여 컨테이너를 배포하는 데 필요한 컴퓨팅, 네트워크 및 보안 인프라를 구성하는 AWS CloudFormation 템플릿을 구축
- 프로필, 애플리케이션 분석 및 모범 사례를 기반으로 아티팩트의 키 값을 미리 채웁니다.
- AWS클라우드 배포
- Amazon ECS 또는 Amazon EKS에 컨테이너를 배포합니다.
- 선택적으로 AWS CodePipeline 및 관련 서비스로 CI/CD 파이프라인을 생성하여 애플리케이션 컨테이너의 구축 및 배포를 자동화합니다.
테스트 환경 세팅
AWS 공식 워크샵에서 다음 cloudformation stack URL을 제공합니다.
Modernize with AWS App2Container Workshop
https://app2container-workshop-artifacts.s3-us-west-2.amazonaws.com/app2container_workshop_template.yml
app2Container(A2C) 설치
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
tar xvf AWSApp2Container-installer-linux.tar.gz
./install.sh
app2container help
app2Container(A2C) 초기화
app2container init
Workspace directory path for artifacts[default: /root/app2container]:
Use AWS EC2 Instance profile 'arn:aws:iam::-:instance-profile/App2ContainerWorkshop-EC2InstanceProfile-' configured with this instance? (Y/N)[default: n]
AWS Profile (configured using 'aws configure --profile')[default: default]:
Optional S3 bucket for application artifacts: app2container-sd-jan-29
Report usage metrics to AWS? (Y/N)[default: y]:
Automatically upload logs and App2Container generated artifacts on crashes and internal errors? (Y/N)[default: y]:
Require images to be signed using Docker Content Trust (DCT)? (Y/N)[default: n]:
애플리케이션 인벤토리 생성
app2container inventory
{
"java-tomcat-69447924": {
"processId": 3661,
"cmdline": "/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java ... -Dcatalina.home=/usr/local/tomcat8 -Djava.io.tmpdir=/usr/local/tomcat8/temp org.apache.catalina.startup.Bootstrap start ",
"applicationType": "java-tomcat",
"webApp": "ROOT"
}
}
애플리케이션 분석
java-app-id
: java-tomcat-69447924
app2container analyze --application-id <java-app-id>
✔ Created artifacts folder /root/app2container/java-tomcat-69447924
✔ Generated analysis data in /root/app2container/java-tomcat-69447924/analysis.json
👍 Analysis successful for application java-tomcat-69447924
💡 Next Steps:
1. View the application analysis file at /root/app2container/java-tomcat-69447924/analysis.json.
2. Edit the application analysis file as needed.
3. Start the containerization process using this command: app2container containerize --application-id java-tomcat-69447924
컨테이너 이미지에 대한 정보 파라미터들 확인
cat /root/app2container/<java-app-id>/analysis.json | grep -A7 containerParameters
컨테이너화
모든 AWS 배포 관련 구성을 포함하는 도커 파일 및 deployment.json 파일을 생성합니다.
java-app-id
: java-tomcat-69447924
app2container containerize --application-id <java-app-id>
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
java-tomcat-69447924 latest 3f40fa8dd345 About a minute ago 734MB
ubuntu 18.04 2c047404e52d 10 months ago 63.3MB
"app2container containerize" 명령을 실행하면 자동으로 deployment.json 파일이 생성됩니다. 이 파일에는 AWS 배포 구성이 포함되어 있습니다. 이 파일을 업데이트하여 AWS 환경에서 배포를 사용자 지정할 수 있습니다.
vi /root/app2container/<java-app-id>/deployment.json
vpcId 를 본인의 target vpc id를 확인하여 입력합니다.
"reuseResources": {
"vpcId": <target_vpc_id>,
"reuseExistingA2cStack": {
"cfnStackName": "",
"microserviceUrlPath": ""
},
"sshKeyPairName": "",
"acmCertificateArn": ""
},
배포 아티팩트 생성
java-app-id
: java-tomcat-69447924
app2container generate app-deployment --application-id <java-app-id>
이 명령을 통해 다음 4가지 작업을 진행합니다.
- Amazon ECR 리포지토리를 생성하고 생성한 애플리케이션 컨테이너 이미지를 해당 리포지토리에 복사하합니다.
- ECS 작업 정의를 생성하고 ECS에 등록합니다.
- 선택한 S3 버킷에 모든 CloudFormation 리소스를 업로드합니다.
- CloudFormation 템플릿을 생성합니다.
cat /root/app2container/<java-app-id>/EcsDeployment/ecs-master.yml
AWS 클라우드에 배포
java-app-id
: java-tomcat-69447924
aws cloudformation deploy --template-file /root/app2container/<java-app-id>/EcsDeployment/ecs-master.yml --capabilities CAPABILITY_NAMED_IAM --stack-name a2c-<java-app-id>-ECS
'IT > AWS' 카테고리의 다른 글
[AWS] EKS 클러스터에 서브넷 IP 추가 하기-2(VPC CNI custom networking 활용 실패 편) (0) | 2021.10.13 |
---|---|
[AWS] EKS 클러스터에 서브넷 IP 추가 하기 (3) | 2021.10.12 |
[AWS] SSM을 이용한 EC2 접근 - 보안강화 버전(aws-valut, MFA 사용) (1) | 2021.10.01 |
AWS Load balancer controller 통신 포트 확인하기 (0) | 2021.09.24 |
[AWS] Lambda Layer 생성 방법 (0) | 2021.09.24 |