Self-hosted API gateway in Azure API Management

このエントリは2019/11/05現在の情報に基づいています。このサービスはPreviewのため、機能追加や変更により、記載内容との乖離が発生する可能性があります(2020/04/29に一般提供されました)。

Self-hosted API gatewayとは

USのFlorida、Orlandoで開催されているIgniteで発表があった通り、Azure API ManagementのGatewayを任意の場所で動作させることが可能なSelf-hosted GatewayがPreviewとしてリリースされた。これはDockerコンテナで動作するもので、Kubernetesでももちろん動作する。

Azure Arc enabled API Management is now available in preview
https://azure.microsoft.com/en-us/updates/azure-arc-enabled-api-management-is-now-available-in-preview/

Gatewayの機能はこれまでのものと同じで、デプロイされた Self-hosted API Gatewayは定期的にポーリング、アーティファクトの更新をチェックし、更新があれば取り込む、というどこかのAPI Managementサービスと同じ挙動をする。

重要なことが以下のドキュメントにさらっと記載されているので、チェックされることをお勧めする。

Connectivity to Azure
https://docs.microsoft.com/en-us/azure/api-management/self-hosted-gateway-overview#connectivity-to-azure

  • Self-hosted API GatewayはAPIMインスタンスの一つとのみ関連付けることができる
  • 443/tcp (TLS) でAzureに接続する。この接続を使って以下を実現する
    • 60秒ごとにSelf-hosted API GatewayのステータスをAPIMインスタンスに送信する
    • 10秒ごとに構成の更新があるかどうかをチェックする
    • (構成している場合のみ)ログやメトリックをAzure Monitorに、イベントをApplication Insightsに送信する
  • 接続が切れた場合、Self-hosted API Gatewayは構成の更新、ステータスの送信、テレメトリデータの送信ができなくなるが、Self-hosted API Gatewayはfail staticであるように設計されており、Azureとの接続が一時的に切断した場合にも動作するようになっている。
  • Self-hosted API Gatewayは構成のバックアップを取る構成、取らない構成の両方でデプロイできる。
    • バックアップありの場合
      • 定期的に構成のコピーを永続ボリュームに保存する。
      • 実行にあたっては、メモリ上の構成のコピーを使う。
      • 停止後の再起動時にはバックアップした構成を使う。
      • 再起動後、紐付けたAPIMインスタンスに接続し、接続できなかった期間にあった構成のアップデートをダウンロードする。
    • バックアップなしの場合
      • メモリ上の構成のコピーを使って動作する。
      • (バックアップがないので)停止した Self-hosted API Gateway は起動できない。

Self-hosted API gatewayを試してみる

ドキュメントに従えば可能だが、備忘録として残しておく。

Provision a self-hosted gateway in Azure API Management
https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-provision-self-hosted-gateway

APIM側の設定

下図の通り、APIMインスタンスの設定>Gatewaysをクリックし、[+追加]をクリックする。

名前、リージョン、デプロイしたいAPIを指定する。

上記画面の下部にある[追加]をクリックと、以下の表示に変わり、Gatewayが追加されたことがわかる。

Self-hosted API Gatewayのデプロイ

今回はDocker上にデプロイする。ドキュメントに従ってデプロイすればOKだが、備忘録として残しておく。

Deploy an Azure API Management self-hosted gateway to Docker
https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-deploy-self-hosted-gateway-to-docker

Kubernetes上にデプロイする場合は以下のドキュメントを参照。

Deploy a self-hosted Azure API Management gateway to Kubernetes
https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-deploy-self-hosted-gateway-to-k8s

先ほど登録したSelf-hosted API Gatewayをクリックし、Settings > Deploymentを選択する。

Access Tokenの有効期限は必要に応じて変更する。Deployment scriptsがDockerになっていることを確認しておく(Kubernetesになっている場合、YAMLが出てきているはず)。

env.confをクリックしてダウンロードしておく。このファイルはdocker runコマンドを実行する際に参照している。

runのフィールドにdocker runのコマンドパラメータが記載されているので、コピーして実行する。ポート番号のマッピングは適宜変更する。docker runコマンドで先ほどダウンロードしたenv.confを参照しているので注意する(今回はdocker runコマンドを実行するディレクトリにenv.confを配置した)。

docker run -d -p 80:8080 -p 443:8081 --name <gateway-name> --env-file env.conf mcr.microsoft.com/azure-api-management/gateway:<tag>

Azure Portalを確認すると、Heartbeatを確認していることがわかる。

APIを呼び出してみる

デフォルトで用意されているEcho APIを呼び出してみる。その前にEcho APIのSettingsを見てみると、Gatewaysの欄にManagedとSelf-hosted API Gateway(今回はonpgw)の表示があり、これらにデプロイされることがわかる。

では実際に呼び出してみる。Echo APIはなぜかバイナリデータがレスポンスに付加されてしまうので、curlで呼び出す際に-oを付けてファイルに吐き出すようにしている。

ということで、無事にEcho APIを呼び出すことができた。

現時点では、Self-hosted API GatewayにのみAPIをデプロイする仕組みが存在しないが、おそらく今後機能追加されるのかもしれない。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中