가끔, Golden Image를 확보하지 않은 Instance의 HostOS 장애와 같은 이유로 해당 Instance의 AMI를 이용하여
다시 Launch해야 하는 경우가 있습니다. 이 때, Root volume이 아닌 다른 모든 유형의 추가 Volume에 대해서는
AMI를 이용하여 Instance를 Launch하는 과정에서 다른 Snapshot으로 교체할 수 있지만,
Root Volume의 경우에는 불가능합니다...(그럼 Root Volume에 변경된 데이터는 어떡해?!!)
사실 이러한 이유로 하나의 정형화된 이미지(Golden Image)가 굉장히 중요합니다.
그러나, Golden Image가 확보가 되지 않았다 하더라도.. 만약 고객사의 Instance라면.. 어떻게든 살려내야죠..(굽신굽신..)
그래서 준비했습니다. EBS Root volume 교체방법!!
아래 내용들을 천천히 따라하시면 비록 손은 많이 가지만, 그래도 불가능한 일은 아니라는거!!
천천히 따라해주세요!!
1. Create New Instance
- EC2 Instance를 만들 때 기본적으로 Root Volume에 대해서는 Delete on Termination속성이 True이고,
다른 모든 유형의 추가 Volume에 대해서는 False입니다. 따라서, Default속성으로 Launch한 Instance를
Terminate하게 되면 Root 볼륨도 함께 삭제됩니다. 아래의 사진은 Default속성을 보여줍니다.
- EBS Root Volume 및 다른 모든 유형의 Volume을 재사용하고자 하면(Ex. Host OS 장애...) Instance를 Launch할 때, 해당 Delete on Termination 속성을 체크해제(False)해야 합니다.
- 만약, 이미 실행중인 Instance(Live Service Instance)에 부착된 EBS Volume의 Delete on Termination 속성을
수정하고자 하면 AWS CLI를 사용해야합니다. - 아래에서 진행할 내용은 AWS CLI for Windows를 설치하여 진행합니다. 만약 AWS CLI for Linux에 대한 도움말이
필요하면 이 곳을 참조하십시오.
2. AWS CLI 설치
2.1 사전 조건
Windows에 AWS CLI 버전 2를 설치하거나 업데이트하기 전에 다음 사항을 확인하십시오.
- Windows XP 이상의 64비트 버전
- 소프트웨어 설치 관리자 권한
2.2 AWS CLI Version2 Download
- EBS Volume의 속성을 바꿀 EC2 Instance에서 AWS CLI를 설치하여 진행해도 되지만 여기서는
Local PC에서 다음 과정을 수행합니다. - 최신 버전의 AWS CLI의 경우: https://awscli.amazonaws.com/AWSCLIV2.msi
- 특정 버전의 AWS CLI의 경우: 파일 이름에 하이픈과 버전 번호를 추가합니다. 이 예시의 경우 버전 2.0.30의
파일 이름은 AWSCLIV2-2.0.30.msi이 되어 https://awscli.amazonaws.com/AWSCLIV2-2.0.30.msi 링크가 됩니다.
버전 목록은 GitHub에서 AWS CLI 버전 2 changelog를 참조하세요. - MSI 설치 관리자를 실행하고 화면의 지침을 따릅니다. AWS CLI의 Default Path는
C:\Program Files\Amazon\AWSCLIV2에 설치됩니다. - 설치 후 확인하려면 시작메뉴를 열고, CMD를 검색하여 명령 프롬프트창에서 aws --version 명령을 사용합니다.
C:\> aws --version
aws-cli/2.0.47 Python/3.7.4 Windows/10 botocore/2.0.0
3. AWS CLI Configure
- 다음과 같은 명령어를 사용하여 자격증명을 입력합니다.
예제에 입력된 자격증명에 포함된 권한(Policies)은 EC2FullAccess를 부착(Attach) 했습니다.
C:\> aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: ap-northeast-2
Default output format [None]: json
4. EBS Root Volume의 속성 변경
4.1 기존 사용중인 EBS의 정보 및 Instance ID 확인
- AWS WEB Console – EC2 – Instance – Instance 선택 – 세부속성정보 – device 정보확인
- AWS WEB Console – EC2 – Instance – 세부속성정보 – Ex.) i-1a2b3c4d5e6f7g
4.2 Local PC의 CMD창에서 EBS Volume의 속성 변경
- CMD 명령 프롬프트창에서 다음과 같은 명령어를 실행합니다.
aws ec2 modify-instance-attribute --instance-id INSTANCE_ID --block-device-mappings "[{\"DeviceName\": \"/dev/sda1\",\"Ebs\":{\"DeleteOnTermination\":false}}]"
4.3 AWS WEB Console에서 EBS Volume의 속성변경 확인.
이렇게 EBS의 Delete on Termination 속성이 False인 Volume은 해당 Instance를 삭제하더라도
해당 Volume이 삭제되지 않습니다.
5. EBS Root volume 교체
5.1 AMI를 이용하여 Instance Launch
- AWS Web Console - EC2 - AMIs 에서 기존 Instance의 AMI를 선택하여 Launch.
- AMI를 이용하여 Instance를 새로 Launch 할 때에는 기존의 Instance와 동일한 Type,
VPC, Subnet, IAM Role, PrivateIP, SG 등을 기록하여 작업해줍니다. - 필요에 따라서 해당 Instance의 종료방지기능(Termination Protection)기능을 Enable 해줍니다.(인재방지)
- 위에서 말씀 드린 것 처럼 Root volume은 Launch 과정에서 Snapshot을 변경할 수 없습니다.
따라서, 우선 Instance를 Launch 한 이후에, Stopped(중지) 상태에서 Root volume을 교체합니다.
5.2 EBS Root volume detach and attach
- Instance Launch 작업이 끝났다면, 해당 Instance를 Stopped(중지) 상태로 전환합니다.
- 이 후, 해당 Instance에 연결된 EBS Root volume을 detach 합니다.
- 이제 마지막으로!! AWS CLI를 이용하여 Delete on Termination 속성이 False로 변경 된 Volume을
Attach 해줍니다. 이 때, 기존의 Drive Path(Ex./dev/sda1)와 동일하게 설정합니다.
또한, Attach한 후에는 기존 Instance는 Terminate(종료) 합니다.
이렇게까지 작업을 한다면, 정상적으로 EBS Root volume의 교체가 이루어지게 됩니다..!!!
사실 가장 좋은것은 하나의 정형화된 이미지(Golden Image)를 확보하여 AMI를 이용하여 Instance를
Launch 할 때, Root Volume을 Detach, Attach 할 필요 없도록 하는것이 가장 Best입니다.
즉, 초기 디자인을 잘 해야하죠.
초기 디자인을 잘못한다면 이처럼 불필요한 작업을 해야하고, 이러한 작업은 곧 엔지니어의 피로도로 이어집니다.
또한, 중요한것은 사람이 해야하는 작업이 늘어남에 따라, 인적요소가 2차,3차 장애의 원인이 될 수도 있겠습니다.
혹시, 이것보다 더 좋은 방법이나 궁금하신 사항 있으시다면 언제든 댓글 남겨주세요 ^^
'AWS > EC2' 카테고리의 다른 글
Private EC2 접속 방법 (2) - Pem 파일 변환 및 PuTTY 설정 (0) | 2021.03.29 |
---|---|
Private EC2 접속 방법 (1) - Bastion EC2 생성 (1) | 2021.03.29 |
Compute Optimizer를 사용하여 비용 최적화하기 (0) | 2021.02.14 |
EC2(Linux) 사용자 별 .pem 파일 생성하기 및 ec2-user 비활성화 (3) | 2021.02.04 |
[AWS] Bastion Instance를 NAT Instance(Gateway)로도 써보자! (0) | 2020.11.17 |