【初心者向け】LambdaからDynamoDBへのデータ書き込み

## はじめに
AWS初心者です。AWSの基本知識をキャッチアップすべく、色々触りながら学習中です。
データベースも触ってみようと思い、LambdaからDynamoDBにデータを書き込む超シンプルな実装をしてみました。初心者向けの内容となっておりますので、温かい目で見て頂ければ幸いです。

## 想定読者
AWS初心者で、基本機能を色々触ってみたい方

## 概要
本ページでは、LambdaからDynamoDBにデータを書き込むための手順を一から記載しています。私も10分ほどで確認することができた手順となっておりますので、手っ取り早く確認したい方はぜひお試しください。

## チュートリアル

### DynamoDBのテーブル作成
AWSコンソールでDynamoDBにアクセスし、テーブルを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936702/38bda8e2-ff01-064b-79c6-ffed675cd74a.png)

テーブル名とパーティションキーには「id」を入力し、テーブル作成を完了します。<br>それ以外の設定はデフォルトのままでOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936702/c7a5eef4-cd8f-b016-91b4-b9b474d5fc08.png)

以下の通り、テーブルが作成されたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936702/90ce2c83-3126-04d2-058b-e5234bb9148a.png)

これでDynamoDBの設定は完了です。

### Lambda関数の作成
AWSコンソールでLambdaにアクセスし、関数を作成します。
今回はPythonでプログラムを書くため、ランタイムは「python 3.13」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936702/e5d98a97-ebd8-bd67-4838-49786fc70b43.png)

コードエディタを開き、以下のサンプルコードを貼り付けてデプロイします。今回は、ユニークなIDと3つのパラメータをDynamoDBに書き込む処理を実装しています。

#### サンプルコード
```lambda_function.py
import json
import boto3
import uuid  # UUIDを生成するために使用

# DynamoDBクライアントの作成
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('your-table')  # DynamoDBテーブル名を指定

def lambda_handler(event, context):
    try:
        # リクエストボディを取得
        body = event

        # 必要なデータを取得
        name = body.get("name")
        gender = body.get("gender")
        age = body.get("age")


        # DynamoDBに書き込むデータを構築
        item = {
            "id": str(uuid.uuid4()),  # ユニークなIDを生成
            "name": name,
            "gender": gender,
            "age": age
        }

        # DynamoDBにデータを書き込む
        table.put_item(Item=item)

        # 成功レスポンスを返す
        return {
            "statusCode": 200,
            "body": json.dumps({
                "message": "Data successfully saved to DynamoDB.",
                "item": item  # 保存したデータを返す
            })
        }

    except Exception as e:
        # エラー時のレスポンス
        return {
            "statusCode": 500,
            "body": json.dumps({
                "error": "Internal server error.",
                "details": str(e)
            })
        }
```

### ロールの設定
AWSコンソールでIAMにアクセスし、IAMロールを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936702/132106d1-5ea5-ca68-87cd-290ed6787165.png)

今回はDynamoDBにアクセスするため、ポリシーから「AmazonDynamoDBFullAccess」を選択し、ロールを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936702/ca100388-cd9f-3544-95d0-63e1d9c21693.png)

Lambda関数に戻って、設定から作成したロールをアタッチします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936702/ccf73211-0f21-4318-d201-5cbc907f9871.png)


### Lambda関数の実行
テストタブでイベントJsonを入力し、テストを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936702/64003fb5-9f05-c285-c968-58b0da86e8a4.png)

### 実行結果
DynamoDBへ移動し、テーブル内のレコードを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936702/23a879e3-8e73-0811-1eba-a4a5fc038be4.png)

## おわりに
初歩的ですが、DynamoDBへの書き込みまでの処理を確認することができました。