この記事は公開されてから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の一覧を取得してみました。
制限の上限に達して、一覧から棚卸ししたいような場合に活用頂ければと思います。