EC2의 기본이 되는 AMI부터 알아봅시다. 왜 AMI부터 알아봐야 하나요? 라는 질문을 하는 분들이 계실 꺼라 생각하여 간단히 언급하자면, 우리가 물리 서버를 살 때에 서버를 구매하고, OS를 설치하고, Application을 구동시키지 않습니다.
서버를 구매할 때 가장 먼저 생각하는 것은 바로 Service, 그 후에 Service를 위한 Application, OS, 그리고 서버를 선택합니다. (PC 구매와는 다른 이야기 입니다.)
그렇다면 우리도 마찬가지로 AWS를 사용해야 하는 이유가 있을 것이고, 그 AWS 위에서 동작시킬 수 있는 컴퓨팅인 EC2(Elastic Compute Cloud)를 구동시킬 때 가장 먼저 고려해야 하는 것은 다름 아닌 OS입니다.
언제나 그랬듯이 이것저것 생각하기 전에 cmdlet을 먼저 실행해 봅시다.
PS> Get-EC2Image -ImageId ami-f0091d91
설명 전에 주의사항부터 말씀 드립니다. Get-EC2Image는 그냥 실행 시키시면 후회하실 것입니다. 왜냐하면, Powershell이 멈추기 때문이죠. 사실 멈춘다기보다 AWS에서 값을 가져온다 라고 생각 하는 것이 맞습니다만, 어마어마한 양의 AMI가 있기 때문에 불러오는 것 자체가 아주 오래 걸립니다. 의심하시는 분들이 있을까봐 제가 직접 실행해 봤습니다.
PS> (Get-EC2Image).count
보이십니까? 무려 4만여개의 공개된 AMI가 있고, 이 수치는 현재 시점이라는 것입니다. AWS에서 서비스하기 위해 만들어지는 AMI와 벤더사에서 지원하는 AMI들의 총 합이 4만여개가 넘습니다. 그리고 한가지 간과하신 분이 계실지 모르겠지만, 현재 실행된 cmdlet은 Oregon에서 동작하는 cmdlet 입니다. 다른 Region에는 고유 AMI가 존재하기 때문에 더 많을 수도, 적을 수도 있습니다. 여기서 Windows Server 2016이 나온다면? 더 늘어나겠죠 뭐…
이런저런 얘기가 있었지만, 언제나 하는 속성 파헤치기부터 해봅시다.
Architecture: AMI가 동작하는 환경입니다. 거의 모든 AMI가 x86_64일 것입니다.
BlockDeviceMappings: Root Device가 EBS라면, 해당 속성에 명시됩니다.
CreationDate: AMI가 만들어진 시각입니다.
Description: 표시 이름입니다.
Hypervisor: AMI가 적용되는 Hypervisor 입니다.
ImageId: AMI ID입니다.
ImageLocation: Image 위치입니다.
ImageOwnerAlias: AMI 제작자 입니다.
ImageType: AMI 타입입니다. 보통이 Machine Type 입니다.
KernelId: Kernel ID 입니다.
Name: AMI 이름입니다.
OwnerId: AMI 소유자 ID입니다.
Platform: 플랫폼 정보입니다.
ProductCodes: 제품 코드입니다.
Public: AMI 공개 여부입니다.
RamdiskId: RAM Disk ID 입니다.
RootDeviceName: Root Device 이름입니다.
RootDeviceType: Root Device 속성 입니다.
SriovNetSupport: SR-IOV 지원 속성 입니다.
State: 사용 가능 상태입니다.
StateReason: 상태 추적입니다.
Tags: Tag입니다.
VirtualizationType: 가상화 타입입니다. 전가상화, 반가상화와 같은 정보입니다.
역시나 중요한 정보에는 표시해 두었습니다. 표시된 내용들은 조금 유의 깊게 보셔야 합니다. 앞서 설명 드렸듯이 AMI의 개수는 어마어마하게 많기 때문에 Get-EC2Image를 사용할 시에는 될 수 있는 한 -Filter 속성 사용을 권장합니다. 그렇기에 Filter를 사용하시려면, AMI의 속성들을 알고 계셔야 원하는 AMI를 검색하실 수 있습니다.
가장 많이 사용하실 정보는 아무래도 Description 이겠습니다. 기본적으로 AMI의 표시 이름이 정의되어 있으며, OS속성, AMI버전, 제작 날짜 등의 정보를 함축적으로 표시해 줍니다. 그럼 Filter를 적용시켜 AMI를 검색해 봅시다.
PS> Get-EC2Image -Filter @{ name=
'description'; values= "*Amazon Linux*" }
어마어마하게 나오네요. 282개의 AMI가 나왔습니다. 이걸 다 찾아보기엔 어려움이 있네요. Amazon에서 제공하는 AMI로 검색범위를 줄여봅시다.
PS> Get-EC2Image -Filter @{ name= 'description'; values= "*Amazon Linux*" }, `
@{ name= 'owner-alias'; values= "amazon" }
역시 많네요. 205개의 AMI가 나왔습니다. 폭을 더 줄여볼까요? 반 가상화인 paravirtual을 제외하고 전 가상화인 hvm으로 검색해 봅시다.
PS> Get-EC2Image -Filter @{ name= 'description'; values= "*Amazon Linux*" }, `
@{ name= 'owner-alias'; values= "amazon" }, @{ name=
'virtualization-type'; values= "hvm" }
60개의 검색결과가 나왔습니다. 새로운 용어 먼저 설명하고 넘어가죠.
AWS에서 Virtualization Type은 총 두 가지입니다. paravirtual과 hvm인데요.
- Paravirtual(PV)은 반 가상화입니다. Linux 계열 OS만 가능하며, Hypervisor와 비슷한 레벨에서 실행되며, 커널을 체인 로드 하는 형식으로 EC2를 지원하는 형식입니다. 이전에 전 가상화 기술이 아직 숙달되지 않았을 시 성능이 뛰어나다는 이유로 많이 사용하였습니다.
- hvm은 전 가상화입니다. 전 가상화 기술이 많이 향상되어 현재는 물리 머신의 99% 이상 성능을 끌어내고 있어 더 이상 PV를 사용할 이유가 없어졌습니다. MBR과 Root Device의 완벽한 가상화로 공유하지 않는 모든 리소스를 Hypervisor와 완벽하게 분리시키고 제어할 수 있습니다. 모든 최신 Instance 유형은 hvm으로 되어 있습니다.
이로써 우리가 filter에 'virtualization-type을 지정 안 할 이유가 없어졌네요. 하지만, AWS Consol을 이용하지 않고 사용하시는 분들이라면 특정 AMI를 구매할 때에 꼭 AMI 설명서를 읽어 보시기 바랍니다. 어떤 제품은 PV만 지원하는 AMI를 지원하거든요. 구시대 유물입니다. 꼭 쓰셔야 한다면 꼼꼼하게 검토 후 사용하시기 바랍니다.
AWS marketplace: https://aws.amazon.com/marketplace
Filter를 최대한 걸었다고 생각 했는데도 60개나 나오니 출력물 중에 불필요한 정보를 제거해 봅시다. 우리가 필요한 건 AMI ID, Description, CreationDate, BlockDeviceMappings 정도만 있으면 될 것 같아요.
AMI ID는 EC2를 제작할 때 필요하고, Description은 AMI를 고를 때 필요하고, CreationDate는 AMI가 업데이트 되기 때문에 최신 버전을 사용하려면 필요하고, BlockDeviceMappings은 EBS를 Root Device로 사용하는지에 대한 여부를 확인해야 되기 때문입니다.
그럼 검색해 봅시다.
PS> Get-EC2Image -Filter @{ name= 'description'; values= "*Amazon Linux*" }, `
@{ name= 'owner-alias'; values= "amazon" }, @{ name= 'virtualization-type'; values= "hvm" } `
| Select-Object ImageId, Description, CreationDate, BlockDeviceMappings `
| Sort-Object CreationDate -Descending
점점 cmdlet 문장이 길어지네요. 이런 식으로 AMI를 검색하여 ImageId를 확인하실 수 있습니다.
다음 포스팅 에서는 검색된 AMI를 구별하는 방법과 고려사항에 대해서 이야기 해 보겠습니다.
참고자료 : http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/concepts.html
'AWS > 파워쉘로 배우는 AWS' 카테고리의 다른 글
#13 [EC2] Instance Type은 뭘까요? (0) | 2015.12.23 |
---|---|
#12 [EC2] EC2 Image! AMI를 검색해 보자 (2/2) (0) | 2015.12.23 |
[쉬어가기] VM 리소스 정의 (1) | 2015.12.22 |
#10 [EC2] Instance를 만들기 위한 준비물을 알아보자 (0) | 2015.12.22 |
#9 [Tag] 리소스에 태그를 달아보자 (0) | 2015.12.22 |