EC2を使っていて、動作が重いなーって感じた時にCPUクレジットの状況を確認することがあります。AWSのコンソールにログインしたら見れはするのですが2要素認証も使っていてやや面倒なので、boto3で確認する方法を調べました。
(※ 個人利用しているAWSの話です。普段jupyterlabで触っていて何かしらの作業をインタラクティブに行っています。業務におけるWebサービスの運用等であればそのインスタンスにログインするのもコンソールに入るのも手間は変わらないと思います。)
僕がクラウドウォッチに詳しくなくて、あまり詳細な説明ができないというのもあるのですが、いろいろ試した結果、以下のコードで取得できることが確認できたのでそのまま掲載します。
import boto3
import requests
import datetime
# EC2メタデータからインスタンスIDを取得
def get_instance_id():
url = "http://169.254.169.254/latest/meta-data/instance-id"
response = requests.get(url)
return response.text
# インスタンスIDを取得
instance_id = get_instance_id()
# CloudWatch クライアントを作成
cloudwatch = boto3.client('cloudwatch')
# 現在の UTC 時刻を取得
end_time = datetime.datetime.utcnow()
# 過去 5 分間のデータを取得
start_time = end_time - datetime.timedelta(minutes=5)
# CPUCreditBalance メトリクスを取得
response = cloudwatch.get_metric_statistics(
Namespace='AWS/EC2',
MetricName='CPUCreditBalance',
Dimensions=[
{
'Name': 'InstanceId',
'Value': instance_id
},
],
StartTime=start_time,
EndTime=end_time,
Period=300, # 5 分間隔
Statistics=['Average']
)
# データポイントを取得
data_points = response['Datapoints']
if data_points:
# 最新のデータポイントを取得
cpu_credit_balance = data_points[0]['Average']
print(f'インスタンスID: {instance_id}')
print(f'CPUクレジット残高: {cpu_credit_balance}')
else:
print('CPUクレジット残高のデータが見つかりませんでした。')
これで現在のCPUクレジット残高が取得できます。
CPUクレジッド残高はインスタンスサイズによって初期値や上限値が異なるので、別途最大値を確認しておくと参考になると思います。
参考: バーストパフォーマンスインスタンスに関する主要な概念 – Amazon Elastic Compute Cloud