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?

AWS Lambda+API GatewayでJSONパーサーAPIを作ってみる。

Last updated at Posted at 2023-04-04

はじめに

naritomoと申します。

本職はインフラエンジニアを行っています。

これまで作成していたJSONパーサーAPIを、AWSのLambda,APIGatewayを使用して立ち上げみました。

いろいろアドバイスいただけると嬉しいです。

開発概要

以下の仕様とします。

  • API稼働フレームワークはLambda(Python)+API Gatewaayを使用する
  • API入力は、以下のものを入力する
    • URLにクエリでJSONキーを指定する。(?key=key1)
    • POSTボディーにJSONデータを入れる
  • API出力は以下のものとする
    • クエリで指定したJSONキーに対応した値をプレーンテキストで出力する

事前準備

AWSアカウントを作成していること。

*本システムでしたらかかっても1日あたり0.01ドルですみます。

API構築方法

Lambda関数作成

AWSのメニューからLanbdaコンソールに入る。

1.png

関数の作成をクリックし、以下の設定を行って関数を作成する。

  • 一から選択を選ぶ
  • 関数名は任意の名前を選択する
  • ランタイムは"Python3.xx"を選択する
  • アーキテクチャは"x86_64"を選択する

2.png

3.png

コードソースに移動して
以下関数内容を入力して、"Deploy"をクリックする。
"Test"は行わなくてよい。

import json

def lambda_handler(event, context):
    try:
        # POSTで送られてくるJSONデータをパースする
        body = json.loads(event['body'])

        # URLクエリパラメータからキーを取得する
        query_key = event['queryStringParameters']['key']

        # キーに対応する値を取得する
        value = body.get(query_key, 'Key not found in JSON')

        return {
            'statusCode': 200,
            'headers': {'Content-Type': 'text/plain'},
            'body': str(value)
        }
    except Exception as e:
        return {
            'statusCode': 500,
            'headers': {'Content-Type': 'text/plain'},
            'body': str(e)
        }

4.png

APIGateway設定

AWSのメニューからAPI Gatewayコンソールに入る

1.サービスから「API Gateway」を選択します

2.HTTP APIボタンの構築をクリックします

5.png

3.統合に「Lambda」、Lambda関数に先程作成した関数を指定する

6.png

4.API名を設定し「次へ」をクリックする

7.png

5.ルート設定画面にて、任意のリソースパスを設定し、「次へ」をクリックする

8.png

6.ステージを定義画面で「次へ」をクリックする

9.png

7.「Review and Create」画面で設定を確認し、「作成」をクリックしてAPIを作成します

10.png

8.API一覧から作成したAPIを選択する

11.png

9.左のメニューからRouteをクリックして、ルート詳細の編集をクリックする

12.png

10.ルートとメソッド画面にて"POST"を選択し、保存をクリックする

13.png

ここまでで、APIは完成しますが、独自ドメイン+SSLを使用したい場合は以下の手順を参照してください

事前に独自ドメインを入手し、Route53でパブリックホストゾーンを作成してください

AWS Certificate ManagerでSSL証明書を取得する

  1. AWS Management Consoleにサインインし、「AWSCertificate Manager」サービスを選択します

  2. 「証明書をリクエスト」をクリックします

14.png

3.パブリック証明書をリクエストを選択し、次へをクリックする

15.png

4.パブリック証明書をリクエスト画面にてAPIに使用するドメイン名を設定する

16.png

5.画面の一番下に移動して、リクエストをクリックする

17.png

6.対象証明書のドメイン設定箇所で、Route53でレコード作成をクリックする

18.png

7.右下のレコード作成をクリックする

19.png

8.証明書一覧に戻り、ステータスが発行済となっていることを確認する

20.png

API Gatewayでカスタムドメインを作成する

1.AWS Management Consoleで「API Gateway」サービスを選択します

2.左側のナビゲーションパネルで「Custom Domains」をクリックします

21.png

3.SSL証明書を作成する際に使用したドメイン名を設定する

22.png

4.エンドポイントはリージョンを選択し、ACM証明書は先ほど作成したものを指定し、ドメイン名を作成をクリックする

23.png

カスタムドメインにAPIをマッピングする

1.左側のカスタムドメイン名設定をクリックします

2.「API マッピング」タブをクリックし、「APIマッピングを設定」をクリックします

24.png

3.新しいマッピングをクリックする

25.png

4.APIマッピングを設定に、以下の情報を入力し、保存をクリックする

  • 「API」: 作成したAPIを選択します
  • 「Stage」: デプロイされているAPIのステージを選択します(通常は「$default」)
  • 「Path」:空白にします

26.png

Route 53でDNSレコードを設定する

1.AWS Management Consoleで「Route 53」サービスを選択し、ホストゾーンをクリックします

27.png

2.パブリックドメインに対応するホストゾーン名をクリックします

28.png

3.「レコードを作成」をクリックし、以下の情報を入力します

  • 「Record name」: SSL証明書で指定したドメイン名を入れます
  • 「Record type」: 「A - IPv4 address」を選択します
  • 「エイリアス」: 有効化にします
  • トラフィックについて、作成したAPIGatewayを指定します

29.png

30.png

4.右下の「レコードを作成」をクリックして、DNSレコードを作成します

これで、Route 53で持っているドメインとAPI Gatewayが連携し、独自ドメインでAPIにアクセスできるようになります

動作確認

ターミナルを立ち上げ、以下のコマンドを入力する
({ドメイン名}、{パス名}を実際のAPI GatewayのURLに置き換えてください)

curl -X POST -H "Content-Type: application/json" -d '{"name": "John", "age": "30"}' "https://{API_URL}/{パス名}?key=age"

30という値が返ってくること

おわりに

AWS Lambda+APIGatewayでのアプリ開発第一歩として、JSONパーサーAPIを構築してみました

この記事がAWS上でのサーバーレス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?