Edited at

LambdaがCloudWatchをサブスクライブする上限を確認してみた

AWS Lambdaって、Log Groupをサブスクライブできる数に上限はあるんでしょうか?

気になったのでチームメンバーと一緒に試してみました。


TL;DR

SubscriptionFilterで指定する場合、とりあえず50まではOK。

ちなみに、AWS::Serverless::FunctionのEventsで指定する場合、20個くらいだったような...(そのうち確認する)


検証方法

以下の手順です。

1. Lambdaを手動で作成

2. LambdaにPermissionを付与

3. LogGroupとSubscriptionFilterを大量に作成

4. Subscriptionを確認

5. お掃除


1. Lambdaを手動で作成

こんなかんじで適当に作ります。

image.png


2. LambdaにPermissionを付与

CLIでいい感じに指定します。マネジメントコンソールからパッとやりたかったのですが、方法がわかりませんでした。

aws lambda add-permission --function-name test-2019-06-08-hiroga \

--action lambda:InvokeFunction --statement-id logs \
--principal logs.amazonaws.com --output text
--profile ${PROFILE} \
--region ${REGION}


3. LogGroupとSubscriptionFilterを大量に作成

シェルでガッと作ります。

LOG_GROUP_NAME=test-2019-06-08

LAMBDA_ARN=${LAMBDA_ARN}
END=50

for i in $(seq 1 $END); do
## create
# https://docs.aws.amazon.com/cli/latest/reference/logs/create-log-group.html
aws logs create-log-group \
--log-group-name "$LOG_GROUP_NAME"-"$i" \
--profile ${PROFILE} \
--region ${REGION}

## put
# https://docs.aws.amazon.com/cli/latest/reference/logs/put-subscription-filter.html
aws logs put-subscription-filter \
--log-group-name "${LOG_GROUP_NAME}"-"$i" \
--filter-name "${LOG_GROUP_NAME}"-"$i"_FLILTER \
--filter-pattern "" \
--destination-arn "${LAMBDA_ARN}" \
--profile ${PROFILE} \
--region ${REGION}

done


4. Subscriptionを確認

マネジメントコンソールでログストリームを作成してから、CLIでログを人為的に発生させます。

aws logs put-log-events --log-group-name test-2019-06-08-50 \

--log-stream-name test \
--log-events 'timestamp=1559643318560,message=1559643318560 ERROR Testing Notification' \
--sequence-token 0 \
--profile ${PROFILE} \
--region ${REGION}

おお、ちゃんとログを読んでる...。

image.png


5. お掃除

LOG_GROUP_NAME=test-2019-06-08

END=50

for i in $(seq 1 $END); do
aws logs delete-log-group \
--log-group-name "$LOG_GROUP_NAME"-"$i" \
--profile ${PROFILE} \
--region ${REGION}
done


ちなみに...

現時点で、なぜかSubscriptionはTriggerに現れません。なんでだろう?

AWS::Serverless::FunctionのEventで指定する場合はここにも表示されるんだけど...

image.png

なにかご存知の方、いらっしゃいましたら教えてください!