Lambda関数の同時実行予約数の一覧を取得してみた

アカウント内のLambda関数の名前と、同時実行予約数の一覧を表示するスクリプトを作りました。
2019.07.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、平野です。

Lambda関数に、同時実行数の予約をすることができます。 この数値(ReservedConcurrency)は、1アカウント毎にデフォルトで900までとなっています。

参照: 同時実行数の管理 (上限緩和のリクエスト方法などもこちらを参照してください。)

先日新しい関数をデプロイする際に、この上限に引っかかってしまいデプロイに失敗してしまいました。 無駄に大きく割り当てられている関数があるはずなので、それを調べようとしましたが、 素直に一発で一覧を取得できるようなCLIコマンドが見当たりませんでした。

ということで、非常に簡単ですがスクリプトを作成しました。

Pythonスクリプト

import boto3
lambda_client = boto3.client('lambda')

def get_function_names():
fuction_names = []
res = lambda_client.list_functions()
fuction_names.extend([f['FunctionName'] for f in res['Functions']])
while 'NextMarker' in res:
res = lambda_client.list_functions(Marker=res['NextMarker'])
fuction_names.extend(
[f['FunctionName'] for f in res['Functions']])
return fuction_names

for name in get_function_names():
reserved = "-"
function_data = lambda_client.get_function(FunctionName=name)
if 'Concurrency' in function_data and 'ReservedConcurrentExecutions' in function_data['Concurrency']:
reserved = str(
function_data['Concurrency']['ReservedConcurrentExecutions'])
print(name + "\t" + reserved)

実行例

関数名と設定された数値をタブ区切りで出力します。 ReservedConcurrencyの設定がないものについては-と出力します。

$ python list-reserved-concurrency.py
test_func_01 -
test_func_02 15
test_func_03 3
test_func_04 3
test_func_05 -

ポイント

ポイントというほどではないですが、 list_functionsメソッドでは上限50個の関数しか取得ができないため、 NextMarkerを指定して全件を取得しています。

マネジメントコンソールでの小さな注意点

上の画像はReservedConcurrencyにある値を設定した状態でのスクリーンショットです。 さて、設定されている値はいくつでしょうか???

正解は15です。 どうやら先頭の1しか見えないようです。(私の環境だけ??) マウスで選択したりするとちゃんと15と入っているが確認できます。

まとめ

aws lambda list-functionsでは取得できない ReservedConcurrencyの一覧を取得してみました。 制限の上限に達して、一覧から棚卸ししたいような場合に活用頂ければと思います。