Google Cloud Platform(GCP) 의 모든 인스턴스는 Metadata 서버의 Metadata 를 저장하고 있다. 사용자는 인스턴스와 Compute Engine API로부터 간단한 프로그래밍으로 이 Metadata 서버를 조회할 수 있다. 이를 통해 인스턴스의 호스트 이름, 인스턴스 ID, startup 과 shutdown 스크립트, 사용자 metadata, 서버 계정 정보와 같은 인스턴스에 대한 정보를 조회할 수 있다.
Metadata 서버에 접속하기 위해서는 URL ” http://metadata.google.internal/computeMetadata/v1/ “에 조회하면 된다.
준비사항
- instance에 대해서는 VM instances 문서 참조
- 문서의 명령어를 실행하길 원한다면 다음을 준비해야 한다.
- gcloud command-line tool 설치 한다.
- default region 과 zone 셋팅한다.
- API 사용을 위해서는 API access를 셋팅한다.
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개의 생각