본문 바로가기

AWS

[AWS] Application Migration Service(MGN) 으로 다른 리전에 마이그레이션 해보기

실습 목표

 

AWS Application Migration Service(MGN) 서비스를 이용하여 AWS 서울 리전 EC2 인스턴스 -> 오레곤 리전으로 Migration

 

실습 용어

 

Source Server : 기존 서버 (서울 리전의 인스턴스, 온프레미스 서버라고 생각)

Target Server : AWS 로 마이그레이션 될 서버 (오레곤 리전의 인스턴스)

Replication Server : 서울 리전의 인스턴스(온프레미스) 서버를 복제하는 서버

Conversion Server : Test / Cutover 시 타겟 서버로 convert 할때 필요한 서버

Cutover : 전환, 이전, 이관 이라는 뜻으로 실제 마이그레이션 적용 단계

 

실습

 

- AWS IAM 생성

 

온프레미스 -> AWS 로 마이그레이션 하기 위해 AWS로 접근하기 위한 자격이 필요하다.

 

IAM 사용자를 생성하여 csv 를 다운받는다.

 

나중에 소스 서버에 Agent 를 설치할 때 Access Key와 Secret Key를 입력 해야한다.

 

 

- Replication Settings

 

MGN 콘솔 - [Settings] 에서 Replication Server 에 대한 설정을 한다.

 

처음에 이 Settings가 타겟 서버에 대한 설정인줄 알았는데 알고보니 Replication Server 에 대한 설정이었다.

 

Server 인스턴스 타입, VPC, Subnet, SG 등에 대한 설정 등을 한다.

환경은 Public으로 진행했다.

 

Private 통신이 가능하도록 구성이 되어있으면 Private IP를 사용한다고 한다.

Replication Settings

복제 서버 설정이 완료되면 MGN 서비스를 사용하는데 필요한 IAM Role이 자동으로 생성되면서 서비스가 초기화 되어 사용할 수 있게 된다.

(MGN 콘솔에 액세스하면 자동으로 초기화 프로세스가 발생한다고 한다.)

 

- Target Server 설정

 

EC2 Launch Template 의 기본 템플릿이 곧 타겟 서버에 대한 설정이다.

 

Agent 를 설치하고 나면 MGN 콘솔에 소스 서버가 들어온다.

거기서 Launch Settings 에서 템플릿을 확인할 수 있다.

템플릿을 Modify 하는 것은 곧 새로운 버전을 새로 만드는 것인데,

수정 후에 반드시 기본 템플릿으로 지정을 해야만 원하는 템플릿으로 타겟 서버가 생성된다.

 

 

- Source Server에 Agent 설치하기

 

Agent 설치에 필요한 파이썬 파일 다운로드

wget -O ./aws-replication-installer-init.py https://aws-application-migration-service-<region>.s3.amazonaws.com/latest/linux/aws-replication-installer-init.py

 

 

다운받은 .py 파일 실행

python3 aws-replication-installer-init.py

 

replication installer 파이썬 파일 실행 화면 예시

- AWS Region Name : 마이그레이션 할 리전

- AWS Access Key ID : 

- AWS Secret Access Key : 

- To replicate DISK : 모든 디스크 복제할 경우 Enter (root 디스크는 선택 여부 관계없이 항상 복제된다.)

 

위의 4가지 항목을 입력해야 한다.

 

실행이 완료되고 나면 콘솔의 소스 서버 탭에 서울 리전의 서버가 복제되어진 것을 확인할 수 있다.

 

EC2 인스턴스에서 Replication Server가 생성된 것도 확인할 수 있다.

한참 기다리면 Replication Progress 가 finished 되면서 Lifecycle이 Ready for testing 상태로 변한다.

 

Lifecycle 에 보이는 단계를 그대로 따라갈 것이다.

 

1. Ready for testing

2. Test in progress

3. Ready for cutover

4. Cutover in progress

5. Cutover complete

 

 

- Test & Cutover

 

<Test 단계>

 

반드시 테스트 단계를 거쳐야만 Cutover(전환, 이전, 이관) 즉, 실제 마이그레이션 시작이 가능하다.

각 단계로 전환하기 위한 탭

테스트 순서는 이렇다.

 

테스트 시작 - MGN Test in progress 단계로 전환 - Conversion Server 생성 - 중지 - 종료된다.

타겟 서버 생성됨 - 잘 마이그레이션 됐는지 서버에 접속하여 확인해본다.

 

테스트 타겟 서버가 생성되었다.

 

Cutover 단계로 전환하여 테스트를 끝내면, 생성되었던 타겟 서버도 종료된다.

테스트 후 종료된 인스턴스 상태

 

만약, 테스트 도중에 변경 사항 등이 생겼다면 [Revert to "Ready for testing"] 단계로 돌린 후 다시 테스트를 시작해야 한다.

 

 

<Cutover 단계>

 

