どの Lambda 関数でどのくらいの予約された同時実行(concurrency)の設定を行ったか確認する方法

2023.03.20

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

こんにちは、アノテーションの及川です。

Lambda 関数における、フルアカウントの同時実行(Full account concurrency)と予約されていないアカウントの同時実行(Unreserved account concurrency)を管理しているときに以下のような事でお困りになったことはありませんか。

  • お困りごと
    • 「Lambda 関数を多く作りすぎて、どの Lambda 関数でどのくらいの予約された同時実行(concurrency)の設定を行ったか忘れて把握できていない」
    • 「マネジメントコンソールで 作成した Lambda 関数について、1 つずつクリックして設定内容を確認するのは面倒だ」

今回は上記のような、Lambda 関数を多く作りすぎて、どの Lambda 関数でどのくらいの予約された同時実行(concurrency)の設定を行ったか分からなくなった場合の対処方法の一例について紹介します。

対処方法の一例

AWS Lambda API の ListFunctions API と GetFunctionConcurrency API をうまく組み合わせることでどの Lambda 関数がどのくらいの予約された同時実行を設定されているか一気に確認することができます。

やってみた

AWS CLI による、ListFunctions(list-functions)と、GetFunctionConcurrency(get-function-concurrency)の出力結果をシェルスクリプトを介して組み合わせて、各 Lambda 関数がどのくらいの予約された同時実行を設定されているかを確認してみます。

また、ListFunctions(list-functions)と、GetFunctionConcurrency(get-function-concurrency)について、それぞれの出力内容などの簡単な説明を交えながら順を追って記載します。

ListFunctions(list-functions)

Lambda 関数のリストを返してくれます。

test1、test2、test3 といった名前の Lambda 関数が作成されている場合、ListFunctions(list-functions)を実行すると下記の例ような出力結果になります。

# list-functions の実行
$ aws lambda list-functions \
      --query "Functions[].FunctionName" \
      --output text

# 出力結果の例(「--query "Functions[].FunctionName"」および「--output text」オプションを付けて Lambda 関数名 をタブ区切りの文字列値として出力させています。)
test1 test2 test3

GetFunctionConcurrency(get-function-concurrency)

Lambda 関数において、予約済みである同時実行の数を返してくれます。

例えば、test1 において"3"、test2 において"0"の場合、下記の例のような出力結果になります。

# test1
$ aws lambda get-function-concurrency \
      --function-name test1 \
      --query "ReservedConcurrentExecutions"

# test1 出力結果の例(「--query "ReservedConcurrentExecutions"」オプションを付けて値のみ出力させています。)
3

# test2
$ aws lambda get-function-concurrency \
      --function-name test2 \
      --query "ReservedConcurrentExecutions"

# test2 出力結果の例(「--query "ReservedConcurrentExecutions"」オプションを付けて値のみ出力させています。)
null

2 つの API を組み合わせたシェルスクリプト(例)

下記で示すようなシェルスクリプトにより、どの Lambda 関数でどのくらいの予約された同時実行(concurrency)の設定を行ったか確認することが可能です。

# test.sh
# 予約済みである同時実行の数が 0 の場合"null"が返却されるので、"null"でない場合の結果のみを取得するようにしています。
# 最終的な実行結果を"rc_result.txt"に出力させています。
listFunction=$(aws lambda list-functions --query "Functions[].FunctionName" --output text)
for fucntion in $listFunction
do
  concurrency=$(aws lambda get-function-concurrency --function-name $fucntion --query "ReservedConcurrentExecutions")
  if [ "$concurrency" != "null" ];
    then
        echo "Lambda Function [$fucntion] uses Reserved concurrency ($concurrency concurrencies)" >> rc_result.txt
  fi
done

# test.sh の実行結果(例)-> 「$ cat rc_result.txt」で確認できます。
# test1: 同時実行 3
# test2: 同時実行 0
# test3: 同時実行 2
Lambda Function [test1] uses Reserved concurrency (3 concurrencies)
Lambda Function [test3] uses Reserved concurrency (2 concurrencies)

まとめ

本件のケースの場合は、上記内容を参考にしていただき、少しでも誰かのお役にたてば幸いです。

参考資料

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社 WEB サイトをご覧ください。