はじめに
Lambda⇒DynamoDBへ書き込みについて学習したのでその振り返り記事となります。
本記事はLambda⇒DynamoDBへ書き込み処理部分を実装できるようになることを目的としたハンズオン形式の記事になります。
ゴール
lambdaからdynamoDBにデータの書き込みができるようになる。
環境
- Lambda(Node.js 16.x)
- DynamoDB
DynamoDB側の準備
DynamoDBからリソースを作成していきます。
◆テーブルの作成
DynamoDB > テーブル > テーブルの作成 からテーブル名とパーティションキーを入力します。
入力出来たらページ下部の「テーブルの作成」ボタンをクリック。
Lambda側の準備
Lambdaを準備していきます。
◆関数の作成
Lambda > 関数の作成から関数を作っていきます。
「一から作成」を選択し、任意の関数名、ランタイムを設定し実行ロールはいったん「基本的な Lambda アクセス権限で新しいロールを作成」にチェックしておきます。
入力出来たらページ下部の「関数の作成」ボタンをクリック。
◆実行ロールの追加
デフォルトのロールでは必要な権限が足りてないのでロールを追加します。
Lambda > 関数 > 関数名 > 設定タブからアクセス権限の設定をクリック。
表示されるロール名をクリックするとIAMのページに遷移するので、許可を追加 > インラインポリシーを作成を選択します。
- アクション 許可:検索バーに「PutItem」を入力し書き込み権限を選択
- リソース:特定にチェックを入れ、DynamoDBの「arnを追加」をクリック。
表示されたポップアップの「リソースARN」の欄にDynamoDBのARNをコピペします。コピペが完了したら「ARNを追加」を選択します。
上記を完了し、再度先ほど開いていたIAM > ロール > 対象のロール名のページに戻ります。
「許可ポリシー」の欄を確認すると、作成したものが追加されている事を確認できます。
◆処理内容の作成
Lambda > 関数 から作成した関数名を選択しコードを設定していきます。
index.jsに対して以下のようにコードを記述します。
処理の詳細はコメントアウトの通りです。
const AWS = require('aws-sdk');
// DynamoDB クライアントを作成
const dynamoDB = new AWS.DynamoDB.DocumentClient();
exports.handler = async (event) => {
try {
// DynamoDB に挿入するデータ
const params = {
TableName: 'dynamoDBのテーブル名',
Item: {
dynamoid: 'testhogehgoe',
}
};
// データを挿入
await dynamoDB.put(params).promise();
return {
// 書き込み成功
statusCode: 200,
body: JSON.stringify('Data inserted successfully')
};
} catch (error) {
return {
// 書き込み失敗
statusCode: 500,
body: JSON.stringify('Error inserting data: ' + error.message)
};
}
};
◆実行 & 結果
ここまで出来たらコードタブの「Deploy」ボタンをクリックし変更内容を更新します。
合わせて「Test」からイベントを作成し再度「Test」ボタンをクリックし処理を実行してみます。
結果:200番が返ってきておりdynamodbへの書き込みが成功している事を確認できました。
DynamoDB > 項目を探索 > テーブル名 から書き込まれた内容も確認できます。