안녕하세요? 오픈소스컨설팅에서 퍼블릭 클라우드 엔지니어로 근무하고 있는 박슬아 프로입니다.

오늘은 AWS 서비스 중에서 2021년 5월에 출시된 서버 마이그레이션 기법인, AWS Application Migration Service(MGN)를 활용한 서버 마이그레이션 작업(Linux to AWS EC2)에 대한 내용을 다루어 보겠습니다.

AWS 애플리케이션 마이그레이션 서비스(MGN)

AWS Application Migration Service(MGN)는 애플리케이션 단의 마이그레이션을 가장 효율적이고 안전하게 클라우드로 마이그레이션을 할 수 있는 방안으로 자동화된 리프트 앤 시프트(리호스트) 솔루션으로서 기업들이 가지고 있는 기존의 애플리케이션, 아키텍처 혹은 마이그레이션되는 서버들에 대한 어떠한 변화도 없이 애플리케이션을 마이그레이션 할 수 있다는 특징이 있습니다.

그림. AWS MGN 서비스 구조

AWS Application Migration Service(MGN) Lifecycle

그림. 마이그레이션 단계

MGN 작업 전반에 대한 라이프사이클에 대한 내용을 정리하였으며 앞으로 매뉴얼로 다룰 내용들에 대해 전반적인 과정을 설명합니다.

  1. Not ready:  온프레미스의 원본 서버이자 AWS로 마이그레이션해야되는 대상 서버인 Source server를 아직 마이그레이션 절차를 진행하기 전의 단계를 의미합니다.
  2. Ready for testing: Source server에 Replication Agent를 설치하여 Source server를 대상으로 replication 세팅을 설정하며 정립합니다. 
  3. Test in progress: Replication 인스턴스 템플릿을 통해 생성된 복제 서버가 Source server와 AWS간 데이터를 복제하며 스테이징 영역 서브넷을 생성하고 관리합니다. 
  4. Ready for cutover: Replication 서버는 Source server에서 실행중인 에이전트로부터 데이터를 수신하고 해당 데이터를 EBS 볼륨에 작성합니다.
  5. Cutover in progress: 테스트 및 컷오버 단계가 시작되면 AWS MGN은 Source server(원본 서버)를 AWS에서 기본적으로 부팅 및 실행하도록 변환합니다.
  6. Cutover complete: 시작된 인스턴스가 AWS에서 제대로 작동하는지 확인 후 Source server를 해제할 수 있음

AWS MGN 서비스 테스트 환경

그림. MGN 서비스 테스트 환경

<On-premise 서버 용 LAMP(Linux, Nginx, MariaDB, PHP) 테스트 환경>
OS : Ubuntu 20.04
Disk : 20GB
CPU : 1 core
Mem : 4096MiBIP 
ssh port : 22

본 예제에서 다루는 LAMP 스택에 활용한 각 버전은 다음과 같습니다.
Linux 버전: Ubuntu 20.04
Nginx 버전: 1.18.0 (Ubuntu)
MariaDB 버전: 10.3.34
PHP 버전: 7.4.3 (cli) (built: Mar 2 2022 15:36:52) ( NTS )

→ 해당 매뉴얼을 작성하기 위해 구성한 환경은 Ubuntu 서버에 LAMP(Linux, Nginx, MariaDB, PHP)를 설치하였고 해당 LAMP 서버를 AWS EC2 인스턴스로의 마이그레이션하는 과정을 설명합니다. 


그럼 작업을 시작해보겠습니다. 👏

MGN 서비스를 이용한 서버 마이그레이션 작업 하기 (Linux to EC2)

여기서 잠깐 TIP) * 작업 시작 전 MGN 서비스 시 사용될 Replication Server를 테스트 할 수 있는 용도로 네트워크 설정(AWS VPN, Subnet) 및 보안그룹을 구성하여야하며 특정 포트를 오픈해야합니다. 단, 포트는 소스 서버와 Replication Server 보안 그룹 인바운드 규칙에 모두 적용해주어야 하며 TCP 443, 1500번을 열어줘야합니다. 

1. AWS MGN 콘솔에 리플리케이션 세팅 템플릿 생성하기

