0
0

More than 3 years have passed since last update.

DynamoDBのチュートリアルを読み解く【5: トリガーを作成してテストする】

Posted at

はじめに

今回もDynamoDBのチュートリアルを実施しました。
最後はLambdaでのトリガー作成です。

(バックナンバー)
1.DynamoDB テーブル作成
2.IAMポリシー/ロール作成
3.SNSトピック作成
4.Lambda関数作成/テスト

5.1 トリガー作成用ARN情報取得

今回はDynamoDBのレコードに新しい項目が追加された場合にSNSトピックを発行するようにしたいので、LambdaのイベントソースとなるDynamoDBのトリガーを作成する必要があります。
まずはそれに必要なDynamoDBのARNを取得します。

aws dynamodb describe-table --table-name BarkTable

--table-name

  • 書式 : --table-name (value)

情報を表示するテーブル名。

出力結果

コマンドを実行すると最後の方にARNが出力されます。

    ...
    },
    "LatestStreamLabel": "2020-01-28T17:05:04.444",
        "LatestStreamArn": "arn:aws:dynamodb:region:xxxxxxxxxxxx:table/BarkTable/stream/2020-01-28T17:05:04.444"
    }
}

5.2 トリガー作成

aws lambda create-event-source-mapping \
    --region us-east-1 \
    --function-name publishNewBark \
    --event-source streamARN  \
    --batch-size 1 \
    --starting-position TRIM_HORIZON

※Lambda作成時と同じオプションの説明は省略します
※--regionは例によって自分の環境に置き換えましょう

--event-source

  • 書式 : --event-source (value)

イベントソースのARNを指定。
公式リファレンスでは--event-source-arnとなっていますが、両方試したところこれはどちらでも実行可能のようです。

--batch-size

  • 書式 : --batch-size (value)

単一のバッチで取得するアイテムの最大数。
今回の場合で言うと、DynamoDBへの書き込み→SNS実行を最大でまとめていくつ実行するかの設定。

通常は負荷テストをしながら適切な値を設定する(でないとスループットが死ぬ)のですが、今回はチュートリアルで且つ手動書き込みなので1件で十分です。

--starting-position

  • 書式 : --starting-position TRIM_HORIZON or LATEST or AT_TIMESTAMP

読み取りを開始するストリーム内の位置。(DynamoDB Streamsかkinesisのみ使用可能)
各オプションの効果については下記の通り。

  • TRIM_HORIZON : 読み取りされていないものを古い順から読み取る。先入れ先出し(FIFO)
  • LATEST : 最新のものから順番に読み取る。後入れ先出し(LIFO)
  • AT_TIMESTAMP : 指定時刻以降のものを読み取る(--starting-position-timestampで開始時刻を指定。kinesis専用)

5.3 トリガーのテスト

テストとして、DynamoDBにアイテムを追加してみます。
(実行してメールが飛んでくれば成功)

aws dynamodb put-item \
    --table-name BarkTable \
    --item Username={S="Jane Doe"},Timestamp={S="2016-11-18:14:32:17"},Message={S="Testing...1...2...3"}

--table-name

  • 書式 : --table-name (value)

追加するアイテムを格納するテーブル名。

--item

  • 書式 : --table-name (attribute)={(datatype)(value)} or JSON

追加するアイテムを格納するテーブル名。データ型(datatype)の「S」は文字列の意味。
また、JSON形式で書いたファイルをfile://item.jsonのように指定する方法もある。

(当然ながら)主キーは必ず含めないといけないので注意。

終わりに

亀のごときスピードでしたが、これにてDynamoDBのチュートリアルは終わりました。
感想としては、基本的なところがまだまだ全然把握できていないな、というところでした。

他のチュートリアルもやろうかと思っていますが、どこまで記事にするかはちょっと考え中です(マンネリ化しそうなので)

参考URL

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