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?

API GatewayからLambdaを呼び出してみた

Last updated at Posted at 2025-12-08

本記事は以下アドベントカレンダー8日目の投稿です。
投稿が遅れてしまい申し訳ありません。

はじめに

以下のようなアプリケーションを業務で作成したので、
そのアプリケーションを一般化してサーバレスで申請系のアプリとして数回の記事に分けて作るイメージです。
今回は構成図の中でAPI GatewayからLambdaを呼び出すところ(疎通確認)まで作りたいと思います。
※構成図が突貫工事のためひどいのでいつか作り直します。。。

構成図.jpg

本記事の前提条件は次のとおりです。

  • リージョンは ap-northeast-1(東京)
  • VPC は AWS アカウント作成時に自動作成されるデフォルト VPC を使用
  • API Gateway は REST API(HTTP API ではない)
  • 疎通確認用の EC2 は同じ VPC の任意のサブネットに作成済み

Lambda関数の作成

マネジメントコンソール上でLambdaと検索
image.png

関数の作成

関数の作成から関数を作成する。
関数名はvalidation-app-v1-test-requestにしましたが、皆さんは任意の名前を付けてください。
その他の項目はデフォルトで大丈夫です!
image.png

今回は疎通確認までなので、Lambdaは殆どデフォルト

lambda
import json

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'body': json.dumps({
            'message': 'Validation OK',
        })
    }

VPCエンドポイントの作成

次にマネジメントコンソールからVPCを検索する。
(エンドポイントがすでに作成されている方はスキップしていただいて結構です。)
image.png

エンドポイントの設定

エンドポイントを選択
image.png

エンドポイントを作成を選択
image.png

名前タグ:my-test-01
名前タグは皆さんの任意の名前で大丈夫です。
タイプはAWSのサービスを選択
image.png

ネットワーク設定

任意のVPCを選択してください。
デフォルトでも問題ありません。

今回は検証用ということもあり、特別なネットワーク要件はないのでデフォルト VPC を使っています。
本番環境では、パブリック/プライベートサブネットを分けた専用の VPC を用意することをおすすめします。

DNSレコードのIPタイプはIPv4です。
image.png

サブネット

サブネットはすべて選択してください。
image.png

セキュリティグループ

sg-067のdefaultを選んでください。
image.png

ポリシー

ここはフルアクセスでOK

VPC エンドポイントポリシーはフルアクセスのままにしておき、
実際のアクセス制御は API Gateway のリソースポリシー側で行うのがシンプルだからです。

image.png

ここまで来たら作成を実行!
エンドポイントが作成されたら、IDをメモする!
image.png

API Gateway

API の作成を選択
image.png

今回はREST API プライベートで作成します。
image.png

API名:my-test-api-gateway
任意のAPI名を設定します。
image.png

VPCエンドポイントIDは先ほど作成したエンドポイントを選択します。
image.png

残りの設定はデフォルトのままAPIを作成!

リソース

リソースを作っていきましょう
image.png

リソース名にapiと入れて作成します。
image.png

リソースが以下になるように、階層ができるたびにその階層でリソースを追加していく。
image.png

メソッドの作成

requestを選択した状態でメソッドの作成を選択する。
image.png

メソッドタイプ:POST
Lambdaプロキシ結合:true
Lambda関数:作成したLambdaを選ぶ(validation-app-v1-test-request)
image.png

リソースポリシー

リソースポリシーを編集する。
左側のメニューからリソースポリシーを選択する。
image.png

以下の値は自分の環境に合わせて置き換えてください。

プレースホルダー 意味
123456789012 自分の AWS アカウントID
abcdefghij API Gateway の API ID
vpce-0123456789abcdef0 作成した VPC エンドポイント ID
リソースポリシー
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowInvokeFromSpecificVPCEndpoint",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:ap-northeast-1:123456789012:abcdefghij/*",
      "Condition": {
        "StringEquals": {
          "aws:SourceVpce": "vpce-0123456789abcdef0"
        }
      }
    }
  ]
}

APIをデプロイする
image.png

ステージ

ステージの作成を選択

image.png

ステージ名をdevとして作成します。
デプロイ:先ほどデプロイした時間のデプロイがあるので選択する。
その他:デフォルトでOKです。
image.png

疎通確認

以下は VPC 内の EC2 から Private REST API を呼び出すテストコマンドです。
{YOUR_API_ID} の部分は自分の API Gateway の ID に置き換えてください。

コマンド
curl -i \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"test":"ok"}' \
  https://{YOUR_API_ID}.execute-api.ap-northeast-1.amazonaws.com/dev/api/v1/test/request

レスポンスに以下のようなものがあれば成功です!
HTTP/1.1 200 OK
{"message":"Validation OK"}

まとめ

本記事では、サーバレスな申請系アプリの土台として、

  • バリデーション用の Lambda 関数を作成する
  • API Gateway の Private REST API を作成する
  • execute-api 用の VPC エンドポイントを作成し、リソースポリシーで紐付ける
  • VPC 内の EC2 から curl で疎通確認を行う

というところまでを作りました。
大変だったと思いますが、APIの疎通確認までできました。

次回以降は、この土台の上に追加のAPIや実際のLambdaとワークフローを作成していきたいと思います。

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?