🐥
スロットルされていないかを全Lambdaに対して確認するboto3スクリプト
他の検討でスロットルしてしまって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