Help us understand the problem. What is going on with this article?

VPC内のPrivateリソースにAPIGateway経由でアクセスする

More than 1 year has passed since last update.

tl;dr;

VPC内にNLBで展開すれば,VPC integrationを使って,API GatewayでVPC内で動作しているinternalなAPIサーバを叩くことができる.

やりたいこと

これは過去の話ですが,APIGateWayを通してのリクエストを実装する時,Lambdaや直接外部に公開しているエンドポイント経由で叩くといった方法がありますが,それらはVPC内のリソースを叩くことができませんでした.

そこで,VPC integrationという機能が2017 12月くらいに発表されました.これは,その名の通り(?)API Gatewayの統合レスポンスとして特定のVPCを指定することができます.VPCはprivateなsubnetだとしても指定可能なので,実装したAPIサーバーへのアクセスをAPI Gateway経由でのみできるようになります.

この記事ではこの方法を解説したいと思います.

手順

1.VPCを作成する

  • VPCを作成します.
  • public / privateなサブネットに切るなどありきたりな構成で問題ないです.

2.VPC内にEC2インスタンスを立てる.

  • ここに,実装したAPIサーバーを展開するといいです.
  • VPCのprivate subnetに展開するといいと思います.

3.ELBをつくる.

  • ここからが本番です.
  • NLB(Network Load Balancer)を選択してください.

ELB

  • これの真ん中のやつです.
  • NLBでないとAPI GateWayから叩く事ができないので注意してください.
  • 上で作成したEC2をこのロードバランサーにぶら下げてください.

a.余談

  • ここまでの流れをElasticBeanstalkで作成するなら,eb cliを使うことをおすすめします.
  • eb cliでは展開するVPCやAZを選択できたり,ELBのタイプも--elb-type networkとするだけで簡単に作成できます.また,defaultでinternalなものが作成できるので繁雑なウェブコンソールを使うよりもこちらのほうがおすすめです.

4.VPC リンクをつくる.

  • API GatewayのウェブコンソールにVPCをリンクというタブがあるのでこれを選択します.
  • すると下の図のような画面がでるので,適当な名前,説明を振り,先程作成したNLBを選択します.

vpclink

  • VPCリンクの作成がわりと遅いのでお茶でも飲みながら待ちます.

5.API Gatewayを作成する.

  • swaggerとかで読み込むなり,自分で頑張ってぽちぽちするなりしましょう.
  • 統合リクエストを編集します.あるリクエストの統合リクエストを見ると以下のような画面になります.

api gateway

  • ここで統合タイプでVPCリンクを,その下のVPCリンクでは先程,上で作成したものを選択します.
  • 正しく動作するかは,「テスト」を使うといいです.単純にパススルーするわけではなくヘッダを変更したり,認証はさんだりするケースがあると思うのでそれらの挙動が正しいかを調べるためにもこれは効果的です.(レスポンスがどう処理されているかが見えるのでハッピー)

完成

  • 完成です.これでlambda等を使うことなく,VPCを叩く事ができるようになりました.

なにが嬉しいの?

  • APIサーバーを完全にinternalにできる.
    • 不用意に外に晒すの怖い><
    • API Gatewayで適切な認証を噛ますことも可能.

参考

【新機能】API Gateway VPC integrationを使ってみた #reinvent | Developers.IO
Amazon API Gateway でプライベート VPC とのエンドポイント統合をサポート - AWS

chigichan24
プログラミングしゅき.美味しいご飯がすき. https://www.wantedly.com/users/35342269 https://github.com/chigichan24
https://chigichan24.hatenablog.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした