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-04-06

LambdaとAPI Gatewayを連携してみる。

・パラメータ付きのリクエストをAPI Gatewayが受け取り、Lambdaで受け取ったパラメータを処理し、結果を返すAPIのサンプルを作成してみた。
・今回はyear,month,dayの3つのパラメータを受け取って、「平日」か「祝日」かを判定する処理を作る。
・API Gatewayの種類は「Rest API」とする。

要件

入力:year, month, day(例えば 2025, 4, 4)
処理:指定された日付が 土日 or 日本の祝日 なら「休日」、それ以外は「平日」
出力:date:${year-month-day}、isHoliday(土日かどうか?): true | false

Lambdaで関数を作成

1. AWSコンソール画面でLambdaに遷移
2. 「関数の作成」を押下
3. 「一から作成」を選択し、関数名を記入。ここではNode.js 22.xを選択
4. 関数の作成ボタンを押下

image.png

5. コードの作成
コードはローカルPC上で作成したものを、zip形式でアップロードするやり方をとる。
※ローカルPCはmacを想定

npm init -y
npm install japanese-holidays
※平日か土日かを判定するライブラリに「japanese-holidays」を使ってみる。

上記ライブラリと同一階層に「index.js」を作成

const Holidays = require('japanese-holidays');

exports.handler = async (event) => {

  const params = event.queryStringParameters || {};
  const year = params.year;
  const month = params.month;
  const day = params.day;

  if (!year || !month || !day) {
    return {
      statusCode: 400,
      body: JSON.stringify({ error: "year, month, day パラメータが必要です。" })
    };
  }

  const date = new Date(year, month - 1, day); // JSの月は0始まり
  const dayOfWeek = date.getDay();
  const isWeekend = (dayOfWeek === 0 || dayOfWeek === 6);
  const holidayName = Holidays.isHoliday(date);
  const isHoliday = isWeekend || holidayName !== undefined;

  return {
    statusCode: 200,
    body: JSON.stringify({
      date: `${year}-${month}-${day}`,
      isHoliday: isHoliday,
      reason: isWeekend ? "土日" : (holidayName || "平日")
    })
  };
};

上記一式をzipで固めて、Lambdaにアップロードする。

API Gateway側

1. AWSコンソール画面でAPI Gatewayに遷移。
2. 「APIを作成」ボタンを押下
3. APIタイプは「REST API」を選択し、構築ボタンを押下
  APIの詳細画面に遷移するので、「新しいAPI」「任意のAPI名」を設定。その他はデフォルト設定で「APIを作成」ボタンを押下する。
4. 続いて「メソッドを作成」ボタンを押下。メソッドタイプをGETにし、「Lambda関数」を選択、Lambda関数は事前に作成していたLambda関数を選択する。その他はデフォルト設定で「メソッドを作成」ボタンを押下する。
6. 「APIをデプロイ」ボタンを押下
7. ステージを「新しいステージ」、ステージ名を「dev」に選択し、デプロイボタンを押下する。

動作確認

{"date":"2025-4-7","isHoliday":false,"reason":"平日"}

{"date":"2025-4-6","isHoliday":true,"reason":"土日"}

その他

リクエストがLambda関数には到達しているが、パラメータが受け取れずに原因が分からず、少しハマった。原因はAPI Gatewayの統合リクエスト設定の「Lambda プロキシ統合」をtrueにする必要があることだった。

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?