Latest / M365.FM – Microsoft 365・Copilot・AI ポッドキャスト(日本語) / APIゲートウェイをやさしく解説:マイクロサービスのルーティング・セキュリティ・レート制限、本当に必要?(AI吹き替え)
Transcript
- 0:00マイクロソフト365、コパイロット、AI、Azure、そして働き方の未来を築く人々が集う10日間への準備はいいですか?
- 0:07この1月、M365コンがさらにパワーアップして帰ってきます。
- 0:12世界中のMVPや業界エキスパートによるライブセッション、実演でも実践的な知識を体験しましょう。
- 0:18ありきたりなスライドや、終わりのない専門用語の羅列はありません。
- 0:22コパイロットスタジオ、AIエージェント、ファブリック、セキュリティ、ガバナンス、自動化といった現実の課題に取り組みます。
- 0:29ITプロフェッショナル、開発者、ビジネスリーダーなど、あらゆる方に向けたセッションを用意しています。
- 0:3510日間の充実した期間で、多様な技術を学び、グローバルなコミュニティとつながることができます。
- 0:40ライブで視聴し、実践的な知見を組織に持ち帰りましょう。
- 0:442027年1月、10日間、一つのマイクロソフトコミュニティ。
- 0:49現在、登録受付中です。
- 0:51m365コン.NETにアクセスして、今すぐ参加枠を確保してください。
- 0:56URLはm365コン.NETです。
- 0:59m365コン.NETから今すぐ登録を、1月のライブでお会いしましょう。
- 1:05アプリを構築し、サービスを追加していくうちに、トラフィックの管理が悪夢のように複雑になっていませんか?
- 1:10では、APIゲートウェイとは何か、そして本当にそれが必要なのでしょうか?
- 1:14このエピソードの終わりには、APIゲートウェイの役割、管理の混乱を解決する理由、そして必要性の判断基準が理解できます。
- 1:22まずは問題点から始め、次に構成要素、そしてそれらがどう組み合わさるのかを見ていきましょう。
- 1:27問題は、入り口が多すぎること、です。
- 1:29急成長している会社を経営していると想像してください。
- 1:323階には営業チーム地下には経理、裏の胸にはIT部門があります。
- 1:37ここで、各部署に独自の玄関と電話番号があり、互いに連携しない警備員が配置されていると考えてください。
- 1:43あなたが荷物を届けに来た訪問者だとしたら、かなり大変なはずです。
- 1:46どのドアを使い、どの警備員に話しかけ、休憩中にはどうすればいいのかを正確に把握しなければなりません。
- 1:50アプリが複数のバックエンドサービスを持ち、各クライアントがそれぞれに直接呼び出しを行うと、まさに同じことが起こります。
- 1:56クライアントは、モバイルアプリであれウェブサイトであれ、全サービスの場所、認証方法、障害時の対応を知っておく必要があります。
- 2:04各サービスがそれぞれセキュリティ、レート制限、エラーハンドリングを個別に対処しなければなりません。
- 2:09これは重複作業であり、一貫性が失われやすくなります。
- 2:12銀行を例に挙げてみましょう。
- 2:14口座支払い、ローン、不正検知のためにそれぞれ独立したサービスが存在します。
- 2:17従来の方法では、各サービスが直接公開されていました。
- 2:19モバイルアプリは、4つの異なるURL、4つの認証方法、そして4つのエラー処理方法を知っておく必要があります。
- 2:25これは複雑さが4倍、問題が起こる可能性も4倍になるということであり、APIゲートウェイはそのような混乱を解決するために設計されています。
- 2:32では、解決策は何でしょうか?
- 2:33APIゲートウェイとは何でしょうか?
- 2:35APIゲートウェイをホテルのフロントデスクのように考えてみてください。
- 2:38ホテルに入るとき、清掃係がどの階にいるか、キッチンがどこにあるか、メンテナンスチームへの連絡方法を知る必要はありません。
- 2:44ただフロントデスクに行き、必要なことを伝えれば、あとはすべて彼らが対応してくれます。
- 2:48彼らはあなたの要求を適切な担当者に回し、滞在が許可されているかを確認し、基本的な要求なら自分たちで処理することさえあります。
- 2:54APIゲートウェイはソフトウェアに対しても同じことを行います。
- 2:57それは、クライアントとバックエンドサービスの間に位置する単一の入り口です。
- 3:01すべての要求は、まずゲートウェイを通ります。
- 3:03ゲートウェイは、要求をどこへ送るか、許可するかどうか、そして何を返すかを判断します。
- 3:07これは新しい考え方ではありません。
- 3:09リバースプロ機種は何十年も前から存在していますが、マイクロサービスにおいてAPIゲートウェイは不可欠なものとなりました。
- 3:14アプリを多数の小さなサービスに分割すると、突然多くの扉ができることになります。
- 3:17ゲートウェイは、そのための正面玄関を一つ用意してくれます。
- 3:19Azureの世界では、Azureアピマネジメントが完全なプラットフォームであり、ゲートウェイはそのトラフィックを処理する中核コンポーネントです。
- 3:24しかし、このパターンはどこでも共通です。
- 3:26単一の入り口、一元化された制御です。
- 3:29すべての要求がここに入ってきます。
- 3:30ゲートウェイが要求を確認し、ルーティングし、応答を返します。
- 3:33クライアントがバックエンドサービスと直接通信することはありません。
- 3:35クライアントはゲートウェイとだけ通信します。
- 3:37具体的にどういうことか、詳しく見ていきましょう。
- 3:39最も基本的な役割であるルーティングから始めます。
- 3:42パート1 トラフィックのルーティングです。
- 3:44APIゲートウェイの最も単純な仕事はルーティングで、各要求を適切なサービスに誘導することです。
- 3:49ウェブサイトの仕組みについて考えてみてください。
- 3:50リンクをクリックすると、ブラウザが要求を送信します。
- 3:53その要求にはパスが含まれています。
- 3:54パスがユーザーズなら、ゲートウェイはそれをユーザーサービスに送るべきだと判断します。
- 3:57オーダーズなら、注文サービスに送ります。
- 4:00ゲートウェイはパスを読み取り、送信先を特定して転送します。
- 4:03ゲートウェイがなければ、クライアントはすべてのサービスのURLを知っておかなければなりません。
- 4:07モバイルアプリには、ユーザーサービス、注文サービス、決済サービス、カタログサービスの住所が必要です。
- 4:11それでは管理すべきURLが多すぎます。
- 4:13もしそれらのアドレスのいずれかが変更されれば、すべてのクライアントを更新しなければなりません。
- 4:17ゲートウェイがあれば、クライアントはURLを一つ知るだけで済みます。
- 4:19ゲートウェイのアドレスです。
- 4:20クライアントはサービスがどこにあるかを気にする必要はありません。
- 4:23ゲートウェイにリクエストを送るだけで、残りはすべてゲートウェイが処理します。
- 4:26これはAPIゲートウェイの最も一般的なユースケースの一つ、リソースベースのルーティングです。
- 4:30Apache APIsIXの研究でも、これが明確に挙げられています。
- 4:33パスやHTTPメソッド、ヘッダー、さらにはクライアントの地理的位置情報に基づいてルーティングします。
- 4:37ヨーロッパからのリクエストであれば、ヨーロッパのデータセンターへ振り分けることができます。
- 4:41米国からのリクエストであれば、米国のデータセンターへ送られます。
- 4:44クライアントは、こうした処理が行われていることを一切知りません。
- 4:46ただ迅速なレスポンスを受け取るだけです。
- 4:47ルーティングはバージョニングの管理にも役立ちます。
- 4:49例えば、ユーザーサービスの新しいバージョンを作成したとしましょう。
- 4:51古いクライアントは引き続き、V1、ユーザーズを使い、新しいクライアントは、V2、ユーザーズを使います。
- 4:56ゲートウェイはこれらを異なるバックエンドへと振り分けます。
- 4:58新しいバージョンを導入する間も、古いクライアントは動作し続けます。
- 5:01クライアントに影響を与えずにバックエンドを変更できるのです。
- 5:04これは実際のユーザーを抱えるライブアプリケーションを管理する上で非常に重要です。
- 5:07eコマースプラットフォームを例に考えてみましょう。
- 5:09カタログ、ショッピングカート、チェックアウト、ユーザーアカウントの各サービスが個別に存在します。
- 5:13ゲートウェイがなければ、モバイルアプリは4つの異なるURLを把握しなければなりません。
- 5:17ゲートウェイがあれば、URLは1つで済みます。
- 5:19ゲートウェイはパス、カタログ、カート、チェックアウト、アカウント、お読み取り、各リクエストを適切なサービスへ送ります。
- 5:24単純なルーティングは簡単な部分です。
- 5:26次の役割こそが、真の有用性を発揮する部分です。
- 5:29パート2、フロントドアにおけるセキュリティです。
- 5:31すべてのAPI呼び出しをチェックする必要があります。
- 5:33誰がこのリクエストを行っているのか、適切な権限を持っているのか、
- 5:36ゲートウェイがない場合、各サービスがそれぞれ認証を処理しなければなりません。
- 5:39それは作業の重複を意味し、ミスも起こりやすくなります。
- 5:42あるサービスはトークンを適切に確認しても、別のサービスは手順を省略したり、
- 5:54処理するからです。
- 5:55チェックする場所も、強制する場所も、ポリシー変更時に更新する場所も一箇所にまとまります。
- 5:59これは主要なセキュリティベストプラクティスです。
- 6:01ゲートウェイはすべてのリクエストにおいて、APIキー、JWT、オーストークン、または証明書を検証します。
- 6:07すべてのリクエストが同じチェックを通ります。
- 6:09例外はありません。
- 6:10ゲートウェイはルールを適用することも可能です。
- 6:12このAPIキーは読み取り用エンドポイントのみ呼び出せる、といった設定が可能です。
- 6:15あるいは、このクライアントはカタログサービスにはアクセスできるが、決済サービスにはアクセスできない、といった制御も可能です。
- 6:19ゲートウェイレベルで細かな権限を定義すれば、それらが自動的に適用されます。
- 6:23バックエンドサービスは、認証を気にする必要がありません。
- 6:26リクエストを処理してデータを返すだけです。
- 6:28ここが重要なポイントです。
- 6:30ゲートウェイは、問題が発生した際にアクセス権を取り消す唯一の場所となります。
- 6:33クライアントのAPIキーが漏えいした場合、ゲートウェイで無効化します。
- 6:36変更は一度だけ、これで完了です。
- 6:38すべてのサービスを更新したり、再起動したりする必要はありません。
- 6:40そのキーからの次のリクエストは即座に拒否されます。
- 6:43具体的な例を挙げましょう。
- 6:44銀行には決済サービスと請求サービスがあります。
- 6:46請求システムへの書き込み権限が必要なのは、決済サービスだけです。
- 6:49ゲートウェイがそれを強制します。
- 6:51クライアントが誤ったエンドポイントから請求システムへ書き込もうとすると、ゲートウェイがブロックします。
- 6:55請求サービスは、そのリクエストを検知すらしません。
- 6:58ゲートウェイは相互TLSやWAF統合をサポートし、より強固な保護も可能です。
- 7:02しかし本質的には、これが最初の防御ラインとなります。
- 7:04セキュリティは重要ですが、一度に大量のリクエストが来た場合はどうでしょうか。
- 7:08パート3 トラフィック管理です。
- 7:101万人のユーザーが同時にアプリにアクセスしたらどうなるでしょう?
- 7:13プラッシュセールや製品の爆発的なヒット、あるいはただの火曜日に全員が一斉にログインしたのかもしれません。
- 7:20ゲートウェイがなければ、バックエンドサービスは直接攻撃を受け、クラッシュする可能性があります。
- 7:24ゆっくりではなく、一気にです。
- 7:26そこでトラフィック管理の出番です。
- 7:28ゲートウェイは、各クライアントのリクエスト数を制限できます。
- 7:32レート制限やスロットリングは標準的な機能です。
- 7:34ゲートウェイでルールを設定すれば、それが適用されます。
- 7:37バックエンドサービスが急激な負荷を感じることはありません。
- 7:39ユーザーごと、APIキーごと、あるいはIPアドレスごとにコータを設定できます。
- 7:42例えば、APIに無料プランがあるとします。
- 7:44無料ユーザーには1時間あたり100リクエストを許可します。
- 7:47プレミアムユーザーには1万リクエストを許可します。
- 7:49ゲートウェイはすべてのリクエストを追跡し、入り口でその制限を適用します。
- 7:52無料ユーザーが上限に達すると、ゲートウェイは丁寧な再試行メッセージを返します。
- 7:56バックエンドサービスは、リクエストがあったことすら知りません。
- 7:59有料顧客へのサービス提供を快適に継続できます。
- 8:02ゲートウェイは負荷分散も行います。
- 8:04同じサービスを複数インスタンスで実行している場合、ゲートウェイがリクエストを分散させます。
- 8:09最初のインスタンスにリクエスト、次は2番目、その次は3番目という具合です。
- 8:12これは自動的に行われます。
- 8:14また、あるインスタンスが停止してもゲートウェイが別へルーティングします。
- 8:16クライアントは気づきません。
- 8:17彼らはただレスポンスを受け取るだけです。
- 8:19ヘルスチェックを伴う負荷分散が円滑な運用を支えます。
- 8:22ゲートウェイは各インスタンスにピンを打ち、稼働を確認します。
- 8:25停止していれば、そこへのトラフィックを停止します。
- 8:27これは高トラフィックなAPIにとって特に重要です。
- 8:30ゲートウェイがないと、急激なトラフィック増はサービスに直接影響します。
- 8:33ゲートウェイがあれば、スパイクはまずゲートウェイに当たり、そこで吸収、分散されるため、サービスがパンクするのを防げます。
- 8:40では、届いたデータが想定と違う場合はどうでしょうか。
- 8:44パート4 データ変換です。
- 8:46クライアントが送るデータが、バックエンドの期待するものと一致しないことがあります。
- 8:49例えば、クライアントはJSONで送るのに、バックエンドはXMLしか理解できない場合などです。
- 8:53あるいは、フィールド名が一致しない場合もあります。
- 8:55クライアントは、ファーストネームを使っているのに、バックエンドは、ファーストアンダーバーネームを期待しているようなケースです。
- 8:59こうした不一致はシステムを壊してしまいます。
- 9:01従来の方法では、すべてのクライアントを修正するか、バックエンドを書き直す必要がありました。
- 9:04あまり良い方法ではありません。
- 9:05ゲートウェイを使えば、バックエンドに届く前にデータを変換できます。
- 9:08翻訳者のようなものだと考えてください。
- 9:10中央に配置され、行きと帰りのデータ、あるいはその両方を変更できます。
- 9:13これがリクエストおよびレスポンス変換の要点です。
- 9:15実際の例を挙げましょう。
- 9:17XMLを期待するレガシーシステムがあるとします。
- 9:1915年も稼働し続けています。
- 9:21問題なく動作しています。
- 9:22しかし、新しいモバイルアプリを作ることになり、モバイルアプリはJSONを扱います。
- 9:25ゲートウェイがないと、レガシーシステムを書き換えるか、モバイルアプリに無理やりXMLを送らせる必要があります。
- 9:29ゲートウェイがあれば、そのどちらも不要です。
- 9:31モバイルアプリはJSONを送信します。
- 9:33ゲートウェイがそれをXMLに変換します。
- 9:35システムは想定通りのデータを受け取ります。
- 9:36モバイルアプリは、JSON形式のレスポンスを受け取ります。
- 9:38誰も何も書き直す必要はありません。
- 9:40これこそが、その素晴らしさです。
- 9:42ゲートウェイはヘッダーの追加や削除、URLの変更、機密データのマスクも可能です。
- 9:45レスポンスにクレジットカード番号が含まれていると想像してください。
- 9:48それをクライアントに返したくはありませんよね。
- 9:50ゲートウェイなら、レスポンスを返す前にそれを取り除くか、マスクされたバージョンに置換できます。
- 9:54バックエンドは一切変更する必要がありません。
- 9:56ゲートウェイが処理してくれるからです。
- 9:57これは古いシステムのモダナイゼーションを行う際に特に便利です。
- 9:59バックエンドを書き直す必要はありません。
- 10:01クライアントに強制的な変更を求める必要もありません。
- 10:03ゲートウェイの設定を変えるだけです。
- 10:05国際会議の翻訳者のようなものです。
- 10:06全員が自分の言語で話しますが、翻訳者が全員の理解を保証します。
- 10:10ゲートウェイはあなたのソフトウェアにとってのその翻訳者なのです。
- 10:12ルーティング、セキュリティ、スロットリング、変換、やることが多いですね。
- 10:15しかし、これらは4つの別々のことではありません。
- 10:17どのように関連しているかお見せしましょう。
- 10:18全てがどう繋がっているのか。
- 10:20重要なのはここです。
- 10:21これら4つの仕事は切り離せません。
- 10:23リクエストが来るたびに、全てのリクエストに対してこれらが連携して動作します。
- 10:26ゲートウェイは認証を確認します。
- 10:28レート制限を検証します。
- 10:29正しいサービスへとルーティングします。
- 10:31必要に応じてデータを変換します。
- 10:33レスポンスを受け取ります。
- 10:34必要であればそれも変換します。
- 10:36そして、全てをクライアントに送り返します。
- 10:371つのパイプラインです。
- 10:39各サービスが意識することなく、全てのステップが自動的に順序通り実行されます。
- 10:42真の力は単一の機能にあるのではありません。
- 10:44それは統合にあります。
- 10:46ルーティングに触れることなく、新しいセキュリティポリシーを追加できます。
- 10:49クライアントを変更せずに、バックエンドサービスも変更できます。
- 10:52何も再デプロイすることなく、デート制限を更新できます。
- 10:54各パーツは独立していますが、全て同じパイプラインで動作します。
- 10:58全てが一箇所を通るため、何が起きているのかを完全に可視化できます。
- 11:01ログ、メトリクス、分析、全てが一箇所に集約されます。
- 11:05リクエスト数、失敗したリクエスト、定則だったリクエスト、どのクライアントがリソースを最も消費しているかを確認できます。
- 11:10ゲートウェイがなければ、各サービスから個別にデータを収集しなければなりません。
- 11:13ゲートウェイがあれば、全てがそこに揃っています。
- 11:15それが重要な洞察です。
- 11:16ゲートウェイは単なるルーターではありません。
- 11:18APIプラットフォーム全体の完成センターなのです。
- 11:20全てのリクエスト、レスポンス、エラーが一箇所を通ります。
- 11:23何が起きているのかを全て把握できる、単一の管理画面を手に入れるのです。
- 11:26では、これを実際にどう活用すれば良いのでしょうか。
- 11:28今すぐできることについてお話ししましょう。
- 11:30実践的なヒントです。
- 11:31現実的に考えましょう。
- 11:32サービスが一つか二つなら、まだAPIゲートウェイは必要ないかもしれません。
- 11:35ルーティングは自分で処理し、認証も各サービスで管理できます。
- 11:38洗練されてはいませんが、機能はします。
- 11:40しかし、サービスが三つになるか、外部クライアントにAPIを公開するようになれば、複雑さは急速に増します。
- 11:45ゲートウェイはすぐに元が取れます。
- 11:47では、最初のステップは何が最適でしょうか。
- 11:49認証をゲートウェイに集約することです。
- 11:50何よりもまずそれを行ってください。
- 11:52サービスを一つ選び、その認証チェックをゲートウェイに移行します。
- 11:54サービスのコードがすぐに綺麗になることに気づくはずです。
- 11:57トークン検証のロジックが至るところに散らばることもなくなります。
- 12:00すべてのサービスで同じ実装ができているか悩む必要もありません。
- 12:03ゲートウェイが一度処理すれば、すべてのサービスが恩恵を受けられます。
- 12:06次のステップは、レート制限です。
- 12:08単純な制限であっても、バックエンドの過負荷を防ぐことができます。
- 12:11まずは1クライアントあたり毎分100リクエストといった基本的なものから始めましょう。
- 12:14これにより、暴走するクライアントがサービスを停止させるのを防げます。
- 12:16お話しできるのは、