본문 바로가기

AWS/파워쉘로 배우는 AWS

#9 [Tag] 리소스에 태그를 달아보자

EC2 Instance(VM) 만들고 싶지만… 우리에겐 그보다 중요한 것이 있습니다. 바로 Tag라는 녀석입니다.

프로그래밍 때나 스크립트를 때에 가장 중요한 것이 바로 주석 입니다. 게시글을 때나 정보를 공유할 가장 중요한 것이 Tag지요. AWS 리소스를 제작할 때도 Tag 다는 것이 매우 중요합니다. 우리는 ID 분별하기엔 너무 어렵고 그룹을 지정하기도 어렵기 때문이죠.

그럼 간단하게(?) Tag다는 방법을 알아 봅시다.

 

우선, 리소스에 Tag 달려면, Tag 속성을 알아야 합니다.(복잡하게…) 그럼 확인해 보시죠.


PS> Get-EC2Vpc | Get-Member

 


 

 

PS> Get-EC2Subnet | Get-Member


 


 

확인 되시나요? Tag 속성이 String 아니라 System.Collections.Generic.List[Amazon.EC2.Model.Tag] 입니다. Object값을 지정하여야 된다는 소리입니다. 그럼 Tag 명령어를 조회해 볼까요?


PS> Get-Command *tag*


 


 

캡쳐가 한번에 안되네요. 이렇게 많은 Tag 관한 명령어들이 있습니다만… 불편한 진실이 있습니다.

  1. Tag 속성은 하나가 아니라 EC2, ELB, EFS 리소스마다 다를 있습니다.
  2. 어떤 리소스는 New-XXXTag이고 어떤 리소스는 Add-XXXTag 임으로 Command 확인해야 합니다.

AWS에서 저렇게 제공해주니 우리는 따를 밖에 없습니다.

우리가 Tag 곳은 [Amazon.EC2.Model.Tag]이니 New-EC2Tag 확인 해야겠죠? 만드는 방법은 가지인데, 예제를 보면서 설명 드리죠


PS> Get-Help New-EC2Tag -Examples


 


 

번째 예제를 보면 [Amazon.EC2.Model.Tag] Object 생성해서 변수로 값을 넘기는 모습을 보실 있습니다. 아주 명확하게 설정 됩니다만, shell 입력하기엔 불편하네요. 스크립트에서 쓰기엔 좋겠지만요.

 


 

번째 예제는 @{ } 구문으로 Object 변수화 시켜 값을 넘겨주고 있네요. 실제로 쓰기엔 방법이 편할 같습니다. 번째 예제는 번째 예제와 같은 이야기 입니다만, 여러 개의 Tag 한꺼번에 달고 있네요.

번째 예제는 Powershell 문법에 관한 이야기이니 생략하겠습니다. 번째 예제와 동일한 이야기 입니다.

 

우리는 여기서 번째 예제를 채택해 봅시다. VPC Name Tag 달아보죠. 먼저 VPC 리소스를 확인합니다.


PS> Get-EC2Vpc -VpcId vpc-21e2df44


 


 

Tags 비어있죠? 그럼 Tag 달아 보죠.


PS> New-EC2Tag -Resource vpc-21e2df44 -Tag @{ Key= "Name"; Value= "Example VPC"}

PS> Get-EC2Vpc -VpcId vpc-21e2df44

PS> (Get-EC2Vpc -VpcId vpc-21e2df44).Tag


 


 

Name Tag 확실하게 입력이 되었습니다. Consol에서 확인해 보면 다음과 같이 나옵니다.

 

 

나오죠? 우리가 AWS에서 Tag 사용하는 이유는 가지 입니다.

  1. 리소스를 알아보기 쉽게 하기 위해 (구분하기 위해)
  2. 리소스를 그룹화 하기 위해

이해를 쉽게 하기 위해 다음과 같이 태그를 달아두었습니다.


PS> Get-EC2Tag


 


 

지금까지 만든 VPC부터 InternetGateway까지 전부 Name 태그와 함께 Key 값으로 Example 삽입하였습니다. 이런 식으로 설정하게 되면 다음과 같이 리소스를 모아서 보는 것이 가능해 집니다.


PS> Get-EC2Tag -Filter @{Name='key'; Values='Example'}


 

 

 

Cmdlet where절을 사용해서도 같은 결과를 얻을 있습니다.


PS> Get-EC2Tag | where { $_.Key -eq "Example" }


 


 

Powershell 사용자라면 아래에서 사용한 where 사용을 추천합니다. 왜냐하면 Filter Name 값이 실제 출력되는 값과 다르기 때문입니다. 일단 아래 표로 값을 Mapping 시켜드리겠습니다. 대소문자도 주의하셔야 합니다.

 

Powershell

Tag Name

Key

key

ResourceId

resource-id

ResourceType

resource-type

Value

value

 

목적에 의해서 열심히 Tag 달아 두시면, 나중에 리소스 검색 시에 손쉽게 검색이 가능하니 우리 모두 태그를 생활화 합시다.

 

참고자료 : http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/Using_Tags.html

   http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-tags.html