サンプル集  >  other  >  AWS Lambda & DynamoDB (POST)
AWS Lambda & DynamoDB (POST)
2025/09/21
  1. DynamoDBの作成
  2. Lambdaの作成
  3. アクセス権限設定
  4. テスト
  5. 後かたずけ

DynamoDBの作成

CloudFormationでDynamoDBを作成してみます。

dynamodb.yaml
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
AWSTemplateFormatVersion: "2010-09-09"
Description: Create a DynamoDB

Resources:
  HouseholdBudgetDynamoDBTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: household_budget
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
      KeySchema:
        - AttributeName: id
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: 5
        WriteCapacityUnits: 5

aws cloudformationコマンドは以下の通りです。

aws cloudformation create-stack ^
  --stack-name my-dynamodb-stack ^
  --template-body file://dynamodb.yaml

コマンドプロンプトで実行してみます。

>aws cloudformation create-stack ^
More?   --stack-name my-dynamodb-stack ^
More?   --template-body file://dynamodb.yaml
{
    "StackId": "arn:aws:cloudformation:ap-northeast-1:888111666777:st
ack/my-dynamodb-stack/eee444aa-a888-1110-0022-2666eeeccc77"
}

AWSマネジメントコンソールで確認するとhousehold_budgetテーブルができていました!


Lambdaの作成

Lambdaのページを開き関数の作成をクリックします。


以下の情報を入力し画面下の関数の作成をクリックします。

関数名householdBudgetPost
ランタイムNode.js 22.x

Lambda関数が作成されました。


プログラム

Lambda関数のトリガーを設定します。トリガーを追加をクリックします。


API Gatewayをクリックします。


以下の情報を入力し画面の下の作成をクリックします。

インテント新規のAPIを作成
APIタイプREST API
セキュリティIAM


API Gatewayがトリガーに追加されました。


@aws-sdk/client-dynamodbをインストールします。

>npm install @aws-sdk/client-dynamodb

added 84 packages, and audited 86 packages in 4s

3 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

リクエストで受け取ったデータをDynamoDBへ追加するようにします。

householdBudgetHandler.js
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
import { DynamoDBClient, PutItemCommand }
  from "@aws-sdk/client-dynamodb";

function getNowString() {
  const now = new Date();
  const yyyy = now.getFullYear();
  const mm = String(now.getMonth() + 1).padStart(2, '0');
  const dd = String(now.getDate()).padStart(2, '0');
  const hh = String(now.getHours()).padStart(2, '0');
  const min = String(now.getMinutes()).padStart(2, '0');
  const ss = String(now.getSeconds()).padStart(2, '0');
  return `${yyyy}${mm}${dd}${hh}${min}${ss}`;
}

const client = new DynamoDBClient({region: "ap-northeast-1"});

export const handler = async (event) => {
  const requestBody = JSON.parse(event.body)
  const timestamp = getNowString();

  const detail = {
    id: { S: timestamp },
    item: { S: requestBody.item },
    cost: { S: requestBody.cost }
  }

  await client.send(
    new PutItemCommand({
      TableName: "household_budget",
      Item: detail
    })
  );

  const response = {
    statusCode: 200,
    body: JSON.stringify('Added household budget detail!!'),
  };
  return response;
};

アクセス権限設定

Lambdaの設定タブのアクセス権限をクリックしロール名をクリックします。


IAMロールのページが開きました。


許可ポリシー欄の許可を追加をクリックしインラインポリシーを作成をクリックします。


ポリシーの作成ページが開きました。サービス欄でDynamoDBを選択します。


アクション許可にputIと入力し下に絞り込まれたPutItemをチェックします。


下にスクロールさせてリソース欄にあるARNを追加をクリックします。


接続するDynamoDBの情報を入力しARNを追加をクリックします。 リソースARNにDynamoDBのページからARNをコピーして貼り付けるとリソースのリージョンとResource table nameが自動で設定されます。

リソースのリージョンap-northeast-1
Resource table namehousehold_budget
リソースARNDynamoDBのページからARNをコピーして貼り付け


次へをクリックします。


ポリシー名にhouseholdBudgetPost-policy-putItemと入力しポリシーの作成をクリックします。


ポリシーが作成されました。


テスト

curlコマンドでAPI GatewayへPOSTしたところ正常に動作したようです。

curl -X POST "https://xxx.com/default/householdBudgetPost" ^
  -H "Content-Type: application/json" ^
  -d "{\"item\":\"コーヒー\", \"cost\":\"510\"}" 
"Added household budget detail!!"

DynamoDBのhousehold_budgetテーブルを選択しテーブルアイテムの探索をクリックします。


テーブル:household_budget - 返された項目(1)と表示されその下にデータも表示されました!


正常に動作しているようです!

後かたずけ

作成したAWSのリソースをそれぞれ削除します。

  1. CloudFormation my-dynamodb-stack
  2. DynamoDB stackを削除すると一緒に削除される。
  3. Lambda householdBudgetPost
  4. API Gateay householdBudgetPost-API
  5. IAM ロール householdBudgetPost-role-xxx
  6. CloudWatch ロググループ /aws/lambda/householdBudgetPost

CloudFormationで作成したものはCloudFormationのstackを削除すると一緒に消えるので便利ですね。

▲ PageTop  ■ Home


Copyright (C) 2023 - 2025 ymlib.com