API GatewayとLambdaでREST APIを作ってみる

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

今回はAPI GatewayとLambdaを使用して、本当に簡単なREST API環境を用意してみたいと思います。

# 環境イメージ
![growi-ページ33.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/45cab00e-4826-48cb-8784-b83eb79f058d.png)

# REST APIとは？
AIより
>REST（Representational State Transfer）に基づいたAPIで、HTTPプロトコルを利用してリソースにアクセスします。URLを通じてリソースを表現し、HTTPメソッド（GET、POST、PUT、DELETEなど）を使用して操作します。

# 構築
Lambda関数から作っていきます。
今回は以下の設定で作りました。名前はHello-REST-API、ランタイムはPython 3.13にしました。
![screencapture-ap-northeast-1-console-aws-amazon-lambda-home-2025-05-04-16_19_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/0a52a812-2b59-47a0-b209-ca1b87930dbb.png)
作成後、コードタブのlambda_function.pyを次のように修正します。
```lambda_function.py
import json

def lambda_handler(event, context):
    # "Hello AWS API Gateway!"というメッセージを返す
    response = {
        'statusCode': 200,
        'body': json.dumps({'message': 'Hello AWS API Gateway!'})
    }
    
    return response
```

修正が完了したら、Deployを押下して設定を反映します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/379a4635-43d9-43ee-b41b-262fb5b85d4c.png)

次にAPIゲートウェイの管理画面にアクセス
APIの作成を押下します。
![image (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/52ea8b03-ea05-43ae-ae7a-78eda1454adc.png)

REST APIの構築を押下します。
![screencapture-ap-northeast-1-console-aws-amazon-apigateway-main-precreate-2025-05-04-19_21_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/66fe7171-776a-406b-a880-afa421ea44a0.png)

以下の設定で作成を実行します。HelloAPIという名前で今回は作成しました。
![image (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/bb43d2a6-82ec-4765-b117-038bc552f61e.png)

作成が終わると以下のような画面が表示されます。
リソースを作成ボタンを押下して設定を入れ込んでいきます。
![image (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/92b6ab1d-e997-4db6-8dde-5a51097a6b02.png)

リソース名のところにhelloと入力してリソースを作成を押下します。
![image (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/68921868-2536-4003-88b1-883e474578e1.png)

hellが表示されていることを確認します。
この状態でメソッドを作成を押下します。
![image (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/5c59d737-775e-44fb-b58e-64cd6bb26df4.png)

メソッドはPOST、投稿タイプはLambda、関数は先ほど作成したものを選択してメソッドを作成を押下します。
![screencapture-ap-northeast-1-console-aws-amazon-apigateway-main-apis-5bg8f5nwy2-resources-tpnzd3-create-method-2025-05-04-19_32_02 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/3c5cad33-7717-4a3e-a90f-6fe23fffc8f9.png)

画面が以下のように変化します。
![image (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/82899c0a-a07a-4822-8e4f-a698986632be.png)

テストタブのテストボタンを押下すると、実際にAPIを叩くことが出来ます。
ステータスが200でレスポンスもしっかり帰ってきているように見えます。
確認出来たらAPIをデプロイを押下します。
![screencapture-ap-northeast-1-console-aws-amazon-apigateway-main-apis-5bg8f5nwy2-resources-2025-05-04-19_54_59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/065dfea0-ae75-4056-acb0-01289dd40561.png)

新しいステージで、devと名前を付けてデプロイしていきます。
![image (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/444f9501-840b-4e8f-b2e3-9aa0a395fa79.png)

デプロイ出来たら、URLを呼び出すところに記載されているURLを控えます。
![image (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/65f49c21-e9fb-4824-bab7-bd53829988cb.png)

以下のようにcurlコマンドを叩きます。
反応がありますね！
```
C:\Users\ohtsu>curl -X POST https://5bg8f5nwy2.execute-api.ap-northeast-1.amazonaws.com/dev/hello
{"statusCode": 200, "body": "{\"message\": \"Hello AWS API Gateway!\"}"}
```