온프레미스 환경의 인프라를 AWS로 마이그레이션하기
기존에 레거시 시스템들은 대부분 IDC에 서버 장비를 두고 직접 하드웨어/소프트웨어를 운영하는 온프레미스 형태가 대부분이다.
지금은 클라우드 인프라 환경이 너무 좋아져서 시스템이 성장하면 할수록 마이그레이션 하는 추세다. 이게 단순하게 트렌드가 아니라 실제로 인프라를 운영하면서 온프레미스 환경보다는 클라우드 환경에서 더 안전하게 관리할 수 있고, 관리 포인트가 적어질 수 있고, 비용을 탄력적으로 사용하면서 좀 더 유연한 관리가 가능하게 됐다.
그리고 AWS MGN(Application Migration Service) 서비스를 이용하여 온프레미스 인프라에서 AWS로 마이그레이션 할 수 있다.
AWS는 정말 없는 게 없다.
MGN에서 제공하는 Agent만 온프레미스 서버에서 설치하면 알아서 서버의 CPU, 메모리와 같은 퍼포먼스 부분, 그리고 하드웨어, 운영체제 등 전체적인 서버 정보를 탐색하고 빠르고 안전하게 원본 상태 그대로 클라우드 인프라 환경으로 마이그레이션 해준다.
사전 조건 혹은 고려 사항
온프레미스 환경에서 AWS 클라우드로 트래픽 되는 네트워크 구성이 필요
필요한 네트워크 구성 조건을 살펴보면, 온프레미스 환경과 AWS 환경에서 1500 포트로의 통신, MGN 서비스 엔드포인트와 443 포트로의 통신 등 여러가지 네트워크 환경 구성이 필요하다.
데이터 복제의 경우에는 네트워크 속도가 중요
네트워크 속도가 느리거나, 사용하고 있는 볼륨 데이터가 큰 경우에는 굉장히 느릴 수 있다. 필자의 경우에는 거의 일주일이 걸렸다. 때문에, 일정에 맞춰 네트워크 속도를 조정해야 한다.
서비스를 시작하고 90일 동안은 무료, 그 이후에는 종량제 요금이 부과
데이터가 지속적으로 싱크되지 않음
데이터가 지속적으로 싱크되지 않아서 다운타임이 없는 실시간 마이그레이션은 어려울 수 있다.
에이전트 설치
에이전트용 IAM 임시 자격 증명 설정
온프레미스에 에이전트를 설치하기 위해서 필요한 IAM 임시 자격 증명을 생성한다.
IAM > Roles > Create role 메뉴에서 AWS account를 선택하고 다음 단계로 넘어간다.
에이전트를 설치할 수 있는 권한 정책(AWSApplicationMigrationAgentInstallationPolicy
)을 부여한다.
생성한 역할로 아래의 명령어를 이용하여 임시 자격 증명을 발급 받으면 된다.
> aws sts assume-role \
--role-arn arn:aws:iam::012345678910:role/mgn \
--role-session-name "mgn" > assume-role-output.txt
> cat assume-role-output.txt
{
"Credentials": {
"AccessKeyId": "ASIAQE3V4ZYDOUJCNN57",
"SecretAccessKey": "/8rIK0edz2RW7HvaZDEQXqG5ON/arbTkiBpN1LuN",
"SessionToken": "IQoJb3JpZ2luX2VjEA4aDmFwLW5vcnRoZWFzdC0yIkgwRgIhAMrBNl9JIaFeUK5LCUH/KVTxcir+2a7SXEM6A23WbSb0AiEA6irf0prPSars/swbhYPT5ooHAA03xe9RO3WBV5SVOrcqlAIIVxADGgwwMTA0NDc4MDE4NjIiDJgYSx811pL9F2cRWirxAQ3xFKGM5qeqyOwcLwdQLZCwAsGrLZ669hosvoH3z2gvmrHBiSoy+x5UzgdGV/1DhoV0LulAfpl6h1MfebBkm9IbbjqeusZYQXdvhQioNfArIdqaEyrebSzUfuBKkVHsZ1iZ/Q2KHDPn/a64OeTqhLeZELO8AUicLXaItIalhKFvOS3DM6TJBScPcHz6W5baQrgifcrAm65IeEQM2uSn9DwoFrYSGu9KJ+svxRb7me2anWSTHKBrpt6bc4gD+lpdm+zCl8x0ZoP4F/N+xKCznVchjXVpbuyHNqlN1szGmDdQMptyG1U/vWW3bOXxqLlYyQ4wp7+ApAY6nAEgm2EfEM59iZcEhmHZSuwB8JcjXMgy//ZVT/SKI/K5an6zqGHHS/Ux3EC76RSVmeCqpuWNHHPrRdAVbDyRY0XgJsWdV5TnY/Xu6DWNKBIGjaNduBRvsjWITsatDWSfkRcYc1QGOmrPrxci37DgdTt8r3zNjA/mt/H38IEEhPy2MZFwHg/K6cSWnriTuAKJdn1mhr4xDUgsjnt50is=",
"Expiration": "2023-06-07T07:11:51+00:00"
},
"AssumedRoleUser": {
"AssumedRoleId": "AROAQE3V4ZYDEIML532UC:mgn",
"Arn": "arn:aws:sts::012345678910:assumed-role/mgn/mgn"
}
}
에이전트 설치 및 실행
Applicaton Migration Service > Source servers > Add server 메뉴로 들어간다.
위에서 발급받은 IAM 임시 액세스 토큰을 넣어준다.
5번, 6번 순서대로 서버에서 명령어를 입력한다.
> sudo python3 aws-replication-installer-init.py \
--region ap-northeast-2 \
--aws-access-key-id ASIAQE3V4ZYDOUJCNN57 \
--aws-secret-access-key /8rIK0edz2RW7HvaZDEQXqG5ON/arbTkiBpN1LuN \
--aws-session-token IQoJb3JpZ2luX2VjEA4aDmFwLW5vcnRoZWFzdC0yIkgwRgIhAMrBNl9JIaFeUK5LCUH/KVTxcir+2a7SXEM6A23WbSb0AiEA6irf0prPSars/swbhYPT5ooHAA03xe9RO3WBV5SVOrcqlAIIVxADGgwwMTA0NDc4MDE4NjIiDJgYSx811pL9F2cRWirxAQ3xFKGM5qeqyOwcLwdQLZCwAsGrLZ669hosvoH3z2gvmrHBiSoy+x5UzgdGV/1DhoV0LulAfpl6h1MfebBkm9IbbjqeusZYQXdvhQioNfArIdqaEyrebSzUfuBKkVHsZ1iZ/Q2KHDPn/a64OeTqhLeZELO8AUicLXaItIalhKFvOS3DM6TJBScPcHz6W5baQrgifcrAm65IeEQM2uSn9DwoFrYSGu9KJ+svxRb7me2anWSTHKBrpt6bc4gD+lpdm+zCl8x0ZoP4F/N+xKCznVchjXVpbuyHNqlN1szGmDdQMptyG1U/vWW3bOXxqLlYyQ4wp7+ApAY6nAEgm2EfEM59iZcEhmHZSuwB8JcjXMgy//ZVT/SKI/K5an6zqGHHS/Ux3EC76RSVmeCqpuWNHHPrRdAVbDyRY0XgJsWdV5TnY/Xu6DWNKBIGjaNduBRvsjWITsatDWSfkRcYc1QGOmrPrxci37DgdTt8r3zNjA/mt/H38IEEhPy2MZFwHg/K6cSWnriTuAKJdn1mhr4xDUgsjnt50is= \
--user-provided-id mgn-instance \
--no-prompt
The installation of the AWS Replication Agent has started.
Identifying volumes for replication.
Identified volume for replication: /dev/nvme0n1 of size 8 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-6f825ce15efca467c.
You now have 1 active source server out of a total quota of 150.
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 콘솔에서 마이그레이션 대상 서버(소스 서버)가 추가된 것을 확인할 수 있다.
마이그레이션 작업
이제 본격적인 마이그레이션 작업을 시작한다.
소스 서버가 추가된 이후에 콘솔에서 확인해보면 데이터 복제의 현재 상태 및 정보, 라이프 사이클을 볼 수 있다.
EC2 > Instances 에서 확인해보면, Replication Server
도 추가되어 있다. 해당 서버에서는 소스 서버의 데이터를 복제하고, 마이그레이션 단계를 거치면서 테스트를 진행하게 된다.
Applicaton Migration Service > 생성한 소스 서버 > Launch settings 메뉴로 들어간다.
여기서는 말 그대로 최종적으로 마이그레이션 작업을 수행하면, 생성되는 인스턴스에 대한 설정을 할 수 있다.
Instance type right sizing
옵션은 에이전트에서 분석한 서버의 상태를 기준으로 AWS 환경에서 해당 서버를 띄웠을 때 적절한 인스턴스 타입을 자동으로 맞춰준다.
마이그레이션 후 생성될 인스턴스 타입을 직접 지정하고 싶으면 Edit 버튼을 클릭하여 옵션을 Off 하고, Launch Template
에서 인스턴스 타입을 변경한다.
원하는 인스턴스 타입을 지정 후에 Launch Template의 새로운 버전을 생성한다.
default 버전을 지정하여 인스턴스 타입을 지정한 새로운 버전이 사용될 수 있게 설정한다.
Applicaton Migration Service > 생성한 소스 서버 > Replication settings 메뉴로 들어간다.
해당 메뉴에서는 위에서 소스 서버를 생성한 뒤에 만들어 진 Replication Server 서버에 대한 설정이다. 특별한 경우 말고는 따로 설정할 건 없을 것 같다.
이제 MGN 라이프 사이클에 맞춰서 순서대로 단계를 진행하면 된다. 초기에 서버 등록 후에 데이터를 복제하는 시간이 지나면 Ready for testing
단계로 이동된다.
이제 Test and cutover > Testing > Launch test instances > Launch 메뉴를 클릭하여 인스턴스를 테스트 해주도록 한다.
테스트 단계가 완료되면, Test and cutover > Testing > Mark as "Ready for cutover" > Continue 메뉴를 클릭한다.
여기서 비용으로 인해 인스턴스 종료는 체크하고 진행한다.
이제 cutover
단계로 진입한다.
cutover 단계에서는 테스트 이후 그리고 최종적으로 서버 마이그레이션 완료 이전에 새로운 환경에서 데이터나 애플리케이션 등을 검증한다.
내용대로라면, 직접 인스턴스에 접속해서 애플리케이션도 실행해보고 데이터도 확인해보는 건줄 알았는데 그런건 아닌거 같다. (이 부분은 확인이 필요하다!)
Test and cutover > Cutover > Launch cutover instances > Launch 메뉴를 클릭한다.
마지막 단계로 Test and cutover > Cutover > Finalize cutover > Finalize 메뉴를 클릭한다.
마지막 단계가 완료되면, 실제로 온프레미스 환경에서 AWS 클라우드 인프라 환경으로 서버가 마이그레이션 되어 EC2 인스턴스 형태로 존재하게 된다.
완료가 되었음을 확인하고 다시 MGN 콘솔로 돌아가서, Actions > Mark as archived > Archive 메뉴를 클릭하여, 아카이빙 해준다.
이렇게 마이그레이션 작업이 완료됐다.
사전 작업 조건만 갖추어 AWS에서 제공하는 에이전트만 사용해서 이렇게 쉽게 마이그레이션 할 수 있다.