Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

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

justincase
テクノロジーで保険を身近にする保険スタートアップです。
https://justincase.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away