[GCP Tip] Metadata of Instance

Google Cloud Platform(GCP) 의 모든 인스턴스는 Metadata 서버의 Metadata 를 저장하고 있다. 사용자는 인스턴스와 Compute Engine API로부터 간단한 프로그래밍으로 이 Metadata 서버를 조회할 수 있다. 이를 통해 인스턴스의 호스트 이름, 인스턴스 ID, startup 과 shutdown 스크립트, 사용자 metadata, 서버 계정 정보와 같은 인스턴스에 대한 정보를 조회할 수 있다.

Metadata 서버에 접속하기 위해서는 URL ” http://metadata.google.internal/computeMetadata/v1/ “에 조회하면 된다.

준비사항


Project and instance metadata

Metadata 는 project 와 instance 레벨에서 제공된다.
Project 레벨 metadata는 project 의 모든 인스턴스들에 대한 내용을 가지고 있으며,
instance 레벨의 metadata 는 오직 그 instance 만의 정보를 가지고 있다.

Default metadata keys

자주 사용할 Metadata 들을 알아보자.

project 의 default metadata

Metadata Entry 설명
attributes/sshKeys 이 project 에서 인스턴스에 접속할 수 있는 SSH key 들
project-id project ID

instance 의 default metadata

Metadata Entry 설명
disks/ 이 인스턴스에 연결된 디스크들의 디렉토리
hostname 이 인스턴스의 hostname
machine-type 이 인스턴스의 fully-qualified machine type 이름
network-interfaces/<index>/access-configs/<index>/external-ip 이 인스턴스에 할당된 external IP 주소
scheduling/preemptible 이 인스턴스의 preemptible 설정. TRUE 이면, 이 인스턴스는 preemptible VM 이다. 이 값은 인스턴스 생성시에 설정되고 변경할 수 없다.
service-accounts/ 이 인스턴스에 연관된 service account 들의 디렉토리
tags 이 인스턴스에 연관된 모든 tag 들
zone 이 인스턴스의 zone

metadata 가져오기

<주의> 메타데이타를 쿼리할 때, 모든 요청에 다음과 같은 헤더가 함께 포함되어야만 한다.

Metadata-Flavor: Google

Metadata 를 가져오기 위해서는 instance 에 접속해서 curl 명령어를 사용하면 된다.

sjyun@myinst-sjyun:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/" -H "Metadata-Flavor: Google"
0/
1/
2/
sjyun@myinst-sjyun:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags" -H "Metadata-Flavor: Google"
["crate-admin"]
sjyun@myinst-sjyun:~$
sjyun@myinst-sjyun:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip" -H "Metadata-Flavor: Google"
104.197.182.145
sjyun@myinst-sjyun:~$

metadata 재귀적 질의 (Recursively querying metadata)

sjyun@myinst-sjyun:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true" -H "Metadata-Flavor: Google"
[{"deviceName":"myinst-sjyun","index":0,"mode":"READ_WRITE","type":"PERSISTENT"},{"deviceName":"myinst-sjyun-disk-1","index":1,"mode":"READ_WRITE","type":"PERSISTENT-SSD"},{"deviceName":"myinst-sjyun-disk-2","index":2,"mode":"READ_WRITE","type":"PERSISTENT-SSD"}]
sjyun@myinst-sjyun:~$

metadata 재귀적 질의의 결과로는 JSON 형식이 기본 값이다. 만약 text 형식을 원한다면 쿼리 파라미터에 "alt=text" 를 추가하면 된다.

sjyun@myinst-sjyun:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true&alt=text" -H "Metadata-Flavor: Google"
0/device-name myinst-sjyun
0/index 0
0/mode READ_WRITE
0/type PERSISTENT
1/device-name myinst-sjyun-disk-1
1/index 1
1/mode READ_WRITE
1/type PERSISTENT-SSD
2/device-name myinst-sjyun-disk-2
2/index 2
2/mode READ_WRITE
2/type PERSISTENT-SSD
sjyun@myinst-sjyun:~$

활용

보다 자세한 내용은 Google Document 에서 확인하도록 하자.
일부 번역을 하면서 metadata 서버에서 제공하는 기본값을 어떻게 가져올 수 있는지를 알아봤는데, 이러한 기본값 외에 사용자가 직접 metadata 값을 지정할 수도 있다.
project 와 instance 의 metadata 정보들은 startup & shutdown 스크립트에서 매우 유용하게 사용될 수 있다.

어떻게 사용되는지 궁금하다면, GCP 콘솔의 Cloud Luncher 에서 원하는 솔루션을 찾아 실행 시킨 뒤 확인해 볼 수 있다.

  • startup script 위치 : /var/run/google.startup.script
  • startup script 의 실행 log : /var/log/startupscript.log

개발자가 아닌 시스템 엔지니어라면 프로그래밍에 그리 익숙하지는 않을 것이기에 실력 좋은 개발자들이 만들어 놓은 스크립트들을 확인해보는 것도 여러모로 도움이 될 것이다.


관련 문서

“[GCP Tip] Metadata of Instance” 글에 관한 1개의 생각

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: