概要
AWS CLIのcloud watchのコマンドを用いて、Lmabda関数を指定し、当該関数の指定時間あたりの実行回数を取得してみる。
前提
条件
- AWS CLIが導入済みであること
- AWS CLIにAWSアカウントの認証情報が登録されていること
状態
筆者はserverlessを用いてGET hello world で200が返るAPI GatewayとLambda関数を用意した。
方法
下記を実行する。
aws cloudwatch get-metric-statistics \
--namespace AWS/Lambda \
--metric-name Invocations \
--dimensions Name=FunctionName,Value=対象のLambda関数名 \
--start-time $(date -u -v-1H +%Y-%m-%dT%H:%M:%SZ) \
--end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
--period 3600 \
--statistics Sum \
--profile 個人のプロファイル名(特に設定した覚えがない場合は`default`でOK)
下記の様に「Sum」の部分に指定時間あたりの実行回数が表示される。
{
"Label": "Invocations",
"Datapoints": [
{
"Timestamp": "2026-04-01T13:37:00+09:00",
"Sum": 10.0,
"Unit": "Count"
}
]
}
CLIコマンドの解説
-
aws cloudwatch get-metric-statistics:「aws cliにてCloudWatchの操作を操作をします。CloudWatch内部での操作はメトリクス統計取得です。」という命令 -
--namespace AWS/Lambda:対象となるAWSのサービスを指定(今回はLambdaを指定) -
--metric-name Invocations:対象となるメトリクスの区分を指定(今回はInvocationsで"実行回数"を指定、その他にはError"エラー数"やDuration"実行時間"等がある) -
--dimensions Name=FunctionName,Value=対象のLambda関数名:対象のLambdaの指定(Name=FunctionNameでLambda関数名にて指定することを設定し、Value=で実際の関数名を指定、残念ながらワイルドカード指定はできない) -
--start-time $(date -u -v-1H +%Y-%m-%dT%H:%M:%SZ):取得開始時間の指定※1($(date -u -v-1H +%Y-%m-%dT%H:%M:%SZ)は「今から1時間前」) -
--end-time $(date -u +%Y-%m-%dT%H:%M:%SZ):取得終了時間の指定($(date -u +%Y-%m-%dT%H:%M:%SZ)は「今の時間」) -
--period 3600:集計時間の粒度※2、秒単位(3600の場合、1時間単位) -
--statistics Sum:集計方法の指定(Sumは合計、他にはAverage"平均"やMax"最大"、Mix"最小"がある)
特定の文字列を含むLmabda関数名とランタイムで絞り込み、個々に実行回数を出したい場合は下記のようになる。
aws lambda list-functions --profile default \
--query 'Functions[?Runtime==`nodejs20.x`].FunctionName' \
--output text | tr '\t' '\n' | grep "絞り込みたい文字列" | while read func; do
echo "=== $func ==="
aws cloudwatch get-metric-statistics \
--namespace AWS/Lambda \
--metric-name Invocations \
--dimensions Name=FunctionName,Value=$func \
--start-time $(date -u -v-1H +%Y-%m-%dT%H:%M:%SZ) \
--end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
--period 3600 \
--statistics Sum \
--profile default
done
上記の結果でDatapointsが空の配列で返る事がある。これは対象期間中に当該のLambdaの実行がなくメトリクスがヒットしなかった状態。
※1・・・-v-1Hとしている部分で現在時刻から1時間前を表現している。-v-1Hの他に-v-1d"1日前"、-v-1m"1か月前"、-v-1y"1年前"などもある。ちなみに開始時間、終了時間はIOS 8601形式ならテキスト指定も可能(末尾のZはUTC指定を意味するのでJSTから-9時間する必要がある)
※2・・・今回は取得時間のレンジが1時間、--periodが3600(1時間)なのでSumの結果が1個出力される。今回は取得時間のレンジが1時間、--periodが1800(0.5時間)の場合はSumの結果がレンジ内で0.5時間ごとに分けて表示される。