フォーム読み込み中
皆さん、こんにちは!
Microsoft Azureの提案と導入を担当しているエキスパートSEの中山です。久々の登場となります。
最近、オンプレミスのシステムをAPI連携する話があったため、Azure API Managementを触ってみました。
そこで、本ブログではAzure API Managementの紹介と構成例を元にした検証結果をお伝えしたいと思います。
Azure API Management(以下、API Management)は、Azureやオンプレミス、他クラウドなどのさまざまなWeb APIを統合管理するためのプラットフォームです。
APIリクエストを集約してバックエンドサービスにルーティングしますが、その際に認証・認可や流量制御、セキュリティ対策の付加機能を提供します。
API Managemantは、APIゲートウェイと開発者ポータルから構成されます。
APIゲートウェイは、クライアントとバックエンドサービスの間でリバースプロキシとして機能します。開発者ポータルは、Webアプリケーションの開発者がAPI仕様を確認したり、APIを試験することができるポータルです。
API Managementは機能に応じて主に以下のレベルがあります。(下記表ではサーバレスモデルは除いています)
参考:Azure API Management レベルの機能に基づく比較
API Managementを利用するにあたっては、APIゲートウェイの構成が重要となります。
一般的にオンプレミスのリソースにセキュアにアクセスする場合は、APIゲートウェイをVNetに接続する構成が望ましいと思います。
APIゲートウェイのVNet接続の構成には、以下の3種類があります。
オンプレミスのリソースをAPI公開する際の構成例を示します。
APIゲートウェイはインターネットからアクセス可能で、オンプレミスのバックエンドサービスとはプライベートIPアドレスでセキュアに接続します。
さらに、APIゲートウェイを東日本と西日本の両方のリージョンに配置することで、リージョン内での障害に対する可用性を高めます。
この構成は、ソフトバンクの SmartVPN と ExpressRoute の組み合わせで提供可能です。
ここからは実際に検証した環境と手順をお伝えします。
検証では以下の構成をもとに、VNet接続したAPIゲートウェイのルーティング機能を確認しました。
まずは環境準備です。
API Managementを接続する仮想ネットワークを以下の例のように作成します。
※API Managementは専用サブネットに接続する必要があるため、仮想マシンのサブネットとは分けます。
バックエンドサービスを動作させる仮想マシンとして、Ubuntu Server 18.04 LTSを作成して、backendサブネットに接続します。
バックエンドサービスには、「JSON Server」を使います。
JSON Serverは、REST APIのモックが簡単に作れるオープンソースソフトウェア(OSS)です。JSON Serverのインストールは以下の流れとなります。
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
sudo npm install -g json-server
公式サイトを参考に以下の例のように、db.jsonを作成します。
{
"posts": [
{ "id": 1, "title": "json-server", "author": "typicode" }
]
}
json-server --watch db.json --host 10.101.1.4 --port 8888
デフォルトではローカルホストのみ受け付ける設定となっているため、--hostで自身のIPアドレスを指定します。
また、デフォルトでは待ち受けポートは、3000/TCPになります。もし、別のポートを使う場合は、--portで待ち受けポート番号を指定します。(本検証では、8888/TCPを指定)
APIの動作確認のために、JSON Serverは起動中の状態にしておきます。
API Managementは、Azure Marketplaceから新規リソースとして作成します。
本検証では、作成にあたって、[基本]タブと[Virtual network]タブの設定を行います。
以下を設定します。
※DeveloperレベルでもVNet接続は可能です。
検証構成では外部VNetモードとなりますので、Typeを「External」とし、接続する仮想ネットワークに「APITEST-vnet」を、サブネットに「api」を指定します。
設定が完了したら、API Managementを作成します。(作成には、40分程度かかります)
まず初めに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起動時の引数と合わせます。
ここまでの設定が完了すると、以下のようになります。
追加したGETとPOSTの操作をテストします。
GETの操作の[Test]タブで、そのまま[Send]をクリックします。
200 OKが返されると正常動作です。
返されたJSONファイルの中身が確認できます。
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レコードが追加されていることが分かります。
ブラウザから、以下のURLにアクセスします。
https://apitest-api.azure-api.net/posts
正常にJSONファイルが返されました。
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レコードが追加されていることが分かります。
本ブログでは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を使って複数リージョン間の地理的な分散を行います。
API Managementを実際に触ってみて、API連携を必要とする方には非常に便利な機能だと感じました。セットアップ自体は簡単なので皆さんもぜひ触ってみてください。
最後に、API Managementを自社で活用してみたいという方は、ぜひソフトバンクにご用命ください。ネットワークからMSP(Managed Service Provider)サービスまで含めたトータルソリューションを提供いたします。
■ MSPサービス
それではまた会う日まで!
Microsoft Azureは、Microsoftが提供するパブリッククラウドプラットフォームです。コンピューティングからデータ保存、アプリケーションなどのリソースを、必要な時に必要な量だけ従量課金で利用することができます。
条件に該当するページがございません