LoginSignup
28
15

More than 3 years have passed since last update.

Lambda統合とHTTP統合の違いを作って理解する

Posted at

概要

AWSデベロッパーアソシエイトを受けていると、API Gatewayの統合タイプとして以下4つの違いを問われることがよくあります。

統合タイプ
Lambda統合, Lambda非プロキシ統合
Lambdaプロキシ統合
HTTP統合, HTTP非プロキシ統合
HTTPプロキシ統合

このうち、Lambda統合とHTTP統合の違いは以下の通りです。Lambda統合はよく構築する機会がありますが、HTTP統合を作る機会が少ないので、今回作ってみようと思います。

  • Lambda統合:バックエンドとして、Lambda関数と統合する
  • HTTP統合:バックエンドとして、EC2等で自作したAPIと統合する

なお、プロキシ統合と非プロキシ統合の違いについては、以下の記事が大変わかりやすかったので、参考にしてください。

HTTP統合

まずバックエンドとして、パブリックサブネットに簡易なAPIを作成します。今回はEC2で作ります。

server.py
from flask import Flask
from hello import get_hello

app = Flask(__name__)

@app.route('/hello', methods=['GET'])
def local_endpoint():
    return get_hello()


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

hello.py
import json

def get_hello():
    message = "Hello, good morning"
    return_json = json.dumps({"message": message})

    return return_json

上記ソースをEC2に配置して、以下コマンドを打っていけば簡易なAPIが構築できます。

sudo yum install -y python3    # Python3のインストール
sudo pip3 install Flask        # Flaskのインストール
chmod 755 *.py                 # 実行権限の付与
python3 server.py              # APIの起動 

なお、上記のソースで疎通確認する際には、EC2のセキュリティグループで5000番ポートを許可しましょう。

疎通確認結果
curl http://XXX.XXX.XXX.XXX:5000/hello    # XXXはEC2のパブリックIPアドレス
{"message": "Hello, good morning"}

あとはこのエンドポイントのURLをAPI Gatewayのメソッド作成時に指定します。
image.png

これをデプロイしたら、API GatewayのエンドポイントでAPIを呼び出せます。
APIのビジネスロジックをEC2側に寄せて、スロットリング制限等はAPI Gatewayの機能を利用する、といった活用ができるかと思います。
image.png

なお、実際はバックエンドにNLBなど挟んでロードバランスする構成が多いようです。
また、プライベートなサブネットに構築したAPIにアクセスする場合には、VPCリンクを活用します。以下の記事が大変参考になります。

API Gateway経由でのみアクセス可能なAPIをECSで構築する

終わりに

デベロッパーアソシエイトを勉強中で違いがよくわからない人は、本記事のように手を動かしてみるとその違いがわかると思います。

参考

API Gateway API 統合タイプを選択する

28
15
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
28
15