Skip to content

API GatewayとLambdaとDynamoDBを組み合わせてToDoアプリを作る

   

GatewayとLambdaとDynamoDBを組み合わせてToDoアプリを作る方法です。

Lambda 関数を作ります。 Create Function

API GatewayでRestAPIを作ります。 Create RestAPI

Create RestAPI

アクションから「リソースの作成」を選択します。

Create Resorce

Create Resorce

アクションから「メソッドの作成」を選択します。

Create Method

Getを選択し、先ほど作成したLambda関数と連携させます。

Create Method

アクションから「APIのデプロイ」を選択します。

API Deploy

デプロイ先のステージを選択します。ステージがない場合は新しいステージを作成します。

Create Stage

Create Stage

作成されたステージ + メソッド名をブラウザに入力し、"Hello from Lambda!" と表示されることを確認します。 今回の場合は https://eio7s05pk1.execute-api.ap-northeast-1.amazonaws.com/production/todo-app となります。

次にDynamoDBを作ります。 todo-table というテーブルを作り、todoMessage をパーテーションキーに、todoDate をソートキーに設定します。

Create DynamoDB

todo-table にデータを入れていきます。

aws dynamodb put-item \
--table-name todo-table \
--item '{ "todoMessage": { "S": "Clean My Room" }, "todoDate": { "S": "2022-03-20T00:00:00Z" } }'
aws dynamodb put-item \
--table-name todo-table \
--item '{ "todoMessage": { "S": "Shopping" }, "todoDate": { "S": "2022-03-19T00:00:00Z" } }'
aws dynamodb put-item \
--table-name todo-table \
--item '{ "todoMessage": { "S": "Programing" }, "todoDate": { "S": "2022-03-18T00:00:00Z" } }'

追加したデータを確認します。

aws dynamodb scan \
--table-name todo-table \
--limit 10 | jq
aws dynamodb scan \
--table-name todo-table \
--filter-expression 'attribute_exists(todoMessage)' \
--filter-expression 'attribute_exists(todoDate)' \
--limit 100 | jq

Lambda関数のロールに DynamoDB へのアクセス権限を付与します。

Select Lambda Role

Attach Policy

Attach DynamoDB Full Access Policy

権限を付与したら Lambda のソースコードを変更します。 Item をスキャンして返します。

import json
import boto3

def lambda_handler(event, context):    
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('todo-table')
    
    scan_kwargs = {
        'FilterExpression': 'attribute_exists(todoMessage)',
        'FilterExpression': 'attribute_exists(todoDate)',
        'Limit': 100,
    }
    
    response = table.scan(**scan_kwargs)
    items = response['Items']    
    
    return {
        'statusCode': 200,
        'body': json.dumps(items),
    }

再び API Gateway のエンドポイントにブラウザからアクセスして Todoリストを確認できれば完成です。

関連記事

  1. AWS CLIでDynamoDBを操作する
  2. DynamoDBのスキャン時に「Attribute name is a reserved keyword; reserved keyword: type」が出る
  3. プロファイルを使って複数のAWSアカウントを使い分ける
  4. SwiftUIでのプッシュ通知の最小構成
  5. LambdaのコードをCLIから更新する
  6. ALBに独自ドメインを設定してHTTPSにする
  7. EC2インスタンスにnginxをインストールしてブラウザからアクセスする