AWSでLBの手間ににAPIGatewayを配置する

投稿者: | 2018年11月9日

下記の図のようにロードバランサの手間にAPIGatewayを配置する構成の構築方法です。

APIGatewayはNLB(NetworkLoadBalancer)とのみ接続が可能です。
つまり、EC2インスタンスで公開しているAPIに対してAPIGatewayを経由させたい場合はNLBを間に挟む必要があります。
まずはNLBを作成します。
NLBはLB作成時にメニューとして表示されています。

適当に名前を付けて「内部向け」を選択。
サブネットは非公開の領域を設定します。

ルーティングの設定で新しいターゲットグループを作成します。
APIGateWayと繋ぐ場合は「TCP」を選択しておきます。

次の画面で付けたいインスタンスとヘルスチェックを入力すれば完了です。
なお、今回はテスト用インスタンスとしてapacheにtest用のファイルを置いただけのインスタンスを使っています。
※このインスタンスのセキュリティグループは必要なポート(今回は80)を「0.0.0.0/0」で空けておく必要があります
ここまででNLBの設定が完了です。
続いてAPIGateWayの作成ですが、その前にNLBとAPIを繋ぐためのVPCリンクを作成します。
VPCリンクはAPIGatewayの中にあるメニューの下の方にあります。
ターゲットNLBに作成したNLBを設定します。

なお、リンク完了には5分ほどかかりますのでしばらく待つ必要があります。
ステータスが「リンク中」から「利用可能」になれば使用可能です。

続いてAPIGatewayの作成になります。
今回作成するAPIGatewayはインターネットに公開するものなのでエンドポイントタイプリージョンで作成します。
海外からのアクセスを考えている場合はエッジ最適化を選ぶことでCloudFrontを利用してくれるようなのでレスポンスが早くなります。

作成したAPIGatewayは空っぽなのでここからAPIを追加していきます。
今回は下記のようなURLでGETメソッドのAPIを作成してみます。
https://ホスト名/v1/api/test
まずはアクションからリソース作成を選び「api」を作成し、その下に「test」を作成します。
なお、リソースパスで指定した値がURLに反映されます。
続いてメソッド作成を選択肢しGETを選択します。
そうするとセットアップの項目が表示されますので必要な値を設定します。
統合タイプをHTTP、エンドポイントをNLBのエンドポイント+「api/test」とURLを設定します。

メソッドの作成が完了するとこのような画面になります。

今セットアップをした画面が「統合リクエスト」の部分になります。
他の項目からAPIのキーを設定したり、レスポンスを設定したりできるようですが今回は特に何も設定しない形とします。
(APIキーのよるアクセス制限やIPフィルタリング等は別の記事で紹介予定)
最後にAPIをデプロイすれば設定完了です。
デプロイはアクションメニューから実施できます。
初回デプロイ時はデプロイ場所を作成してませんので新しくステージを作成します。
ステージはデプロイ環境であり、テスト用と本番用等複数APIのURLを作成することができます。

デプロイが完了するとURLが発行されます。
なお、カスタムドメイン名を設定することでURL(ホスト名はAPIバージョン等)を自由に指定できます。

以上がLBの手前にAPIGatewayを配置する方法になります。
次回以降、APIGatewayについてその他の設定についても記述していきます。

AWSでLBの手間ににAPIGatewayを配置する」への2件のフィードバック

  1. kami

    こんにちは。
    > 今回はテスト用インスタンスとして
    > apacheにtest 用のファイルを置いただけのインスタンスを使っています。
    test 用のファイルとはどのようなファイルでしょか。
    以下のファイルを設置とてみたのですが、
    /api/test – GET – メソッドの実行で ステータス: 500 エラーになってしまいました。
    /var/www/html/api/test/index.php
    <?php
    $para0 = '';
    if( ! empty( $_GET["para0"] ) ) {
    $para0 = urldecode( $_GET["para0"] );
    }
    print "para0 = " . $para0 . "”;
    ?>

    返信
  2. 猫のプロトコル

    htmlすら記述してないただ一行「test」と記述したファイルです。
    500エラーなのでコンテンツファイルの問題じゃないかもしれません。
    apacheのログを確認し、アクセスログが出力されているかどうか確認するのがよさそうです。
    アクセスログが出てない場合はNLBかAPIGatewayではじかれている可能性が高そうです。

    返信

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA