Python標準モジュールのurllibを使う練習で、EC2のインスタンスメタデータにアクセスしてみました。
検証環境
[ec2-user@ip-192-168-1-152 ~]$ cat /etc/*release NAME="Amazon Linux" VERSION="2" ID="amzn" ID_LIKE="centos rhel fedora" VERSION_ID="2" PRETTY_NAME="Amazon Linux 2" ANSI_COLOR="0;33" CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2" HOME_URL="https://amazonlinux.com/" Amazon Linux release 2 (Karoo) [ec2-user@ip-192-168-1-152 ~]$ python3 --version Python 3.7.10
ソース
文字列で返ってくるケース
# get_metadata.py import urllib.request if __name__ == '__main__': url = "http://169.254.169.254/latest/meta-data/hostname" try: with urllib.request.urlopen(url) as res: body = res.read().decode("utf-8") print(body) except: import traceback traceback.print_exc()
JSONで返ってくるケース
import urllib.request import json if __name__ == '__main__': url = "http://169.254.169.254/latest/dynamic/instance-identity/document/" try: with urllib.request.urlopen(url) as res: body = res.read().decode("utf-8") dict = json.loads(body) print(dict['instanceType']) except: import traceback traceback.print_exc()
実行結果
文字列で返ってくるケース
[ec2-user@ip-192-168-1-152 metadata_urllib]$ python3 get_metadata.py ip-192-168-1-152.ap-northeast-1.compute.internal
JSONで返ってくるケース
[ec2-user@ip-192-168-1-152 metadata_urllib]$ python3 get_metadata.py t4g.micro