⌚️

AWS SDK for Python (Boto3) で EC2 の CPU 使用率を取得する方法

2021/04/16に公開

Boto3 で CloudWatch メトリクスを呼び出して、EC2 インスタンスが自分自身の CPU 使用率を取得する方法のメモとなります。

準備

  • CloudWatch の読み取り権限を含む IAM ロールを用意して EC2 に与えておきます
    • IAM ロールを使うのでアクセスキーは不要となりセキュアです
  • CPU 使用率を取得したい EC2 には CloudWatchAgent をインストールしておきます

コード

main.py というファイルを作成し、記述します。
boto3 等、必要なモジュールは pip でインストールしておきましょう。

import boto3
import requests
import datetime
import dateutil.tz

region = requests.get('http://169.254.169.254/latest/meta-data/local-hostname').text.split('.')[1]
instance_id = requests.get('http://169.254.169.254/latest/meta-data/instance-id').text

client = boto3.client("cloudwatch", region_name=region)

response = client.get_metric_statistics(
        Namespace='AWS/EC2',
        MetricName='CPUUtilization',
        Dimensions=[
          {
            'Name': 'InstanceId',
            'Value': instance_id
          },
        ],
        StartTime=datetime.datetime.utcnow() - datetime.timedelta(seconds=600),
        EndTime=datetime.datetime.utcnow(),
        Period=300,
        Statistics=['Average']
)

for res in response['Messages']:
  if 'Body' in res:
    print(res['Body'])

出力結果は次のようになります。

$ python3 main.py

メトリクスを変えれば他の値の取得にも活用です。

Discussion