こんにちは、Michaelです。
今回は、AWS LambdaからDynamoDBのテーブルにデータを登録(Put)してみます。
今回の構成
Lambdaが起動されると、外部から入力されたデータをDynamoDBのテーブル「invoke_history」に登録します。Lambdaで実行された時間を記録し、ソートキー「time」に登録することでキーの重複を回避します。
IAMロールの設定
LambdaからDynamoDBにデータを登録するため、以下のポリシーを作成し、Lambdaに適用するIAMロールにアタッチします。このポリシーでは、テーブルの「読み取り」、「書き込み」、「更新」の最小限のポリシーのみ許可しています。
コード
コードは以下のようになります。
コードの説明
コードの内容は以下の通りです。
項番 | 項目 | 内容 |
① | ライブラリのimport | 処理に必要なライブラリを指定してインポートします。 |
② | Functionのロードをログに出力 | Lambdaのコードがロードされたことが分かるようにログにメッセージを出力します。 |
③ | DynamoDBオブジェクトを取得 | DynamoDBと接続できるようにインスタンスを生成します。 |
④ | Lambdaのメイン関数 | トリガーにより実行される関数。 |
⑤ | テーブル名を指定 | データを登録するテーブル名を設定します。 |
⑥ | 実行時刻の記録 | Lambdaの実行時刻をUnixtimeで記録します。 |
⑦ | float型をdecimal型に変換 | DynamoDBではfloat型がサポートされないため、decimal型に変換します。 |
⑧ | DynamoDBテーブルのオブジェクトを取得 | DynamoDBのテーブルを操作できるようにインスタンスを生成します。 |
⑨ | DynamoDBへのデータ登録 | DynamoDBのテーブルにデータを登録します。 |
実行結果
テスト実行にあたり、テストイベントとして以下のJSONデータを登録しておきます。
Lambdaのコードエディタの上部にある[テスト]をクリックすると、テスト実行されます。
テストを実行すると、テストイベントのデータとLambda実行時刻がDynamoDBに登録されていることが確認できました。
まとめ
LambdaとMySQLといったRDBMSとの組み合わせは、コネクション数等の問題からアンチパターンとされるため、DynamoDBとの組み合わせはよく使われます。
DynamoDBはスキーマレスでRDSより設計がしやすく、ディスク容量の制限もないため、IoTのような無尽蔵にデータが入力されるケースでもディスク容量を気にせず利用できます。
次回は、DynamoDBのデータをLambdaから読み取るコードを紹介します。
次回もお楽しみに!