Azure API Managementを触ってみた!

"Azure API Managementを触ってみた!" (2021年3月18日掲載)

皆さん、こんにちは!
Microsoft Azureの提案と導入を担当しているエキスパートSEの中山です。久々の登場となります。
最近、オンプレミスのシステムをAPI連携する話があったため、Azure API Managementを触ってみました。
そこで、本ブログではAzure API Managementの紹介と構成例を元にした検証結果をお伝えしたいと思います。

1.Azure API Managementとは?

Azure API Management(以下、API Management)は、Azureやオンプレミス、他クラウドなどのさまざまなWeb APIを統合管理するためのプラットフォームです。
APIリクエストを集約してバックエンドサービスにルーティングしますが、その際に認証・認可や流量制御、セキュリティ対策の付加機能を提供します。

1.1 API Managementのコンポーネント

API Managemantは、APIゲートウェイと開発者ポータルから構成されます。
APIゲートウェイは、クライアントとバックエンドサービスの間でリバースプロキシとして機能します。開発者ポータルは、Webアプリケーションの開発者がAPI仕様を確認したり、APIを試験することができるポータルです。

1.2 API Managementのレベル

API Managementは機能に応じて主に以下のレベルがあります。(下記表ではサーバレスモデルは除いています)
参考:Azure API Management レベルの機能に基づく比較

""

1.3 VNet接続

API Managementを利用するにあたっては、APIゲートウェイの構成が重要となります。
一般的にオンプレミスのリソースにセキュアにアクセスする場合は、APIゲートウェイをVNetに接続する構成が望ましいと思います。
APIゲートウェイのVNet接続の構成には、以下の3種類があります。
""

1.4 構成例

オンプレミスのリソースをAPI公開する際の構成例を示します。
APIゲートウェイはインターネットからアクセス可能で、オンプレミスのバックエンドサービスとはプライベートIPアドレスでセキュアに接続します。
さらに、APIゲートウェイを東日本と西日本の両方のリージョンに配置することで、リージョン内での障害に対する可用性を高めます。
この構成は、ソフトバンクの SmartVPN と ExpressRoute の組み合わせで提供可能です。

2. 検証環境の構成

ここからは実際に検証した環境と手順をお伝えします。
検証では以下の構成をもとに、VNet接続したAPIゲートウェイのルーティング機能を確認しました。

まずは環境準備です。
API Managementを接続する仮想ネットワークを以下の例のように作成します。

  • リージョン:東日本
  • リソースグループ名:APITEST-rg
  • 仮想ネットワーク名:APITEST-vnet(10.101.0.0/16)
  • API Managementのサブネット名:api(10.101.0.0/24)
  • 仮想マシンのサブネット名:backend(10.101.1.0/24)

※API Managementは専用サブネットに接続する必要があるため、仮想マシンのサブネットとは分けます。
バックエンドサービスを動作させる仮想マシンとして、Ubuntu Server 18.04 LTSを作成して、backendサブネットに接続します。

3. バックエンドサービスの構築

バックエンドサービスには、「JSON Server」を使います。
JSON Serverは、REST APIのモックが簡単に作れるオープンソースソフトウェア(OSS)です。JSON Serverのインストールは以下の流れとなります。

3.1 Node.js 10.xをインストール

NodeSourceのレポジトリを追加

curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -

Node.jsをインストール

sudo apt install -y nodejs

nodejsとnpmがインストールされたことを確認

node -v
npm -v

3.2 JSON Serverをインストール

sudo npm install -g json-server

3.3 db.jsonを作成

公式サイトを参考に以下の例のように、db.jsonを作成します。

{
"posts": [
{ "id": 1, "title": "json-server", "author": "typicode" }
]
}

3.4 JSON Serverを起動

json-server --watch db.json --host 10.101.1.4 --port 8888

デフォルトではローカルホストのみ受け付ける設定となっているため、--hostで自身のIPアドレスを指定します。
また、デフォルトでは待ち受けポートは、3000/TCPになります。もし、別のポートを使う場合は、--portで待ち受けポート番号を指定します。(本検証では、8888/TCPを指定)

APIの動作確認のために、JSON Serverは起動中の状態にしておきます。

4. API Managementの作成

API Managementは、Azure Marketplaceから新規リソースとして作成します。
本検証では、作成にあたって、[基本]タブと[Virtual network]タブの設定を行います。

[基本]タブ

""

以下を設定します。

  • API Managementリソース名:APITEST-api
  • 組織名:ソフトバンク株式会社
  • 管理者メールアドレス:<管理者のメールアドレスを入力>
  • 価格レベル:Developer

※DeveloperレベルでもVNet接続は可能です。

[Virtual network] タブ

"" 検証構成では外部VNetモードとなりますので、Typeを「External」とし、接続する仮想ネットワークに「APITEST-vnet」を、サブネットに「api」を指定します。

