AWS 기술 블로그
AWS Application Migration Service을 사용하여 Azure에서 AWS로 VM Migration하기
오늘날 다양한 조직들이 비용을 줄이고 인프라를 최적화하기 위해 클라우드로 마이그레이션을 계획합니다. 또한 마이그레이션 후에도 비즈니스 목표 달성을 위하여 지속적으로 기존 워크로드를 최적화하거나 현대화하는 과정을 반복합니다. 그 과정에서 때로는 특정 AI서비스에 대한 요구나 성능, 안정성 등을 이유로 한 클라우드 공급자에서 다른 클라우드 공급자로 옮기기도 합니다.
AWS Application Migration Service (AWS MGN)는 물리서버, 가상서버, 그리고 타 클라우드 공급자에서 AWS로 비즈니스의 운영 중단없이 마이그레이션을 자동화해주는 서비스입니다. x86기반의 리눅스, 윈도우 운영체제에서 실행되는 어떤 워크로드든 쉽게 마이그레이션 가능하며, 광범위한 플랫폼을 지원합니다.
이 글에서는 AWS MGN이 지원하는 다양한 소스 환경 중, Azure 기반의 워크로드를 AWS로 마이그레이션하는 방법에 대해 상세히 기술하며, 또한 타 클라우드 공급자에서 옮길 경우 고려해야 할 주의사항들에 대해서 설명합니다.
마이그레이션 고려 사항
AWS는 조직이 수십, 수백 또는 수천 개의 애플리케이션을 마이그레이션할 전략을 세우는 데 도움을 제공하기 위해 3단계로 구성된 마이그레이션 프로세스를 설계하였습니다. 각 단계는 마이그레이션을 성공시키기 위한 공통 구성 요소이며, 별개의 단계가 아니라 반복적인 프로세스입니다. 단계별 수행해야할 내용과 Azure 환경으로부터 AWS 마이그레이션시 활용할 수 있는 도구 및 서비스는 다음과 같습니다.
- Assess : 기존 환경(인벤토리)에 대한 분석 및 현재 조직의 클라우드 여정의 준비 상태를 점검하여, AWS로 마이그레이션시 얻을 수 있는 혜택 및 비즈니스 사례를 개발합니다. 기존 환경이 Azure 인 경우, Resource Discovery for Azure 라는 Power shell 기반의 도구를 활용해 쉽고 빠르게 Discovery작업을 수행할 수 있습니다.
- Mobilize : 본격적인 준비 단계로 좀 더 상세한 기존 환경 분석 및 마이그레이션 수행 계획을 수립하고, AWS 환경 내 거버넌스 체계 확립을 위해 AWS Control Tower를 활용한 랜딩존을 구축할 수 있습니다. 아울러 작은 규모의 워크로드를 통한 테스트 및 검증을 위한 Pilot 마이그레이션을 수행합니다.
- Migrate & Modernize : Mobilize단계에서 수립된 상세 마이그레이션 계획 기반으로 대규모 마이그레이션의 경우 우선 순위에 따라 그룹화된 워크로드별로 정의된 하나의 마이그레이션 라이프사이클 (계획 – 전송 – 테스트 – 컷오버)에 해당하는 마일스톤별로 순차적으로 마이그레이션을 수행합니다.
AWS Application Migration Service (AWS MGN)은 Mobilize 단계에서 Pilot 마이그레이션과 Migrate & Modernize 단계에서 본격적인 대규모 마이그레이션시에 활용할 수 있습니다.
Azure ubuntu virtual machine 마이그레이션시 고려 사항
Cloud 환경에서 Ubuntu Server의 경우 일반적으로 온-프레미스 환경에서 사용하는 Generic Kernel이 아닌 해당 클라우드 제공업체의 디바이스 드라이버들로 최적화된 Cloud optimized Kernel로 구성되어 있습니다. 따라서 Azure ubuntu 서버를 AWS MGN을 사용하여 Amazon EC2로 그대로 리프트-앤-쉬프트할 경우 정상적으로 구동이 되지 않을 수 있어 사전에 표준 커널(linux-generic) 또는 AWS 최적화 Ubuntu 커널(linux-aws)로 스위칭하기 위한 작업이 필요합니다.
솔루션 상세
아키텍처 개요
AWS MGN으로 VM 마이그레이션 하기
Step 1. Azure Ubuntu 서버 커널 변경
1. 현재 Ubuntu의 커널을 확인 하기 위해 아래의 명령을 실행합니다.
uname -r
아래 처럼 명령 결과로 azure가 포함되어있다면, MGN으로 마이그레이션 전에 커널 변경이 필요합니다.
2. apt 명령을 통해 Ubuntu 일반 커널을 설치합니다. (커널 업그레이드 전, 사전에 반드시 백업을 해두시길 권고드립니다.)
sudo apt update
sudo apt install linux-generic
3. GRUB 부트로더를 업데이트 하여 설치한 일반 커널을 설정합니다.
sudo update-grub
4. 변경사항을 적용하기 위해 서버를 재부팅 합니다.
sudo reboot
5. 올바르게 변경 되었는지 확인하기 위해 다시 uname
명령을 실행합니다.
uname -r
아래처럼 커널이 변경 된것을 확인 할 수 있습니다.
현재 커널의 버전은 예시입니다. Generic kernel이 기존에 설치되어있는 Azure tuned 커널보다 버전이 낮다면 커널 변경에 어려움이 있을 수 있습니다. 그렇기 때문에 Azure tuned 커널보다 높은 버전으로 설치해주어야 합니다.
Step 2. AWS MGN 환경 설정
AWS Application Migration Service을 처음 시작할 때 서비스를 초기화해야 합니다.
여기서 Set up service를 클릭하면 초기화가 진행됩니다.
만약 AWS MGN을 처음 사용하는 것이 아니라면 왼쪽 메뉴에서 Settings > Replication template에서 Reinitialize service permissions를 진행한 이후에 다시 실행할 수 있습니다.
서비스를 초기화하면 IAM 역할과 Replication template이 생성됩니다.
Step 3. IAM 역할 생성
소스 서버(Azure VM)에 AWS MGN 에이전트를 설치하려면 먼저 필요한 권한을 가지고 있는 IAM 역할을 생성해야 합니다. 여기서 생성한 IAM 역할을 사용해서 아래의 작업들을 진행합니다.
1. 콘솔에서 IAM을 검색해서 해당 서비스에 접근합니다.
2. 왼쪽 메뉴에서 Roles를 선택합니다.
3. 이 화면에서 Create role를 선택하여 IAM 역할을 생성합니다.
Step 1에서 Trusted entity type를 AWS Account로, AWS Account를 This account로 선택합니다.
Step 2에서 AWSApplicationMigrationAgentInstallationPolicy 를 검색하고 체크박스를 선택합니다.
Step 3에서 Role name를 MGNInstallRole로 입력하고 저장합니다.
4. 생성한 역할(MGNInstallRole)을 검색하여 선택한 뒤에 해당 역할의 ARN을 복사합니다.
Step 4. Azure VM에 AWS MGN 에이전트 설치
콘솔에서 AWS Application Migration Service로 이동합니다. Source servers 메뉴에서 Add server를 선택하여 소스 서버를 생성합니다.
아래 처럼 AWS Replication Agent installation 섹션을 확인할 수 있습니다.
이 과정에서 필요한 IAM access key ID, IAM secret access key, Session token등을 확인하기 위해 Step 3. IAM 역할 생성에서 생성한 IAM 역할의 임시 보안 자격 증명을 가져옵니다. 여러 방법이 있지만 별다른 설치없이 쉽게 사용할 수 있는 CloudShell을 사용할 수 있습니다.
1. 콘솔 페이지 오른쪽 상단에 있는 CloudShell을 선택하여 Shell을 실행합니다.
2. 잠시 후 CLI를 직접 입력할 수 있는 터미널이 열리면, 다음 명령을 실행합니다.
aws sts assume-role --role-arn [MGNInstallRole ARN] --role-session-name "MGNInstallRole"
3. 위 명령의 결과값으로 출력된 IAM access key ID, IAM secret access key, Session token을 AWS Replication Agent installation 섹션에 입력하고 아래에 있는 Installer 다운로드 명령(wget)과 replication installer를 초기화하는 명령을 복사합니다.
4. Azure VM에서 위 그림의 5번, 6번 명령을 차례대로 실행합니다.
5. AWS Replication 에이전트가 성공적으로 설치되면 AWS Application Migration Service에 소스 서버가 추가된 것을 확인할 수 있습니다.
Step 5. 테스트 및 컷오버
소스 서버가 추가되고 초기 복제가 완료된 후, 컷오버 하기 전에 테스트를 진행할 수 있습니다.
1. Migration lifecycle이 Ready for testing으로 변경된 것을 확인하고, 소스 서버명을 클릭한 후, 오른쪽 상단의 Test and cutover 를 선택하고 Launch test instance를 선택하여 테스트를 시작합니다.
2. 테스트가 성공하면 Migration lifecycle이 Ready for cutover로 변경 됩니다. 오른쪽 상단의 Test and cutover를 선택하고, Launch cutover instance를 선택하여 컷오버를 시작합니다.
3. 테스트와 마찬가지로 cutover instance가 시작됩니다. 시간이 지나고 아래처럼 Launched로 상태가 변경되면, View in EC2 Console을 클릭 하거나 EC2 콘솔에서 새로 생성된 EC2를 확인할 수 있습니다.
4. EC2 인스턴스가 정상인지 확인되었으면, 오른쪽 상단의 Test and cutover를 선택하고 Finalize cutover를 선택하여 컷오버를 마무리합니다. 이때 마이그레이션 과정에서 생성된 임시 리소스가 정리됩니다.
5. 컷오버가 완료 되었습니다.
복제/시작/시작 후 템플릿
AWS MGN에서는 마이그레이션 프로세스를 제어하기 위한 3가지 템플릿이 있습니다.
복제 템플릿은 소스서버에서 AWS로 데이터를 전송하는 방법을 제어합니다. 즉, 소스와 타겟 사이의 복제서버에 대한 구성으로 복제 인스턴스의 타입이나 서브넷, 보안그룹 등을 지정하게 됩니다. 시작템플릿은 테스트 인스턴스나 실제 컷오버 인스턴스에 대한 구성을 제어합니다. 인스턴스 시작 시, 자동으로 최적의 인스턴스 타입을 선택하도록 지정하거나 혹은 원하는 타입을 선택할 수 있습니다. 또한, 소스서버의 프라이빗 IP 복사 여부나 서브넷, 보안그룹 등 시작할 인스턴스에 대한 세부사항 설정이 가능합니다. 마지막으로 시작 후 템플릿은 인스턴스가 시작된 후 수행할 작업들을 자동화할 수 있는 템플릿입니다. 수행할 작업들은 AWS Systems Manager (AWS SSM)를 사용하며 수행되며 활성화 시, Systems Manager 에이전트가 대상 인스턴스에 설치되게 됩니다. 에이전트가 설치되는 대상 인스턴스는 테스트 또는 컷오버 인스턴스, 혹은 테스트와 컷오버 인스턴스 모두를 지정할 수 있습니다. OS전환이나 Window 업그레이드, Auto Scaling 그룹 설정과 같은 다양한 사전 정의된 액션을 사용할 수도 있고 또는 필요 시 패치적용이나 쉘스크립트 실행과 같이 특정 작업을 수행하도록 커스텀한 액션을 정의할 수 있습니다.
결론
이 글에서는 AWS MGN을 사용하여 Azure에서 AWS로 리프트-앤-쉬프트 마이그레이션 상세 과정과 특히 Azure에서 이관 시 고려해야 할 사항들에 대해 알아보았습니다. AWS MGN은 단순 마이그레이션 뿐만 아니라, 실제로 프러덕션으로 서버를 전환하기 전에 AWS 상에서 충분한 테스트 과정을 거친 후 간편한 전환이 가능합니다. 또한 시작 후 템플릿을 통하여 이관 후 필요한 추가적인 작업들을 정의하여 자동화할 수도 있습니다. 이 글에서는 Azure에서의 이관을 다루었지만 타 클라우드 공급자 뿐만 아니라 온-프레미스 서버의 이관도 AWS MGN을 통해 가능합니다.
AWS MGN은 마이그레이션 프로세스 전반에 걸쳐 최소한의 변경 또는 변경없이 AWS로의 리프트-앤-쉬프트 마이그레이션이 가능하도록 자동화해주는 서비스입니다. Azure에서 AWS로 마이그레이션 시, 이번 글에 기술된 것 처럼 몇 가지 설정 과정과 사전 고려사항만 유의한다면 마이그레이션 과정을 최대한 간소화하고 비용절감할 수 있습니다. 특히 AWS MGN은 각 소스서버 당 90일동안 무료 사용이 가능합니다. 따라서, 마이그레이션 작업을 수행하기 전에 충분히 계획을 세우고 시작한다면 대부분의 고객은 무료 기간 내에 마이그레이션을 완료할 수 있습니다.