Amazon Elastic Block Store (EBS)는 Amazon EC2 인스턴스에 대한 저장 공간을 제공하는 서비스입니다. EBS는 EC2 인스턴스의 모든 볼륨이 실행되는 곳입니다. 중요한 인프라를 실행하는 서비스에 의존하는 경우 데이터를 백업하는 것이 현명합니다. 이 블로그 포스트에서는 PowerShell 스크립팅 언어를 사용하여 EC2 스냅샷을 관리하고 자동화하는 방법에 대해 알아보십시오.
EC2 인스턴스에 연결된 각 EBS 볼륨은 EBS 스냅샷을 통해 백업할 수 있습니다. 각 스냅샷은 전체 또는 증분 스냅샷 중 하나의 방법으로 생성할 수 있습니다. 기술적으로는 둘 다지만.. 이건 그냥 따라오세요.
EC2 인스턴스에 대한 첫 번째 스냅샷 백업을 생성할 때 전체 볼륨의 백업이 생성됩니다. 이후의 스냅샷이 생성될 때는 마지막 스냅샷 이후에 변경된 블록 수준의 데이터만 저장됩니다. 그러나 일반적인 증분 포인트인 타임 백업과 달리 스냅샷은 연결될 수 있으므로 스냅샷을 복원할 때 해당 볼륨의 모든 데이터가 복원되어 전체 백업과 유사하게 됩니다.
스냅샷은 비동기적으로 발생할 수 있으며, 스냅샷이 시작되면 필요한 모든 블록이 Amazon S3로 복사될 때까지 대기 중인 상태가 됩니다. 모든 EBS 스냅샷이 저장되는 곳입니다.
PowerShell을 사용하여 AWS EC2 스냅샷 생성하기
AWS는 EBS 스냅샷을 관리할 수 있는 몇 가지 다른 방법을 제공합니다. AWS Management Console, AWS CLI, PowerShell 또는 필요한 경우 직접적으로 API를 사용할 수 있습니다. 이 기사에서는 AWSPowerShell 모듈이 PowerShell 명령어로 EBS 스냅샷을 관리하는 데 훌륭한 지원을 제공하기 때문에 PowerShell을 사용하겠습니다.
전제 조건
우리가 너무 멀리 가기 전에, 이 튜토리얼에서 최대한 활용하기 위해 몇 가지 전제 조건이 있다고 가정하겠습니다. 다음이 필요합니다:
- AWS 계정
- 연결된 볼륨이 있는 EC2 인스턴스
- 루트 사용자 또는 CreateSnapshot 권한 (arn:aws:ec2:region::snapshot/*)이 있는 IAM 사용자로 인증됨
이러한 모든 전제 조건을 충족했다면, 준비된 상태입니다!
기존 EC2 스냅샷 찾기
첫 번째 작업 중 하나는 이미 기존 스냅샷이 있는지 확인하는 것입니다. 이를 위해 Get-EC2Snapshot
명령을 사용합니다. 이 명령은 이미 생성된 스냅샷을 검색하고 PowerShell 콘솔에 출력합니다.
그러나 AWS EC2 스냅샷이 EC2 인스턴스용이 아님을 알 수 있습니다. 이는 모두 다른 사람들과 공유되어 EC2 인스턴스로 복원할 수 있는 스냅샷입니다. EC2 인스턴스에서 가져온 모든 스냅샷을 확인하려면 OwnerId
매개변수에 self
값을 사용하십시오.
새 EBS 스냅샷 생성
이미 EC2 인스턴스가 생성되어 있다고 가정하고, 이제 스냅샷을 생성할 수 있습니다. New-EC2Snapshot
명령을 사용하여 새로운 스냅샷을 생성할 수 있지만, 우선 스냅샷을 찍고자하는 각 볼륨의 볼륨 ID를 수집해야 합니다. 이를 위해 먼저 해당 볼륨이 연결된 EC2 인스턴스 ID를 찾아야 합니다.
EC2 인스턴스 ID를 알면 해당 인스턴스에서 볼륨을 찾기 위해 이를 사용해야 합니다. EC2 인스턴스에 연결된 모든 볼륨을 찾으려면 Get-EC2Volume
명령을 사용하고, 출력을 필터링하여 찾고자 하는 인스턴스 ID와 연결된 볼륨만 표시하면 됩니다.
이제 볼륨을 갖게 되었으므로, AWS는 인스턴스를 종료하거나 적어도 볼륨을 마운트 해제하는 것을 권장합니다. 우리는 인스턴스를 종료하겠습니다.
이제 각 볼륨을 순환하고 해당 볼륨의 ID를 New-EC2Snapshot
명령의 VolumeId
매개변수로 전달할 수 있습니다. 이렇게 하면 스냅샷이 pending 상태로 전환되는 것을 알 수 있습니다.
스냅샷이 완료되었는지 확인하려면 Get-EC2Snapshot
을 다시 실행하고 State가 이제 completed인지 확인하면 됩니다.
태그 지정
많은 스냅샷을 관리해야 할 경우, 모든 스냅샷을 정리하기는 어려울 수 있습니다. 각 스냅샷을 정렬하고 분류하기 위해 태그를 지정할 수도 있습니다. 태그는 EC2의 일부이며 EBS 스냅샷에 대해 사용할 수 있습니다.
스냅샷 생성 시 또는 이후에 태그를 지정할 수 있습니다. 스냅샷 생성 시 태그를 지정하려면 New-EC2Snapshot
의 TagSpecification
매개변수를 사용하면 됩니다.
예를 들어, 아마도 제가 프로덕션 변경 전에 찍은 이 AWS EC2 스냅샷에 태그를 달고 싶을 것입니다. Stage이라는 태그를 만들고 Dev로 설정하고 싶습니다. 이를 위해 TagSpecification 객체를 생성하고 Tags 속성에 하나 이상의 Tag 객체를 할당하고 이 태그가 첨부될 리소스 유형을 정의할 수 있습니다.
TagSpecification 객체를 생성한 후에는 그것을 New-EC2Snapshot
에 전달할 수 있습니다.
스냅샷에서 새 AMI 생성하기
스냅샷의 멋진 기능 중 하나는 스냅샷에서 새로운 이미지(AMI)를 만들 수 있다는 것입니다. Linux 전용 EC2 인스턴스의 루트 볼륨의 스냅샷이 있다면, 해당 볼륨 스냅샷에서 새로운 AMI를 쉽게 만들 수 있습니다. 방금 생성한 스냅샷에서 새 이미지를 만들고 싶다고 가정해 봅시다. New-EC2Image
명령을 사용하여 그렇게 할 수 있습니다.
I’ll first need to capture the snapshot ID.
다음으로, 그 ID를 New-EC2Image
의 BlockDeviceMapping
매개변수에 해시 테이블로 전달할 수 있습니다.
AWS EC2 스냅샷 제거하기
스냅샷을 사용 완료했다면, 이제 제거할 수 있습니다. 간단히 Get-EC2Snapshot
으로 반환된 인스턴스를 Remove-EC2Snapshot
에 파이핑하면 됩니다. 그러나 AMI가 사용 중인 경우에는 다음과 같은 오류가 발생할 수 있습니다.
이 경우 AMI가 등록되어 있으며 Unregister-EC2Image
명령을 사용하여 먼저 등록 해제해야 합니다.
요약
PowerShell를 사용하면 EBS 스냅샷의 모든 측면을 관리할 수 있습니다. 여기에서 다룬 시나리오가 필요한 작업과 일치하지 않는다면, Get-Command -Noun *ec2snapshot* -Module AWSPowerShell
를 실행하여 사용 가능한 EC2 스냅샷 명령을 확인하는 것을 제안합니다. 이를 통해 PowerShell과 EC2 (EBS) 스냅샷으로 어떤 작업이 가능한지 좋은 아이디어를 얻을 수 있습니다.