본문 바로가기

AWS/파워쉘로 배우는 AWS

#11 [EC2] EC2 Image! AMI를 검색해 보자 (1/2)

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인데요.

  1. Paravirtual(PV) 가상화입니다. Linux 계열 OS 가능하며, Hypervisor 비슷한 레벨에서 실행되며, 커널을 체인 로드 하는 형식으로 EC2 지원하는 형식입니다. 이전에 가상화 기술이 아직 숙달되지 않았을 성능이 뛰어나다는 이유로 많이 사용하였습니다.
  2. 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