Microsoft Azureのリソース管理方法まとめ

クラウドサービスを利用すると、クラウドサービス上のリソースを管理する必要が出てくる。
Microsoft Azure上のリソースを管理する方法としてwebサイトベースのAzureポータルから入る人が多いと思うが、[Infrastructure as Code](https://ja.wikipedia.org/wiki/Infrastructure_as_Code) なんて言葉も世の中に出て久しいようにリソースの管理方法はWebUiに止まらず、コマンドベースの手段も複数提供されている。むしろ、UIではできないこともコマンドベースではできることが方が多い。この機会に各種のリソース管理方法についてまとめてみようと思う。

#リソースの管理方法一覧

1.Azureポータル
2.Azure CLI 2.0
3.Azure CLI 1.0
4.Azure PowerShell
5.REST-API
6.Azure SDK 
7.Azure Resource Manager Template

#Azureポータル
多くの人がまず最初にAzureのリソースに触れる場所。Azureの各種リソースをWebサイトベースで操作ができるツールになる。昔からAzureを触っている人ならよく知っているのではないかと思うが、Azureポータルは、[Azure Portal](https://portal.azure.com)と[Azure Classic Portal](https://manage.windowsazure.com)の2種類がある。名前からわかるようにAzure Classic Portalは古くてAzure Portalは新しい。まだ一部途中ではあるが、機能はAzure Portalに以降が進んでいるため、基本はAzure Portalで操作することが良い。

Azure Portal （https://portal.azure.com）
Azure Classic Portal(https://manage.windowsazure.com)

なお、参考までになるが、実はAzure Portalのpreview版も公開されている。いろいろと新しい機能なども追加されている部分もあるので興味のある人はこちらを使用してもいいかもしれない。

Azure  Preview Portal（http://preview.portal.azure.com）

#Azure PowerShell
Windows PowershellをベースのAzureリソースを操作するためのコマンドラインツールが用意されている。インストール方法などは以下に記載がある。

Azure PowerShell の概要
https://docs.microsoft.com/ja-jp/powershell/azure/overview?view=azurermps-4.2.0

個人的には一番好きなツール。理由としては、ちょっと試すという意味でハードルが低い。ポータルでできない事ができる場合が多い。また後で説明するCLIと比べてバグが少ない気がする。ただし、Windows Powershellをベースとしているので基本的にWindows環境でしか使用できない。（Powershell on Linuxというものも最近公開されており、Azure Powershellも一部利用できるが未だ実用に耐える範囲ではない）

ちなみに、Azure PowerShellはオープンソースで、次のgithubにソースコードが公開されている。bugや改善要求はここにリクエストできるし、過去のAzure Powershellのバージョン(msiファイル)も入手できる。

Azure/azure-powershell
https://github.com/Azure/azure-powershell


#Azure CLI 1.0
Azure PowerShellはWindows環境でのみの利用だったが、Cross Platform(Mac, Linux,もちろんWindowsも)で利用できるコマンドラインツールがAzure CLI(Command Line Tools)になる。shellやコマンドプロンプトベースでAzureのリソースを操作できる。
このツール実は最近2系統に分かれている。Azure CLI 2.0の方が次世代という位置付けで新しいサービスへの適用が早い。ただし2.0はARM(Azure Resourse Manager)しか操作ができないので注意が必要。1.0はASM(クラシック)リソースへの操作もできるためクラシックリソースを制御する場合は、このCLI1.0を使用する必要がある。
インストール方法は以下に公開されている。

Azure CLI 1.0 のインストール
https://docs.microsoft.com/ja-jp/azure/cli-install-nodejs

ちなみにCLI1.0もオープンソースで、node.jsベースで動作する。

Microsoft Azure Cross Platform Command Line
https://github.com/azure/azure-xplat-cli

#Azure CLI 2.0
Cross PlatformツールであるCLIの次世代バージョン。ARMリソースしか操作できないが、新機能への適用が早い。最近だと界隈ではちょっと話題の大きかった[Managed Disk](https://docs.microsoft.com/ja-jp/azure/storage/storage-managed-disks-overview)にもかなり早い段階で対応していた。
インストール方法は次の通り。

Azure CLI 2.0 のインストール
https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli

こちらもオープンソースで、pythonで動作している。
Azure/azure-cli
https://github.com/Azure/azure-cli

#REST-API
PowershellやCLIや書きましたが、結論Azureのリソース管理は全てREST-APIを経由している。
上記のポータルやコマンドツールも,　UIやコマンドで受け取った値から次のREST-APIを呼び出してリソースを管理していて、リクエストヘッダやらボディとかの面倒な部分をツールが補完している。
独自でリソース操作のためのUIを作ったりする場合には使うのだろうけど、単純にリソース管理するためなら上のコマンドベースのツールを使う事になる。

Azure REST API Reference
https://docs.microsoft.com/en-us/rest/api/

#Azure SDK 
これも最終的にはAzure REST APIを利用しているのだけれど、各言語(.NET、Java,Pythonなど)でAzure リソースを操作できるようにSDKが公開されている。

Azure SDK
https://azure.microsoft.com/ja-jp/downloads/

#Azure Resource Manager(ARM) Template
少し異なる概念がARM　Templateになる。今までは各リソースに対するCRUDを実行するコマンド(あるいはAPI)群だったが、ARM　Templateはデプロイするリソースの種類や設定をjson形式で記述したファイルのことを指している。
例えば、VMと仮想ネットワークとストレージをデプロイする場合、json形式のファイルにデプロイするリソースの種類を定義する。またストレージの種類はSSDかもしれないしHDDかもしれない。仮想ネットワークにはアドレス空間が定義される。そういった各リソースの設定もjson形式に記載しておく。そして、そのファイルを使用してリソースグループに対してデプロイを実施することで定義したリソースのデプロイができる。
このテンプレートを一度作ると、同じ環境の複製が容易になる。つまり、開発環境用にテンプレートを１つ作れば、開発環境Bやステージング環境に同一構成の環境を容易に構築できる。

初めての Azure Resource Manager テンプレートを作成する
https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/resource-manager-create-first-template