Azure API Managementの従量課金モデルを軽く調べた＆Az.APIManagementで廃止になったコマンド

こんにちは。
コンサルティング & テクノロジー部の上坂です。

この記事は[ネクストスケープ クラウド事業本部のAdventCalender](https://qiita.com/advent-calendar/2018/ns-cloud)の24日目です。
[前回の記事](https://blog.nextscape.net/archives/Date/2017/12/azurebatchaiservice)も同じ[AdventCalender](https://qiita.com/advent-calendar/2017/ns_cloud)の24日でちょうど1年前、というあまりのサボりっぷりに引いております。

しかし、12/24が私の誕生日ということを知りつつ敢えて2年連続でこの日を私の担当に割り当てる担当者のサディスティックぶりは放置できません。いつか仕返しをしなければならないようです。真のサディストはサディストを弄ることで快楽を得るのです・・・ふふふ。

さて、そろそろ真面目に。
前回はAzure Batch AIというレア中のレアなAzureのPaaSをご紹介しました。
どれぐらいレアかというと、1年前に色々調べたついでにバグの指摘も含んだ[Feedback](https://feedback.azure.com/forums/905575-batch-ai)も５，６つほどしたのですが、1年たっても他の人からの投票数が全く増えず、他のアイディアもたった１つしか増えないという圧倒的な過疎っぷりを見せつけるほどである、といえばご理解いただけるかと思います。

今回はAzure API Managementについて記事を書きたいと思います。
[![https://azure.microsoft.com/ja-jp/services/api-management/](https://qiita-image-store.s3.amazonaws.com/0/222127/9475e731-c36d-77a1-9800-3561e3af5274.png)](https://azure.microsoft.com/ja-jp/services/api-management/)
このPaaSもAzure Batch AIと同様に使用するシチュエーションが限られているため多数のユーザーが対象となるわけではありませんが、それでも全世界的にはかなり使用されているようです。

Azure API ManagementとはAPIを公開する時に必要となる機能を一通りそろえたPaaSです。呼び出し側とAPIとの間にProxyにようにデプロイすることで様々なことを可能とします。

詳しい説明は先日の[Tokyo Jazug Night](https://jazug.connpass.com/event/103144/)と弊社ネクストスケープのイベント[NSStudy](https://nsstudy.connpass.com/event/104047/)で発表した[こちらの資料](https://www.slideshare.net/uesaka/azure-api-management-124244263)をご覧ください。 

さて、今日は上記の資料発表以降に発表されたAzure API Managementの更新中でも注目したい機能を取り上げます。

## API Management の従量課金レベル - プレビュー

[Azure Updates](https://azure.microsoft.com/ja-jp/updates/api-management-consumption-tier-is-in-preview/)
高額なAzure API Mangementの従量課金モデルが発表されてとても喜ばしいですね。ただ新しい課金モデルが増えただけではなく、他のモデルとは異なる点が色々あるようです。確認しておきましょう。

### 専有リソースではなく、動的リソースである

これまでの課金モデルのリソースはプロビジョニングに時間がかかる代わりに他者の影響を受けることが無い専有リソースを手に入れることができました。しかしこの従量課金モデルはサーバーレスな動的リソースであるため、他者の影響を受ける可能性が多少なりとも発生することを意味します。
また、[こちらのページ](https://azure.microsoft.com/en-us/blog/announcing-azure-api-management-for-serverless-architectures/)によると
Azure Functionsでもよく問題となるオンデマンドアクティベーション仕様であると記載があります。ということはRequestがしばらくやってこないとリソースを開放してしまうので間隔があいた後の1回目のRequestはとてもレスポンスが悪化する可能性があります。（未確認）

### 外部キャッシュが利用可能

[docs](https://docs.microsoft.com/ja-jp/azure/api-management/api-management-howto-cache-external)
従量課金モデルを使用する場合のみ、APIM内部のキャッシュではなく外部のキャッシュが使用可能です。この機能はBYOC(Bring your own cache)と呼んでいるようです。しかし、どんなキャッシュでも使用可能わけではなく、Redis Cache互換のキャッシュのみ使用可能です。Azureのキャッシュに限らず使用することができます。
![2018-12-23-20-00-40.png](https://qiita-image-store.s3.amazonaws.com/0/222127/499196b9-7f91-38df-2561-26ee8ac4b4c6.png)


### 全API、個々のAPIに紐づくサブスクリプション

[docs](https://docs.microsoft.com/ja-jp/azure/api-management/api-management-subscriptions#scope-of-subscriptions)
従量課金モデルを使用する場合のみ、サブスクリプション機能を製品（Products）ではなくて全APIもしくは個々のAPIに紐づけることができるようになりました。

### 製品（Products）が不要になった

さらっと[サブスクリプションのページ](https://docs.microsoft.com/ja-jp/azure/api-management/api-management-subscriptions#scope-of-subscriptions)にはこんなことが書かれています。
「最初に製品を作成して API を追加することなく、1 つの API (または APIM インスタンス内のすべての API) へのアクセスを許可するキーを作成できるようになりました。」

今まで、サブスクリプションは製品（Products）に紐づくものでした。その製品（Products）を作成しなくてもいい、と言っているのです。しかしこれまではAPIは必ずどこかの製品（Products）に紐づける必要があり、これを忘れるとエラーとなっていました。ところが今までの製品（Products）へのAPIの紐づけが不要となり、APIを呼び出してもエラーとならない仕様になってることを確認しました。これはかなり大きなアーキテクチャ変更です。（資料の更新が辛いｗ）

### ECHO APIがない！

従量課金モデル以外でAPIMを作成した場合は、ECHO APIというテスト用のAPIへの設定が最初から含まれており、実験には大変便利です。しかしこのECHO APIがありません。なんてことだ。不便なのでこれは元に戻してほしいなぁ・・・

### 超高速デプロイ

従量課金モデルを東南アジアリージョンで作ってみましたが、なんと3分ぐらいでプロビジョニングが終了してしまいました。今までは20分～40分ほど待たされたので、超高速ですね。これならオートスケールが使い物になるかもしれない希望が出てきました。

### まだフル機能ではない
従量課金モデルのインスタンスにはまだフル機能がそろっていません。ざっと見た感じ、次の機能がありません。

- Portalからのユーザー・グループの管理
- ユーザーへ通知するメールのテンプレート管理
- Git連携
- カスタムドメイン
- VNET統合
- TLS、SSLなどのプロトコル設定
- アラート、メトリック、診断設定

いずれ拡充されるんでしょうね。少なくともカスタムドメインとアラート・メトリック・診断設定はほしいところです。

### 使用可能なリージョン

この従量課金モデルを使用できるリージョンが限られていますが、2019年1月中にすべてのリージョンへの展開をできるように頑張っているようです。
![2018-12-23-20-05-05.png](https://qiita-image-store.s3.amazonaws.com/0/222127/31247b63-9413-4106-2038-ee265713776a.png)

## API ManagementのPowerShellコマンドAzureRM.ApiManagementのAz.ApiManagementへのマイグレーション

[Azure PowerShell 'Az' Moduleの version 1.0が2018/12/18にリリース](https://azure.microsoft.com/en-us/blog/azure-powershell-az-module-version-1/)されたことに伴い、API ManagementのARMコマンドもAz.Apimanagementコマンドへとマイグレーションされました。
廃止となったコマンドがいくつかありますので注意しましょう。詳しくは[こちら](https://github.com/Azure/azure-powershell/blob/master/documentation/migration-guides/Az.1.0.0-migration-guide.md#azapimanagement-previously-azurermapimanagement)。
私もまだ試していないので、近々いじってみたいと思います。

## 最後に

今後もAPI Managementの更新があったらできるだけ追随したいと思います。（久しぶりの投稿だったのでちょっと頑張っちゃいました）

Blogによる情報発信の頻度をあげるべく、来年は頑張りたいと思います。

[ネクストスケープ](https://www.nextscape.net/)と[技術ブログ - ネスケラボ](https://blog.nextscape.net/)を来年もよろしくお願い致します。