この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
ストリーム系イベントソースのバッチサイズを変更するには?
DynamoDB/Kinesis Stream -> Lambda 連携を運用していて、スループットを上げるために、バッチサイズを上げたくなりました。
マネージメントコンソールから操作しようとすると、バッチサイズの変更画面が存在しないため、一度イベントソースを削除して作り直さなければいけません。 すると、ストリーム情報が失われるため、また一からレコードを再取得となり、ストリーム処理としては好ましくありません。
API UpdateEventSourceMapping
を使うと、ストリームの位置を維持したまま、バッチサイズをオンラインで変更出来ます。
マニュアルから引用します。
This is useful if you want to change the parameters of the existing mapping without losing your position in the stream. http://docs.aws.amazon.com/lambda/latest/dg/API_UpdateEventSourceMapping.html
それでは、この変更手順を AWS CLI で確認しましょう。
AWS CLI から UpdateEventSourceMapping
API を叩いてみる
まずは list-event-source-mappings
で今の設定を確認します。
$ aws lambda list-event-source-mappings --function-name Food
{
"EventSourceMappings": [
{
"UUID": "99999999-dddd-4444-8888-222222222222",
"StateTransitionReason": "User action",
"LastModified": 1441078911.0,
"BatchSize": 100,
"State": "Enabled",
"FunctionArn": "arn:aws:lambda:ap-northeast-1:111111111111:function:Food",
"EventSourceArn": "arn:aws:kinesis:ap-northeast-1:111111111111:stream/Demo",
"LastProcessingResult": "OK"
}
]
}
"BatchSize": 100 となっています。
$ aws lambda update-event-source-mapping
でイベントソースのバッチサイズを500に変更します。
対象ソースは UUID で指定します。
$ aws lambda update-event-source-mapping \
--uuid "99999999-dddd-4444-8888-222222222222" \
--batch-size 500
{
"UUID": "99999999-dddd-4444-8888-222222222222",
"StateTransitionReason": "User action",
"LastModified": 1441078933.47,
"BatchSize": 500,
"EventSourceArn": "arn:aws:kinesis:ap-northeast-1:111111111111:stream/Demo",
"FunctionArn": "arn:aws:lambda:ap-northeast-1:111111111111:function:Food",
"State": "Updating",
"LastProcessingResult": "OK"
}
State が Enabled
から Updating
に変更になりました。
もう一度 list-event-source-mappings
API を叩いてイベントソースを確認してみましょう。
$ aws lambda list-event-source-mappings --function-name Food
{
"EventSourceMappings": [
{
"UUID": "99999999-dddd-4444-8888-222222222222",
"StateTransitionReason": "User action",
"LastModified": 1441078970.0,
"BatchSize": 500,
"State": "Enabled",
"FunctionArn": "arn:aws:lambda:ap-northeast-1:111111111111:function:Food",
"EventSourceArn": "arn:aws:kinesis:ap-northeast-1:111111111111:stream/Demo",
"LastProcessingResult": "OK"
}
]
}
BatchSize は 500
で State は Enabled
に戻りました。
更新完了です。
DynamoDB Stream の場合も、同じようにバッチサイズを変更できます。
UpdateEventSourceMapping
API の制限
UpdateEventSourceMapping
API で変更できるのは
- バッチサイズ
- イベントソースの有効/無効化
だけです。
- ストリーム(
Stream
) - ストリーム起点の選び方(
Trim Horizon
/Latest
)
を変更する羽目になったら、イベントソースを作り直しましょう。
References
- AWS Lambda API Reference : UpdateEventSourceMapping http://docs.aws.amazon.com/lambda/latest/dg/API_UpdateEventSourceMapping.html http://docs.aws.amazon.com/cli/latest/reference/lambda/update-event-source-mapping.html