→ AWS console에서 AWS MGN 서비스를 검색하여 MGN 콘솔로 접속합니다.
→ MGN 서비스를 사용하기위해서는 AWS MGN 콘솔에 replication 서버 생성 용 세팅 템플릿을 먼저 생성하여 데이터 복제가 새롭게 추가되는 소스 서버마다 어떤 방식으로 작동을 할 지 결정합니다. 세팅은 하나의 독립적인 소스 서버 혹은 일련의 그룹의 소스 서버 모두 각각 언제든지 변경 가능합니다. 
→ 콘솔을 생성하기 위해 “Get started(시작하기)” 버튼을 누릅니다.

2. AWS MGN 템플릿 설정하기

→ 원하는 구성에 맞춰서 서브넷, 리플리케이션 서버 인스턴스 타입, EBS 볼륨 타입, 보안그룹 등을 설정합니다. 
→ 보안 그룹(방화벽 기능)은 미리 생성해 두는데 해당 내용에는 인바운드 규칙에 TCP 443, 1500번을 오픈해야 합니다. 해당 내용은 소스 서버에도 동일하게 적용합니다. 

→ 템플릿 생성이 완료되었다는 메세지가 나오면서 소스 서버를 등록할 수 있는 화면이 나옵니다.
→ 소스 서버를 등록하기 위해 가지고 있는 소스 서버(리눅스 혹은 윈도우즈)에 AWS MGN Replication Agent를 설치합니다.

3. 소스 서버(리눅스)에 Agent 설치하기

  • 해당 내용을 진행하기 전 현재 사용하고 있는 계정에 AWSApplicationMigrationAgentPolicy 해당 권한을 추가하고 진행하여야 합니다.
  • wget을 이용하여 에이전트 인스톨러 파일을 다운로드 받습니다. 
mgnuser@osc-KVM:~$ sudo wget -O ./aws-replication-installer-init.py https://aws-application-migration-service-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/linux/aws-replication-installer-init.py
[sudo] password for mgnuser:
--2022-05-11 14:12:50--  https://aws-application-migration-service-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/linux/aws-replication-installer-init.py
Resolving aws-application-migration-service-ap-northeast-2.s3.ap-northeast-2.amazonaws.com (aws-application-migration-service-ap-northeast-2.s3.ap-northeast-2.amazonaws.com)... 52.219.148.27
Connecting to aws-application-migration-service-ap-northeast-2.s3.ap-northeast-2.amazonaws.com (aws-application-migration-service-ap-northeast-2.s3.ap-northeast-2.amazonaws.com)|52.219.148.27|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13740 (13K) [binary/octet-stream]
Saving to: ‘./aws-replication-installer-init.py’

./aws-replication-insta 100%[===============================>]  13.42K  --.-KB/s    in 0s

2022-05-11 14:12:50 (57.7 MB/s) - ‘./aws-replication-installer-init.py’ saved [13740/13740]
mgnuser@osc-KVM:~$ sudo python3 aws-replication-installer-init.py
The installation of the AWS Replication Agent has started.
AWS Region Name: ap-northeast-2
AWS Access Key ID: xxxxxxxxxxxxxx
AWS Secret Access Key:
Identifying volumes for replication.
Choose the disks you want to replicate. Your disks are: /dev/vda
To replicate some of the disks, type the path of the disks, separated with a comma (for example, /dev/sda,/dev/sdb). To replicate all disks, press Enter:
Identified volume for replication: /dev/vda of size 20 GiB
All volumes for replication were successfully identified.
Downloading the AWS Replication Agent onto the source server... Finished.
Installing the AWS Replication Agent onto the source server... Finished.
Syncing the source server with the Application Migration Service Console... Finished.
The following is the source server ID: s-77213f0f64a116984.
You now have 1 active source server out of a total quota of 20.
Learn more about increasing source servers limit at https://docs.aws.amazon.com/mgn/latest/ug/MGN-service-limits.html
The AWS Replication Agent was successfully installed.

→ 소스 서버에 AWS Replication Agent를 설치진행하며 재시작은 요구되지 않습니다.
→ 각 항목별 현재 사용하고 있는 계정과 관련된 정보를 입력합니다. 해당 내용은 AWS IAM 기능 혹은 콘솔 오른쪽 상단의 사용자 정보를 참고하여 입력합니다.
(AWS Region Name: 서비스 사용지역 이름, AWS Access Key ID: 엑세스 키 ID, AWS Secret Access Key: AWS 시크릿 키)

혹시 엑세스 키 및 시크릿 키를 발급 받는 방법을 모르시다면 해당 문서를 참조해주시기 바랍니다.  https://docs.aws.amazon.com/ko_kr/powershell/latest/userguide/pstools-appendix-sign-up.html

참고: https://docs.aws.amazon.com/mgn/latest/ug/linux-agent.html

4. 소스 서버 복제하기

→ Agent 설치가 되면서 Application Migration Service가 자동으로 OS, 애플리케이션, 데이터, 구성 설정을 포함한 전체 서버를 복제합니다. 
→ AWS MGN Console의 소스 서버 페이지에서 복제가 진행되는 소스 서버의 리스트를 확인할 수 있으며 조금 전 설치한 Replication Agent가 자동으로 소스 서버와의 Sync 작업을 진행됩니다. 

→ 약 20여분이 지나면 데이터 리플리케이션 상태가 100% 완료로 확인가능하며 다음 단계로는 테스트 인스턴스를 생성할 수 있다는 메세지가 나옵니다. 

5. 테스트 인스턴스 생성 용 Launch 세팅하기 

→ 조금 전 복제된 소스 서버를 선택 후 구성환경 정보가 있는 아래 메뉴에서 Launch 세팅을 선택합니다.
→ Launch 세팅은 replication 서버(테스트 서버와 컷오버 서버)가 각 소스 서버마다 어떻게 생성이 될 것인가에 대한 설정을 하는 부분으로 General Launch와 EC2 Launch Template 두 가지 방법이 있습니다. 
General Launch는 서버의 구체적인 세팅을 컨트롤 하기 위한 구성을 하는 작업이며 EC2 Launch Template은 각 소스 서버별 테스트 및 컷 오버용 EC2 인스턴스를 사용하기 위한 목적으로 MGN 서비스가 활용하게 됩니다. 
→ EC2 Launch Template은 소스 서버가 AWS로 마이그레이션 되는 과정에서 AWS Replication Agent를 통해 자동으로 완성이 되지만 향후 해당 탬플릿을 통해 새로운 테스트 및 컷오버용 EC2 인스턴스가 생성되므로 원하는 구성으로 편집을 합니다.
(저는 따로 서브넷 혹은 보안그룹을 특정하지 않았으며 default로 설정되어 있는 값을 사용하도록 하였고 추가로 퍼블릭 IP를 받을 수 있도록 설정하였습니다.)

6. General Launch 환경 설정 편집하기 

 General launch settings에서 Edit을 누릅니다. 

→ Replication 서버(테스트 서버, 컷 오버 서버) 생성 용으로 네트워크는 및 인스턴스 사이즈 등 기존 소스 서버와 똑같이 설정할 필요가 없으며 원하는 구성에 맟추어 설정합니다. 
→ Instance type right sizing은 MGN 서비스가 소스 서버의 하드웨어 구성과 가장 적절한 테스트 혹은 컷오버 인스턴스 종류를 생성 할 수 있도록 역할을 합니다. Basic 옵션을 선택 시 MGN 서비스가 소스 서버의 OS, CPU, RAM에 따라 가장 적합한 종류의 테스트 혹은 컷오버 인스턴스 타입을 생성하게 됩니다. 만약 None을 선택하면 MGN 서비스는 EC2 Launch 탬플릿에 설정되어 있는 인스턴스 타입으로 생성을 합니다. 
→ Start instance upon launch는 Yes 선택 시 테스트 혹은 컷오버 서버가 자동으로 생성이 되는 것을 의미하며 No선택 시 인스턴스들이 정지된 상태로 생성이 되며 EC2 콘솔에서 사용자가 직접 테스트 혹은 컷오버 인스턴스를 시작해야합니다. 
 Operating system licensing은 리눅스를 사용하고 있는 사용자라면 자동으로 BYOL이 기본값으로 설정이 됩니다. 
 Transfer server tags는 MGN이 소스 서버에 설정되어있는 사용자가 설정한 태그들을 테스트 혹은 컷오버 인스턴스로 전환합니다. (EC2 인스턴스, 보안그룹, EBS 볼륨, 스냅샷)
→ 테스트 서버 혹은 컷오버 서버가 소스 서버의 사설 IP를 그대로 사용하기를 원할 시에는 Copy private IP를 Yes로 선택합니다. 해당 내용대로 선택을 한다면 MGN 서비스가 소스 서버의 사설 IP를 프라이머리 네트워크 인터페이스로서 사용합니다. 

7. EC2 Launch Template 환경 설정 편집하기

 EC2 Launch 템플릿은 MGN 서비스가 각 소스 서버별로 테스트 및 컷오버 인스턴스를 생성할 때 사용되며 AWS Replication Agent 설치되어 MGN 서비스가 추가된 각 소스 서버별로 자동으로 생성이 됩니다. 
→ EC2 Launch 템플릿은 기본적으로 default VPC를 사용하는데 만약 default VPC가 삭제되었다면 MGN 인스턴스는 생성이 불가능하므로 default VPC 혹은 특정 서브넷을 선택하여야 합니다. 
→ EC2 Launch Template 화면의 오른쪽의 변경하기를 선택합니다.

→ “Modify”를 선택하면 EC2 Launch 템플릿을 변경할 때마다 새로운 버전이 생성되며, MGN이 새로운 버전을 사용해야한다면 반드시 새 버전을 Default 값으로 수정해야한다는 안내 메세지가 나옵니다. 

8. EC2 Launch 환경 세팅하기 

→ Launch 세팅을 통해 EC2 인스턴스 테스트 용 서버를 생성합니다. 

9. 서버 정보 탭 확인

→ MGN을 통해 마이그레이션이 이루어지고 나면 서버 정보 탭에는 외부 서버에 대해 MGN에 알려진 정보, AWS의 서버 식별자 및 MGN에 추가된 날짜, 마이그레이션된 서버의 권장 인스턴스 유형(MGN이 외부 서버의 CPU 및 RAM을 기반으로 계산)이 포함됩니다. 

10. 복제 환경 세팅 탭 확인

→ Replication Settings은 현재 소스 서버의 Replication 환경구성을 보여주며 Replication 세팅이 어떻게 외부 서버로 부터 AWS 계정 내 MGN Replication 서버로 데이터가 복제되는지를 컨트롤합니다. 

11. 소스 서버 테스트 인스턴스 생성

→ 소스 서버를 추가하고 시작 설정을 구성했다면 소스 서버의 Migration dashboard 탭에서 테스트 인스턴스를 시작할 준비가 되었다는 Ready for testing 상태를 확인할 수 있습니다. 소스 서버가 AWS 환경 내에서 제대로 작동하는지 확인하려면 컷오버를 시작하기 전에 소스 서버를 AWS로 마이그레이션하는 것을 테스트 하는 것이 중요합니다. 
→ 오른쪽 상단의 “Test and cutover” 메뉴를 선택 후 “Launch test instances”를 선택하여 테스트 인스턴스를 생성합니다. 

 “Launch”를 누르면 이전에 설정한 Launch Settings에 적용된 구성에 따라 EC2 인스턴스가 생성이 될 것이며 생성된 인스턴스들은 AWS 계정 레벨에 따라 비용이 청구된다는 메세지를 보여줍니다. 

→ 생성하기를 누르면 테스트 인스턴스를 만들어가는 과정으로 현재 대기중(waiting)이라는 상태를 확인할 수 있습니다. 

→ 테스트 인스턴스 생성이 완료되면 Launch 상태는 Launched로 변경되며 부팅이 성공했다는 메세지를 확인할 수 있습니다. 

→ 테스트 인스턴스가 성공적으로 생성이 되었다면 다음 단계로 넘어가기 위해 Mark as “Ready for cutover”를 선택합니다. 
→ 컷오버 단계는 소스 서버를 AWS의 컷오버 인스턴스로 마이그레이션하는 단계입니다. 

→ Mark as “Ready for cutover”를 선택하면 테스트 인스턴스들은 종료가 되긴 전까지 비용이 발생하며 “Test and cutover” 메뉴에서 인스턴스들을 지금 혹은 나중에 종료할 수 있으며 마지막으로 테스트를 위해 인스턴스가 생성이되면 인스턴스를 종료할 것인가에 대한 질문에는 “Yes”라고 답을하여 필요없는 리소스는 자동으로 삭제되도록 설정합니다. 

→ 상태가 Ready for cutover로 변경되면 “Test and cutover” 메뉴에서 “Launch cutover instances”를 선택하여 컷오버 인스턴스를 생성합니다. 

→ 컷오버 인스턴스를 생성하기위해 “Launch”를 누르면 해당 인스턴스는 기존에 구성한 Launch settings에 따라 생성이 되며 생성된 인스턴스들은 비용이 발생한다는 안내 메세지가 나옵니다. 