設定が完了したら、API Managementを作成します。(作成には、40分程度かかります)

5. API Managementの設定

まず初めにAPIを作成します。今回は手動でAPIを追加するため、[Blank API]をクリックします。
※APIは、あらかじめ作成した定義ファイルを読み込むことで一括で追加もできます。

"" フロントエンドAPIの名前を入力します。
APIゲートウェイのドメインはデフォルトでazure-api.netのサブドメインが使われますが、カスタムドメインも追加可能です。
APIを複数登録する場合は、APIを識別するためにURLサフィックスを設定することをお勧めします。

"" 今回の検証ではブラウザからの簡易アクセスを行うため、APIの[Settings]タブで、Subscription requiredのチェックを外しておきます。

"" APIを作成した後、このAPIに対する操作(GETやPOSTなど)を追加するため、[Design]タブで、[+Add operation]をクリックします。

"" GETの操作を追加します。

Display name:posts-get
Name:posts-get
URL:GET、/posts


"" 再度、[+Add operation]をクリックして、POSTの操作も追加します。

Display name:posts-post
Name:posts-post
URL:POST、/posts


以下の図のように、GETとPOSTの操作が追加されたことを確認します。
"" 次にバックエンドAPIを設定します。
[All operations]を選択した上で、上図の[HTTP(s) endpoint]の鉛筆マークをクリックします。
Overrideをチェックし、Service URLに、http://10.101.1.4:8888 を入力します。
※10.101.1.4と8888は、JSON Server起動時の引数と合わせます。

"" ここまでの設定が完了すると、以下のようになります。

""

6. APIの動作確認

追加したGETとPOSTの操作をテストします。

(1) GETのテスト

GETの操作の[Test]タブで、そのまま[Send]をクリックします。
200 OKが返されると正常動作です。

"" 返されたJSONファイルの中身が確認できます。

""

(2) POSTのテスト

POSTの操作の[Test]タブで、Headersに以下を入力します。

NAME:Content-Type
VALUE:application/json

Request bodyをRawにして、例として以下のJSONレコードを入力します。

{"title":"apitest","author":"test"}

[Send]をクリックします。
"" 201 Createdが返されると正常動作です。
"" JSON Server起動時に指定したdb.jsonの中身を確認すると、JSONレコードが追加されていることが分かります。

(3) ブラウザからのGETアクセス

ブラウザから、以下のURLにアクセスします。
https://apitest-api.azure-api.net/posts

正常にJSONファイルが返されました。

""

(4) ブラウザからのPOSTアクセス

POSTは、Google Chromeの拡張機能「Advanced REST client」を追加して確認できます。

Headersに以下を入力します。

Header name:Content-Type
Header value:application/json


""

BodyでRaw inputを選択して、例として以下のJSONレコードを入力します。

{"title":"apitest_web","author":"test_web"}

[SEND]をクリックします。 201 Createdが返されると正常動作です。 ""

ここでもdb.jsonの中身を確認すると、JSONレコードが追加されていることが分かります。

7. まとめ

本ブログではVNet接続の構成をもとにルーティング機能のみ検証しましたが、API Managementには他にもクラウドならではの優れている点があります。

保守性

インフラストラクチャの運用保守はAzure側で行ってくれるので、利用者はAPIの開発に注力することができます。設定もAzureポータルから簡単に行えます。
また、Application Insightsと連携してAPIの監視も提供されています。

拡張性

APIゲートウェイは「ユニット」という単位でAPI要求を処理します。
今回はAPI ManagementをDeveloperレベルで作成したため、ユニット数は1で固定ですが、Developerレベル以外で処理能力を上げたい場合は、Azureポータルからユニット数を増やすことで、簡単にスケールアウトできます。また、Azure Monitorを利用することでオートスケールも可能です。

可用性

APIゲートウェイはAzureロードバランサーの配下で動作します。
そのため、単一リージョンでの1ユニットでの配置は、SLAは99.95%になります。(Developerレベルを除く)
さらに可用性を上げたい場合は、Premiumレベルで複数リージョンを跨いで配置することで、SLAは99.99%に上がります。内部的には、Traffic Managerを使って複数リージョン間の地理的な分散を行います。

8. さいごに

API Managementを実際に触ってみて、API連携を必要とする方には非常に便利な機能だと感じました。セットアップ自体は簡単なので皆さんもぜひ触ってみてください。
最後に、API Managementを自社で活用してみたいという方は、ぜひソフトバンクにご用命ください。ネットワークからMSP(Managed Service Provider)サービスまで含めたトータルソリューションを提供いたします。

MSPサービス

それではまた会う日まで!

""

関連サービス

Microsoft Azureは、Microsoftが提供するパブリッククラウドプラットフォームです。コンピューティングからデータ保存、アプリケーションなどのリソースを、必要な時に必要な量だけ従量課金で利用することができます。→詳細はこちら