가끔 블럭 디바이스와 EC2, AMI와의 관계와의 내용이 명확하지 않아 이들 서비스간의 내용을 정리해 봅니다. 프로그래밍으로 따지자면 클래스와 객체정도로 비유 될수 있을텐데요, 이미지들을 테스트나 개발 계정에서 테스트하고 배포하기위하여 이미지를 프로모션하는 경우 이러한 관계를 명확히 하지않으면 인프라 코딩이 어려워 질수있다는 경험을 하였습니다.




AMI

AMI의 가장중요한 역할중 하나는 EC2 Instance를 생성하는 Base이미지 역할을 하는것이라고 할수 있습니다.


또한 이 AMI는 AWS로부터 제공되는 이미지를 사용할수있지만, 회사 조직내에서 미리 준비된 AMI를 생성할수도 있습니다. 이때 조직내에서 AMI를 생성하였다면 AMI는 어떤 Block디바이스(즉 디스크)와 마운트 될것인지 정보를 자체적으로 포함하고있기 있을겁니다. 이런 경우 지정된 Block디바이스(AMI에서 사용될 디스크)는 Snapshot으로 만들어져 보관되어 집니다. (이런경우 Snapshot을 지우려고 하는 경우 삭제할수 없다는 오류 메시지가 뜹니다.)


역으로 종종 Snapshot으로부터 AMI를 다른 계정에 생성해야하는 경우가 생기는데 이경우 복사하고자 하는 AMI가 어떤 블럭디바이스(Snapshot)를 사용하고 있는지 조사해서 해당 Snapshot도 복사(또는 공유)해줘야 합니다.


EC2

EC2인스턴스를 생성할때 반드시 하나이상의 블럭 디바이스를 지정해야하는데 Root디바이스는 필수이기 때문입니다. 그밖에 추가로 마운트될 디바이스를 지정하는 경우 추가로 Volume이 생성되기도 합니다.


이렇게 생성된 EC2인스턴스는 역으로 AMI를 생성해 둘수가 있는데 이때 사용되었던 Block디바이스가 있었다면 AMI에 자동으로 추가할 것인지 물어보지만, 원하지 않는경우 빼버리거나 블럭디바이스의 Encrypt옵션도 추가해서 저장할 수 있습니다.



Volume/Snapshot

볼륨은 현재 서버(EC2 인스턴스)에서 사용하고있는 디스크와도 같습니다. 이 디스크(편의상)는 특정시점에 Snapshot 형태로 분리하여 저장할수도 있고, 역으로 Snapshot으로부터 서버에서 사용할수 있(마운트가능한)는 형태의 디스크로 생성할 수도 있습니다.



Snapshot

이미 Snapshot에 대해 설명했지만, 흥미로운 점은 Snapshot으로 부터 AMI를 생성할 수도 있다는 겁니다. 일반적으로 EC2로부터 AMI를 생성하는 것이 여러면에서 쉽지만 종종 Snapshot으로 부터 AMI를 생성해야 하는 경우가 발생 할 수 있습니다.


그러면 EC2 인스턴스로부터 AMI를 생성하는 것과 Snapshot으로부터 AMI를 생성하는 경우 무엇이 다를까요?


EC2 인스턴스로부터 AMI를 생성하는 경우 위에서 이미 설명했지만, Snapshot으로부터 AMI를 생성하는 경우 지정된 Snapshot이 Root디바이스로(Volume)(만) 지정된다는 겁니다.


즉, EC2 인스턴스로부터 AMI를 생성하는 경우 이미 현재 EC2 인스턴스가 사용되고있는 디스크들을 찾아서 AMI로 만들것을 추천하지만 Snapshot으로부터 AMI를 생성하는 경우 그렇게까지는 해주지 않는 다는 차이점이 있습니다.


** Snapshot은 내부적으로 S3로 저장된다고 문서에서 설명하고 있습니다.실제로 블럭디바이스를 사용하지 않는 Volume형태로 남겨 두는 경우 개인 계정을 개설하는 경우 요금이 생각보다 저렴하지 않을수 있으므로 Snapshot형태로 저장하도록 합시다. 본인의 경우 개인계정에서 인프라코드를 통해서 EC2 서버를 계속생성하고 테스트후 삭제하였는데도 불구하고 요금이 엄청나온적이 있습니다. 주된 과금이유는 바로 이러한 Volume을 삭제하지않은채로 놔뒀기 때문이었습니다.

 



Posted by Steven J.S Min
,