AWS Lambdaでストリームイベントのバッチサイズを変更する
ストリーム系イベントソースのバッチサイズを変更するには?
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