0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

40代おっさんREST API サーバーレスを学ぶ②

Posted at

本記事について

この記事はプログラミング初学者の私が学んでいく中でわからない単語や概要を分かりやすくまとめたものです。
もし不正などありましたらコメントにてお知らせいただければ幸いです。

前回

https://qiita.com/kou1121/items/f3a1a67c3aab6d89dd58

Lambda関数

AWS Lambdaを開く

一から作成を選ぶ

Lambdapost.png

関数名を入れる(users-post-function)
ランタイムをpython 3.9

Lambdaロール.png

既存のロールを使用するを選択
先ほど作ったロールを入れる

終わりましたら作成をクリック

post

users-post-function

import boto3 # AWSのリソースを動かす
import json

dynamodb = boto3.resource('dynamodb')
table    = dynamodb.Table('users')
 
def post_users(requestJSON):
    #  各値を呼び出してセットする
    table.put_item(Item={'id': requestJSON['id'], 'name': requestJSON['name'], 'age': requestJSON['age'], 'address': requestJSON['address'], 'tel': requestJSON['tel']})

def lambda_handler(event, context): # API Gatewayがlambda_handler最初に呼ばれる。
    requestJSON = json.loads(event['body']) # eventを文字列形式からjson形式にする
    post_users(requestJSON)

gat

users-get-function

import boto3
 
dynamodb = boto3.resource('dynamodb')
table    = dynamodb.Table('users')

#リクエストパラメータでIDが指定される場合、該当IDのユーザ情報を取得して返す
def get_user(id):
    response = table.get_item(
            Key={
                 'id': id
            }
        )
    return response['Item']

#リクエストパラメータでIDが指定されない場合、全ユーザ情報を取得して返す
def get_users():
    response = table.scan()
    return response['Items']
         
def lambda_handler(event, context):
    return get_users() if event['id'] == '' else get_user(event['id'])

put

import boto3
import json

dynamodb = boto3.resource('dynamodb')
table    = dynamodb.Table('users')
 
def post_users(requestJSON):
    table.update_item(
        # 更新のためのキー情報を取得
        Key={
            'id': requestJSON['id']
        },
        # アップデートのSQL文
        UpdateExpression="SET #name = :newName, age = :newAge, address = :newAddress, tel = :newTel",
        ExpressionAttributeNames= {
        '#name' : 'name'
        },
        # 更新対象の値を変数にセット
        ExpressionAttributeValues={
            ':newName': requestJSON['name'],
            ':newAge': requestJSON['age'],
            ':newAddress': requestJSON['address'],
            ':newTel': requestJSON['tel']
        },
    )

def lambda_handler(event, context):
    requestJSON = json.loads(event['body'])
    post_users(requestJSON)

nameはAWS上の予約語になっている。
SET文の時は#nameになっている。
その後の
ExpressionAttributeNames= { '#name' : 'name' }
でカラム名はnameであると明示している。

delete

import boto3
 
dynamodb = boto3.resource('dynamodb')
table    = dynamodb.Table('users')

#リクエストパラメータでIDが指定される場合、該当IDのレコードを削除する
def delete_user(id):
    table.delete_item(
        Key={
            'id': id
        }
    )

#リクエストパラメータでIDが指定されない場合、テーブルを削除する
def delete_users():
    response = table.delete()
         
def lambda_handler(event, context):
    return delete_users() if event['id'] == '' else delete_user(event['id'])

デプロイ

deploy.png

Deploy(赤丸)をクリック
これをすべての関数で行う。
これでサーバーレス環境にデプロイされたことになる。

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?