🐥

スロットルされていないかを全Lambdaに対して確認するboto3スクリプト

2022/11/23に公開

他の検討でスロットルしてしまってLambdaが動かないことがあり、確認できるように作りました。

  • 全リージョンをec2のdescribe_regionsで受け取る
  • リージョンごとに全関数をlist_functionsで取り出す
    • 一度に50までしか表示できない。NextMarkerがある場合は続きがあるので追加でlist_functionsする
  • get_function_concurrencyでReservedConcurrentExecutionsがあるか調べる。設定なければNoneになっている。スロットルの場合はReservedConcurrentExecutions==0
get_concurrency.py
import boto3

ec2 = boto3.client('ec2')
regions = list(map(lambda x: x['RegionName'],
               ec2.describe_regions()['Regions']))

for region in regions:

    # Count Lambda functions in the region
    print(f"Region: {region}:")
    client = boto3.client("lambda", region_name=region)
    response = client.list_functions()
    names = [i["FunctionName"] for i in response["Functions"]]

    while True:
        if next_maker := response.get("NextMarker"):
            response = client.list_functions(
                Marker=next_maker,
            )
            names += [i["FunctionName"] for i in response["Functions"]]
        else:
            break
    print(f"{len(names)} functions.")

    # Count Lambda functions of concurrency 0
    for name in names:
        response = client.get_function_concurrency(FunctionName=name)
        conccurency = response.get("ReservedConcurrentExecutions")
        if conccurency == 0:
            print(f"Lambda {name} concurrency 0")

Discussion