8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

API GatewayをPrivateで作成してみる

Last updated at Posted at 2021-08-20

AWS資格取得に向けて実際にAWSを利用してみるシリーズの投稿です。
今回はプライベートなAPIが作成できるAPI GatewayをPrivateで作成してみる編です。
API GatewayはGUI操作で比較的簡単にAPIを作成できるサービスなので今まであまり困ってはいなかったのですが、いざPrivateなAPI Gatewayを作ってみるといくつかのサービス連携があり、混乱してきたのでその整理をした投稿になります。
興味がある方は読んでみて下さい。

資格試験の勉強法は記事は以下を参照。

AWS初心者がAWS 認定ソリューションアーキテクト – アソシエイト資格試験に合格した時の勉強法
AWS初心者がAWS 認定ソリューションアーキテクト – プロフェッショナル資格試験に合格した時の勉強法

想定読者

  • PrivateなAPI Gatewayを作成したい人

【公式ページ 手順】

  • Amazon API Gateway でのプライベート API の作成
    • API Gatewayにプライベートアクセスさせるまでの設定

  • API Gateway プライベート統合の設定
    • API Gatewayからバックエンドサービスに連携するまでの設定

料金

結論から言うと料金がかかります。
API Gateway自体は基本的にAPI コールと転送データ量に対してのみ料金が発生するので個人運用であればほぼ0円なのですが、PrivateとなるとPrivateLinkとNLBが必要になってくるのでその時間料金が間違いなく発生します。主なものとして

  • PrivateLinkの各AZのVPCエンドポイント1つあたりの料金 (USD/時間):0.014USD
  • NLB料金(USD/時間):0.0243USD

の2つがあります。

作成しても使わない時は止めておけばいいというサービスではない(料金発生を防ぐためには削除する必要がある)ため常時料金が発生します。
ざっくり見積りは、

  • PrivateLink:10.22USD
    image.png

  • NLB:17.74USD
    image.png

です。

トラフィック量に依存する料金設定もあるのでその他詳細は以下の各ページを確認してください。

Private API Gateway全体像

これが意外と理解できなく初めての構築は難航しました。。。
公式ページだと以下の図になっています。

image.png

作ってみた結果、実体として以下のように頭の中を整理すると理解しやすくなると思います。今回の投稿はこの図がすべてです。この図を残しておきたく投稿してます。

【Private API Gateway サービス連携図】
image.png

ポイントは2つ

  • PrivateなAPI GatewayとするためにAPI呼び出し元のフロント部Customer VPCにVPCエンドポイント(PrivateLink)が必要になります。(図[1]の部分)
  • API受信側My VPCは、NLBと連携するためにAPI GatewayとNLBの間にVPCリンクが必要になります。(図[3]の部分)

つまり、PrivateなAPI Gatewayと言えど、自分達のMy VPC内に作られるのではなく、あくまでAmazon API Gateway VPC上に作られるAPI GatewayをVPCエンドポイント(PrivateLink)とVPCリンクで繋ぐことでPrivateとしている仕組みになります。
あとは図の通りですが、PrivateなAPI Gatewayを作る上で、以下の4つは意識した方がいいと思ったのでこんな図にしました。

1.VPCエンドポイント(PrivateLink)
2.API Gateway
3.VPCリンク
4.NLB

それではそれぞれのサービスとAWSコンソール上の設定画面を解説していきたいと思います。
(今回は詳細な構築手順は割愛してます^^;)

1.VPCエンドポイント(PrivateLink)

まずはAWSコンソールのVPCのサービス画面からエンドポイントを作成します。
APIGatewayを作成する時にこのエンドポイントを指定する必要があるので事前に作成しておく必要があります。

image.png

ポイントは2点あって、APIGatewayと連携するためには、

  • エンドポイントタイプは、Interface
  • サービス名は、com.amazonaws.xxxxxxx.execute-api

である必要があります。

2.API Gateway

次はAPIGatewayの作成になります。作成時の画面遷移の中でエンドポイントタイプやエンドポイントを設定することになりますが、作成後の画面だと設定メニューのエンドポイントの設定で確認、変更が可能です。

image.png

「1.VPCエンドポイント(PrivateLink)」で作成したVPCエンドポイントを指定します。

3.VPCリンク、4.NLB

続いてVPCリンクの作成とNLB設定になります。
この2つはほぼ同時設定となるので一緒に記載します。

まずVPCリンクは、APIGatewayのVPCリンクのサービスメニューから作成します。

image.png

VPCリンク作成時にターゲットNLBを設定する必要があるので設定します。
そのため、事前にNLBを作成しておく必要があるのですが、今回NLBの作成は本質ではないため割愛します。

ここまでがAPIGatewayサービスの全体の中にVPCリンクを作成したイメージになります。
次に今回作成した該当のAPIGatewayにVPCリンク、NLBを登録します。
それは以下のように各APIGatewayのメソッド単位で行います。(今回はPOSTメソッドに設定したイメージになります)

image.png

統合タイプをVPCリンクにして、VPCリンクに先に作成したVPCリンクを設定、エンドポイントURLにNLBのFQDN/バックエンドWebサービスのパスを含むURLを設定します。
以上で一連のサービス連携設定が完了です。

APIGatewayで設定変更したら忘れずにステージを指定してデプロイしましょう。デプロイ後に該当ステージで発行されるURLにリクエストを送ると無事に VPCエンドポイント(PrivateLink) -> API Gateway -> VPCリンク -> NLB と連携され、バックエンドWebサービスにアクセスできると思います。

まとめ

今回はPrivateなAPI Gatewayの整理でした。いくつかのサービスが連携されているので意外と混乱するのではないでしょうか?
(実はNLBの中にVPCエンドポイントサービスの連携もありNLBを含めるとさらに混乱します。。。)
最初に書きましたが、今回は【Private API Gateway サービス連携図】がすべてなので作成する時にはこの図をイメージして作成するとスムーズにいくかなと思います。

ここまで読んで頂き、ありがとうございました!

資格取得に向けてAWSサービスを実際に利用してみるシリーズの投稿一覧

とりあえず30分でAWS利用料金の高額請求に備える~予算アラート設定・MFA・料金確認~
AWS ECSでDocker環境を試してみる
Amazon Cognitoを使ってシンプルなログイン画面を作ってみる
AWS NATゲートウェイを使ってプライベートサブネットからインターネットにアクセスする
API GatewayをPrivateで作成してみる(本記事)
AWSのAI(Rekognition/Polly/Transcribe/Comprehend/Translate/Textract)サービスを試してみる
AWS Lambda 同時実行数、エイリアス、環境変数とか実際の現場で使える機能を勉強してみる
AWS Lambda SAMとは?~AWS SAMを使ってPythonのLambdaプログラムを簡単に作成する~
Cloud9でAWS Amplifyの公式チュートリアルGetting startedをやってみる

8
6
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
8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?