12. 타켓 서버 및 Conversion(전환) 서버 확인 

→ 컷오버 인스턴스가 생성되어 진행되는 동안 EC2 콘솔에서 타겟 서버와 Conversion 서버가 차례대로 생성되는 것을 확인할 수 있습니다. 

13. 소스 서버 마이그레이션 라이플사이클 확인

→ 소스 서버의 마이그레이션 라이프사이클 화면에서 Cutover in progess 상태가 되었고 데이터 복제 상태가 Healthy가 되었다면 성공적으로 컷오버가 되었다는 것을 의미하므로 다음단계인 Finalize cutover 단계로 넘어갈 수 있음을 의미합니다. 
→ 컷오버가 되면 데이터 복제가 중단되며 모든 복제된 데이터는 삭제됩니다. 또한 데이터 복제를 위해 사용된 모든 AWS 자원들은 종료됩니다.

14. 마이그레이션이 완료된 서버 접속

(base) MacBook-Pro: $ ssh -i /Users/AWS/mgntest.pem ubuntu@3.34.84.83
The authenticity of host '3.34.84.83 (3.34.84.83)' can't be established.
ECDSA key fingerprint is SHA256:tY9efmNs3/+EqVStetz7bYVyyTRcT4eRixnt2Bjvp/g.
Are you sure you want to continue connecting (yes/no/[fingerprint])? ㅛ yes
Warning: Permanently added '3.34.84.83' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.13.0-41-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

25 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

Your Hardware Enablement Stack (HWE) is supported until April 2025.
Last login: Thu May 12 17:23:20 2022 from 36.95.12.211
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@ip-172-31-17-203:~$

→ MGN 서비스를 통해 마이그레이션이 완료된 해당 서버로 기존에 EC2 Launch 세팅에서 설정해놓은 pem 키파일을 이용하여 해당 서버로 접속합니다. 
→ 만약 pem키를 이용하여 접속 시도 시 비밀번호를 계속 물어본다면 ssh로 기존 소스 서버의 계정과 비밀번호로 접속하여 cloud-init을 설치 후 재부팅하여 pem키로 로그인을 시도하면 정상적으로 로그인이 가능합니다. 

15. Cutover 완료하기

→ 모든 테스트가 완료되고 마이그레이션이 성공적으로 마쳤다면 cutover를 완성하기를 선택하여 프로젝트를 마무리 합니다.
→ 오른쪽 상단의 “Test and cutover” 메뉴에서 “Finalize cutover”를 선택합니다. 

→ Cutover를 마무리하면 기존의 단계마다 전단계로 이동이 가능했던 것과는 달리 다시 되돌아갈수 없으며 이러한 작업이 모든 복제된 데이터들은 삭제가되며 데이터 복제를 위해 사용되었던 모든 AWS 자원들은 삭제될 것 이라는 메세지가 나옵니다.
→ “Finalize” 버튼을 선택합니다. 

→ 마이그레이션 라이프사이클 탭에서 Cutover가 완료되었다는 Cutover complete 단계를 확인이 되었다면 모든 작업이 마무리 되었다는 것을 의미합니다. 

16. AWS 리소스 삭제 확인 

→ Cutover가 마무리되고 프로젝트가 종료됨에 따라 기존에 EC2 콘솔에 존재하였던 Replication Server와 MGN 테스트 서버가 자동으로 삭제되며 마이그레이션이 완료된 서버가 남게됩니다.

마무리하며…

오늘은 AWS Application Migration Service(MGN)를 이용하여 온프레미스의 소스 서버를 AWS 퍼블릭 클라우드 환경으로 마이그레이션 할 수 있는 방법에 대해서 알아보았습니다. 

해당 매뉴얼을 통해 서버 마이그레이션을 하고자 하시는 분들께 많은 도움이 되셨기를 바라며 다음 시간에는 AWS DBMS(Database Migration Service)에 대해서 알아보는 시간을 가지겠습니다.

감사합니다.

참조: 
https://aws.amazon.com/ko/application-migration-service/
https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html
https://aws.amazon.com/blogs/aws/how-to-use-the-new-aws-application-migration-service-for-lift-and-shift-migrations/

안녕하세요. 오픈소스컨설팅의 퍼블릭 클라우드 엔지니어 박슬아 프로입니다.

Leave a Reply

Your email address will not be published. Required fields are marked *