Cutover 를 시작하기 위해 테스트가 끝났다면 Mark as "Ready for cutover" 를 선택하여 Ready for cutover 상태로 만든 후, Launch cutover instances 를 눌러 Cutover 시작.

Ready for cutover 상태

 

Test 때와 동일하게 Conversion 서버 생성, 중지, 종료 -> 타겟 서버 생성의 순서를 거친다.

 

 

- 마이그레이션 된 서버 정상 작동 확인 (접속 확인 등등)

 

 

<서울 리전 인스턴스 (온프레미스)>

 

<오레곤 리전으로 마이그레이션 한 인스턴스 (AWS)>

EC2 시작 템플릿에서 지정한 PEM 키로 접속함.

서울 리전 인스턴스에서 테스트를 위해 생성했던 디렉터리 및 파일들이 잘 복제되어진 것을 확인할 수 있다.

history까지 그대로 가져와졌다..

 

물론 실제 마이그레이션 할 때

고작 디렉터리 몇개, 파일 몇개만 가져오는 것이 아니라 이런저런 변수가 발생할 수 있겠지만 재미있었다.

 

 

- Finalize cutover

 

마이그레이션이 완료된 것을 확인했으니 cutover 를 종료해야한다.

 

[Finalize cutover] - [cutover complete] 후 Replication 서버가 종료된다.

 

[Action] - [Mark as Archived] 하면 소스 서버에서 마치 사라진 것처럼 보이지만 아래로 들어가면 이전 소스 서버들을 모두 볼 수 있다.

 

만약 complete 설정을 안해두면 Agent 시간이 계속 지나다가 무료로 제공되는 제한 시간이 지나면 과금될 수 있으므로 유의하자.

 

 

*** 문제 해결

 

Test / Cutover 를 진행할 때, Conversion 서버가 생성되었다가 종료된 후에, 타겟 서버도 생성됐다가 바로 자기 혼자 중지되어 버리는 상황이 있었다.

 

그래서 인스턴스를 시작하려고 했더니 다음과 같은 root volume 관련 오류가 떴다.

 

EC2 시작 템플릿에서 볼륨 타입을 확인하고, Advanced 에서 디바이스 이름도 소스 서버와 동일하게 지정된 것을 확인했지만 같은 문제가 발생했다.

 

알고보니 이전 세대 인스턴스 타입은 디바이스 이름이 /dev/xvda 이고 현재 세대 디바이스 이름은 /dev/sda 이런식이라고 한다. (이전 세대, 현재 세대 타입이 뭔지 잘 모르므로 찾아보쟈)

세대에 따라 볼륨 타입이 달라지면서 디바이스 이름이 달라졌던 것이었다..

 

** 참고로 서울 리전의 인스턴스 타입은 t3.medium (현재 세대) 이었고, 타겟 서버(오레곤 리전) 인스턴스 타입은 c4.large (니트로X) 였다..

 

혹시 저런 에러 문구가 발생하고, 다시 템플릿 수정하고 테스트하기 번거롭다면 디바이스 이름을 직접 변경해주는 방법이 있다.

 

타겟 서버 인스턴스의 [Storage] 탭에서 아래의 노란색 부분을 확인해본다.

 

루트 디바이스 이름은 /dev/xvda 인데, attached 볼륨의 디바이스 이름은 /dev/sda1 이었다.

 

디바이스 이름을 /dev/xvda 로 변경했더니 인스턴스가 정상적으로 시작되었다. (인스턴스 시작 실패 오류에도 /dev/xvda 로 나와있다.)

 

 

<볼륨 디바이스 이름 변경 방법>

 

-> 볼륨을 분리했다가, 다시 연결하면 디바이스 이름을 다시 설정할 수 있다.

볼륨 연결 - 디바이스 이름 변경

어쩐지 계속 타겟 서버가 중지되는 바람에 MGN을 포기할뻔했다.

 

어찌됐든 끝내서 다행이다.

 

요약

  1. IAM 사용자 생성 및 certi 파일 저장 또는 복사해두기(csv)
  2. AWS MGN Replication Settings template 생성 - Replication 서버에 대한 설정
  3. EC2 시작 템플릿 생성
  4. EC2 - 시작 템플릿 - 생성한 템플릿을 기본 템플릿으로 설정
  5. AWS MGN Agent 파일 설치
  6. py 파일 실행하여 [Region / Access Key / Secret Key / Disk] 등록하면서 Agent 를 설치
  7. AWS MGN 콘솔 - Source server 상태 확인하여 [Ready for testing] 이 확인되면 테스트 시작 가능
  8. Test 를 모두 거쳐야 Cutover 가 가능함
  9. Lifecycle 단계를 모두 거쳐서 마이그레이션
  10. 마이그레이션 서버 정상 작동 확인
  11. 확인이 완료되면 finalize cutover - mark as archived 하여 마이그레이션 완료

 

[참고 링크]

https://honglab.tistory.com/150 ♥

 

https://docs.aws.amazon.com/ko_kr/mgn/latest/ug/what-is-application-migration-service.html

 

끝.