管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

urllibを使ってインスタンスメタデータにアクセスする

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

参考にしました

qiita.com
note.nkmk.me