0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS AppSyncでAPIを作ってみたAdvent Calendar 2022

Day 15

DynamoDBエクストリームで動くLambdaの起きがちなエラーの対処

Last updated at Posted at 2022-12-14

概要

この記事では、DynamoDBエクストリームで動くLambdaの起きがちなエラーの対処方法を紹介します。

エラー

まずはじめに、起こるエラーを紹介します。

[ERROR] KeyError: 'OldImage'
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 7, in lambda_handler
    old = event['Records'][0]['dynamodb']['OldImage']

変更前のデータが取得できないエラーです。

設定内容

Lambda関数のコードは下記のとおりです。

lambda_function.py
import json

def lambda_handler(event, context):
    print(event)
    
    new = event['Records'][0]['dynamodb']['NewImage']
    old = event['Records'][0]['dynamodb']['OldImage']
    
    print(new)
    print(old)
    
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

DynamoDBに加えた変更は、下記のとおりです。

  • 変更前
id cast favorite program_name time weekday
mon2700 [{"S":"フワちゃん"}] false フワちゃんのオールナイトニッポン0 27:00-28:30 1
  • 変更後
id cast favorite program_name time weekday
mon2700 [{"S":"フワちゃん"}] true フワちゃんのオールナイトニッポン0 27:00-28:30 1

対処法

まず、原因ですが、
変更を加える以前の、DB登録時に、
OldImage がないため吐いたエラーが残っていることが原因です。

DynamoDBエクストリームを有効にすると、
自動で、再試行-1 が設定されます。

これにより、Lambda関数内でエラーが起きた際に、無限に再試行を繰り返し、
DBに変更を加えても、前のエラーを吐き続けてしまいます。

対処法は、再試行 の値を、0以上に設定変更することです。

Lambda関数から 設定 を開き、トリガーを選択し、編集 を押下します。
追加設定 から 再試行0 以上に変更し、保存 で設定変更完了です。

0 を設定すると、下記のように なし が表示されます。

トリガー.jpg

これで、DBの変更時にエラーが出ることは解消できます。

DB登録時にエラーが出ることに関しては、
Lambda関数の、OldImage取得部分を、OldImageが無くてもエラーを起こさない等、
コードに修正を加えることで解消できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?