0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LambdaとAPI Gatewayを使ってREST APIを動かしてみる

Last updated at Posted at 2025-08-30

大阪事業所の西野です!
今回はAPIについて記事にまとめてみました!

1.APIとは

アプリケーション、プログラム、インターフェースの略です。
簡単にいうとアプリ同士を繋げる窓口のようなものです。

スタイルやプロトコルによる分類

REST API

概要: HTTPを利用したシンプルでスケーラブルなAPI設計。ステートレスが特徴。
使用例: Webサービス(例: RESTful Webサービス、クラウドAPI)
メリット:HTTPメソッド(GET、POST、PUT、DELETE)を活用し、柔軟な操作が可能。
スケーラビリティが高く、分散システムに適している。
JSONやXMLなど、フォーマットの選択肢が広い。
デメリット: 毎回リクエストに全ての必要な情報を含める必要がある(ステートレスの制約)。

SOAP API

概要: XMLベースのプロトコルを使用するAPI設計。トランザクションやセキュリティに強みを持つ。 使用例: 金融機関や政府機関で使用されるAPI(例: 銀行間取引API) メリット: 高いセキュリティ(WS-Securityをサポート)。 トランザクション処理や複雑な操作に適している。 プロトコルに厳密なルールがあるため、一貫性が保たれる。 デメリット: REST APIに比べて実装が複雑で、パフォーマンスが劣る場合がある。 XML専用であるため、データのフォーマットが制約される。 厳密な規格が決まっているSOAPに対してREST APIは記述もシンプルで直感的に使用することができます。

今回は簡単に動作確認を行うことができる REST APIを使ってみようと思います。

環境構成

使用するサービス

・API Gateway
・Lambda
・DynamoDB
・IAM
・CloudWatch

今回はLambdaとAPI Gatewayを使用してサーバーレス環境でAPIを動かしてみます。CLoud Watchはおまけ的な感じでLambdaのログを取るために使用してみます。

HTTPリクエストを送信してからレスポンスが帰ってくるまでの流れ↓
①クライアントPCからAPI Gateway経由でHTTPリクエストを送信する。
②HTTPリクエストを受け取るとリクエストに応じたLambda関数が走る。
③Lambda関数内でDynamoDBに対する処理を行う
④リクエストの種類がGETの場合はDynamoDBから取得したデータをAPI Gateway経由でクライアントに返す
⑤クライアントPC上で取得したデータ内容を確認する。

ネットにあった構成図を拝借
スクリーンショット 2024-12-29 0.03.29.png

実装手順

①DynamoDBの作成
②IAMロールの作成
③Lambda関数作成
④REST API作成
⑤REST API動作確認

①DynamoDBの作成

usersという名前でテーブルを作成します。
プリマリーキーはidです。
Dynamodb.png

②ロールの作成

下記二つの権限を付与したIAMロールを作成して③で作成するLambda関数に付与します。
・AmazonDynamoDBFullAccess・・DynamoDBに対して、フルアクセス権限を持つ
・AWSLambdaBasicExecutionRole・・CloudWatch Logs へのアクセス

③lambda関数の作成

Lambda関数を使用してDynamoDBに対するアクションを定義します

・リクエストデータを受け取りDynamoDBの「users」テーブルに保存する処理

import boto3
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):
    requestJSON = json.loads(event['body'])
    post_users(requestJSON)

・DynamoDBに保存されているデータを取得する処理

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'])

④REST API作成

APIGatewayにリソースを作成して各メソッドを定義していきます

メソッドを定義する際にメソッドのリクエストとレスポンスの各定義があやふやだったので以下にメモ書きしておきます。

  1. メソッドリクエスト
    API Gateway がリクエストを受け取る前に、リクエストが正しいかどうかをチェックします。
  2. 統合リクエスト
    API Gateway がバックエンドサービス(例: Lambda 関数、DynamoDB、HTTPエンドポイントなど)と通信する際に行われる処理です。
  3. 統合レスポンス (Integration Response)
    バックエンドサービスからのレスポンスを受け取り、クライアントに返す前に処理を行う段階です。
  4. メソッドレスポンス (Method Response)
    クライアントに返すレスポンスのルールを設定する部分です。

API Gatewayで先ほど作成したLambda関数を動かすメソッドをアクションごとに作成していきます。Lambdaと通信するため統合リクエストで作成します。
スクリーンショット 2024-12-28 23.34.24.png

マッピングテンプレートの作成

{
    "id" : "$input.params('id')"
}

このマッピングテンプレートは、API Gateway がリクエストを受け取った際に、リクエストパラメータ(id)を抽出して、DynamoDB(またはバックエンドサービス)に送信するデータを JSON 形式に変換するためのものです。

⑤REST APIの動作確認

ターミナルから作成した API のエンドポイント(URL)に対し、curl コマンドを使用して POST メソッドでユーザー情報を送信します。リクエストのボディには JSON 形式でユーザー情報(id, name, age, address, tel)を指定し、API Gateway を通じてデータを DynamoDB に登録します。」

curl -X POST -H "Content-Type: application/json" -d "{\"id\":\"001\",\"name\":\"A\",\"age\":\"10\",\"address\":\"Tokyo\",\"tel\":\"090-1111-1111\"}" https://ドメイン名.execute-api.ap-northeast-1.amazonaws.com/users-stage/users

正しく登録されているかを確認するためGETメソッドでクライアントに情報を返します。

curl -X GET https://ドメイン名.execute-api.ap-northeast-1.amazonaws.com/users-stage/users/GET

登録したデータがレスポンスとして返ってきました!成功です

[{"tel": "090-1111-1111", "address": "Tokyo", "id": "001", "name": "A", "age": "10"}]

4.まとめ

APIについてなんとなくイメージは持っていましたが、具体的に説明するとなると難しいというレベル感から勉強を始めました。実際に手を動かしてAPIを構築・動作させることで、理解が格段に深まりました。また、サーバーレス環境を活用する便利さを改めて実感する良い機会にもなりました!

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?