プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • AWS
  • 【AWS】「API Gateway」でREST APIを作成する。
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【AWS】「API Gateway」でREST APIを作成する。

11.11

  • miyabisan2
  • コメントを書く

この記事は3分で読めます

API Gatewayとは?

LambdaやEC2等のバックエンドへのAPIを提供するサービスです。APIの管理や実行を容易にする仕組みです。アプリからAPIリクエストを受け付けるエンドポイント(Webhook URL)として構築する。

APIの管理面ではリソース(usersなど)とメソッド(POSTなど)の組み合わせによりAPIを作成できます。

設計例

一番よくあるAPIGateway + Lambdaであれば以下のような作りになります。

ステージ

APIをデプロイする環境名を指します。API Gatewayにリクエストする際はURLにこのステージ名を含めてリクエストします。(例:https://ドメイン名/ステージ名/users?id=001)

マッピングテンプレート

HTTPリクエストのリクエストパラメータをLambda関数内で利用できるように整形するためのテンプレートを指します。

例えば、以下のようにJSON形式で定義しておけばURLパラメータをlambda関数内で利用できるようになります。

1
{"id": "$input.params["id"]"}

基本的な機能

バックエンドを呼び出す。

呼び出すバックエンドとしては下記のように様々なサービスを呼び出すことが可能です。

  • Lambda関数
  • EC2
  • その他AWSサービス
  • 外部リソース

REST API

「構築」をクリックします。

「新しいAPI」にチェックをいれる。

任意のAPI名を入力して右下の「APIの作成」をクリックします。

「アクション」→「リソースの作成」をクリックします。

任意のリソース名を入力して「リソースの作成」をクリックします。

メソッドの作成

「アクション」→「メソッドの作成をクリックします。

リソースの下にプルダウンが表示されるので「POST」を選び「チェックマーク」をクリックします。

APiが呼ばれた際に紐づけたいLambda関数名(以下例でいえばusers-post-function)を入力して「保存」を押します。

以下のようにAPIがリクエストした後の流れが表示されます。マッピングテンプレートの作成をするために「統合リクエスト」をクリックします。

マッピングテンプレートの作成(リクエストパラメータをLambda関数で取得できるようにするために)

「マッピングテンプレートの追加」をクリックする。

Content-Typeに「application/json」を入力します。

以下のポップアップが出てきますが、「はい、この統合を保護します」をクリックします。

以下マッピングテンプレートの入力欄が出てくるので以下入力して「保存」します。(リクエストパラメータのbody部を取得してエスケープするという処理内容になっています。)

1
2
3
{
    "body" : "$util.escapeJavaScript($input.body)"
}

「アクション」→「APIのデプロイ」を選択してAPIをデプロイします。

以下のようにデプロイ先のステージを作成して、デプロイします。

そうすると以下のようにAPIを呼び出すためのURLが発行されます。

Web Sockets

APIの設定、デプロイ

認証、認可、アクセス制御

流量制御と保護(スロットリング)

流量制御の他、バックエンドを保護するためのスロットリング等もあります。

キャッシング

キャッシングしてバックエンドの負荷を低減することも可能です。

エンドポイントタイプ

「REST API」の場合のみエンドポイントを3種類から選択することが可能です。

エッジ最適化

  • REST APIのみ
  • Publicに公開される。
  • 一旦エッジロケーション(CloudFront)にルーティングされる。

リージョン

  • REST API、HTTP API、WebSocketで利用できる。
  • Publicに公開される。
  • リージョンに直接ルーティングされる。(リクエスト元が同一ならレイテンシを削減できる。)

プライベート

  • REST APIで利用できる。
  • Publicからのアクセスはできず保護できる。
  • VPCエンドポイント経由でのみアクセスが可能

サービスプロキシ機能

APIをプロキシとして受ける機能です。これを使えば例えばLambdaファンクションを非同期に呼び出すといったことも可能になります。バックエンドはLambdaを元、SQS、Kinesis等の幅広いAWSサービスを送付先とすることが可能です。

API処理別設計思想

取得系(GET系)の場合

API GatewayでキャッシュするようにしてなるべくバックエンドのLambdaを呼び出すことなくレスポンスを返せるのでそのようにするのが良いです。

更新系(PUT系)の処理

AWS Lambdaで直接記述するのではなく、API Gatewayはサービスプロキシとして構成することも可能なのでAmazon SQS、Amazon Kinesis(一旦バッファリングするようなサービスたち)に流すようににしてイベント処理として非同期でLambdaで処理していくようにすると良いです。

スポンサーリンク
  • 2020 11.11
  • miyabisan2
  • コメントを書く
  • AWS
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2021 11.28

    【AWS】コンテナアーキテクチャパターン

  2. 2020 12.28

    【AWS】EC2「ユーザーデータ」、「インスタンスメタデータ」について

  3. 2020 06.09

    【AWS】EC2の構築手順、SSH設定手順

  4. 2020 02.24

    【AWS】「S3」、設定など

  5. 2021 01.10

    【AWS】「エッジロケーション」について

  6. 2023 08.14

    【AWS】SAMによりローカルで開発した内容をlambdaに反映する方法(Windows)

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【AWS】「Lambda」、関数の定義

【Ruby on Rails】「Capistrano」…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー