본문으로 바로가기

[AWS] app2Container(A2C) 란?

category IT/AWS 2021. 10. 6. 17:56
반응형

app2Container(A2C) 란?

app2Container(A2C)란 .NET과 Java 애플리케이션을 컨테이너화된 애플리케이션으로 현대화(modernizing)하는 CLI 도구(tool) 입니다.

A2C를 사용하여 온프레미스, 가상 머신에서 실행되는 애플리케이션을 Amazon ECS 또는 Amazon EKS에서 관리하는 컨테이너로 쉽게 리프트 앤 시프트(lift and shift)할 수 있습니다.

app2Container(A2C)가 수행하는 작업

  1. 분석
    • ASP.NET(Windows) 및 Java 응용 프로그램(Linux)을 식별하는 응용 프로그램 서버에 대한 인벤토리 목록을 생성하며
    • 프로세스 및 네트워크 포트 종속성을 포함하여 실행 중인 지원되는 애플리케이션의 런타임 종속성을 분석 합니다.
  2. 추출 및 컨테이너화
    • 컨테이너화를 위한 애플리케이션 아티팩트를 추출하고 Dockerfile을 생성 합니다.
    • 애플리케이션 컨테이너에 대한 빌드를 시작합니다.
  3. 배포 아티팩트 생성
  • AWS에 애플리케이션 컨테이너를 배포하는 데 필요한 아티팩트를 생성
  • Amazon ECS 또는 Amazon EKS를 사용하여 컨테이너를 배포하는 데 필요한 컴퓨팅, 네트워크 및 보안 인프라를 구성하는 AWS CloudFormation 템플릿을 구축
  • 프로필, 애플리케이션 분석 및 모범 사례를 기반으로 아티팩트의 키 값을 미리 채웁니다.
  1. 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가지 작업을 진행합니다.

  1. Amazon ECR 리포지토리를 생성하고 생성한 애플리케이션 컨테이너 이미지를 해당 리포지토리에 복사하합니다.
  2. ECS 작업 정의를 생성하고 ECS에 등록합니다.
  3. 선택한 S3 버킷에 모든 CloudFormation 리소스를 업로드합니다.
  4. 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
반응형