Azure Virtual Machineを解説 【シリーズ Azureサービスいちから紹介】

このエントリはQiita Advent Calendar 2017 Microsoft Azureサービスいちから紹介 の4日目です。

ナレッジコミュニケーションの大柳です(@oyngtmhr)

4日目はAzure Virtual Machineです。やっとクラウドの花形サービスにたどりつきました。奥の深いサービスですが、要点を絞って解説していきます。

概要

Azure Virtual Machineは仮想マシンを提供するクラウドの中心的なサービスです。AWSのEC2やGoolge Cloud PlatformのGCEに相当します。WindowsだけでなくLinuxももちろん対応しています。

・インスタンスの種類

小規模なWebサイトなどに適した汎用的なものから、CPU性能重視、メモリ量重視、ストレージ性能重視、HPC向け(科学技術計算などのハイパフォーマンスコンピューティング)、そしてGPU搭載可能なものまで様々な用途に合わせたタイプの仮想マシンが提供されています。


https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/sizes から引用

・OSの種類

Linux系だと、Red Hat Enterprise、CentOS、SUSE Linux Enterprise、Debian、Ubuntu、CoreOS、RancherOS、FreeBSDなどが提供されます。
Windows系ではWindows Serverからwindows10、SQL Serverなどが提供されます。
Azure Marketplaceでは、機械学習パッケージを組み込んだもの、WordpressのようなCMS、最近話題のブロックチェーンを組み込んだOSイメージも提供されます。
OracleやIBMのプロダクトもあり、オンプレ環境で使っているものは、一通りなんでも揃いそうです。

・セキュリティ

Azureの仮想ディスクは暗号化することもできます。また、Azure Resource Managerポリシーを使ったセキュリティポリシーの使用、ロールベースのアクセス制御(RBAC)も可能です。

・メンテナンス

物理筐体のメンテナンスやセキュリティなどのパッチ適用によるシステムのメンテナンスはAzure Virtual Machineでも発生します。
Azureでは再起動が不要なインプレースVM移行と、再起動が必要なメンテナンスがあります。

インプレースVM移行はAzureに独特なもので、パッチなどの適用作業が再起動なしで行われるものです。Azure内部では仮想マシンがある筐体から別の筐体に移行するようですが、ユーザ側ではこれに伴い仮想マシンを停止する必要はありません。再起動なしで運用できるならいいじゃないか、と思うかもしれません。ただし気を付けないといけないのは、インプレースVM移行に伴い30秒程度マシンが一時停止することです。また、インプレースVM移行は事前に通知されず、発生後にも通知されないことです。
30秒以内の停止や遅延を許されないシステムでは多重構成にして処理継続できるよう、特別な考慮が必要です。メモリの内容などは保持されますが、システム上は30秒完全停止するので、cronで何か仕込んでるとはまりそうで怖いです(そもそもcronで定時起動させるのは最近はアンチパターンになってきてますが・・・)

【12/4追記】インプレースVM移行は、事前にインスタンスメタデータから情報を取れるとのことです。@tmak_twさん、ご指摘ありがとうございました。
https://twitter.com/tmak_tw/status/937458147177906176

一方の、再起動が必要なメンテナンスは文字通りです。事前にメンテナンス通知が来て、「セルフサービス期間」にユーザが計画的にメンテナンスを行うか、「予定メンテナンス期間」中に自動的にメンテナンスが行われるのを待つか、を選ぶことができます。

Azure で Linux VM をセキュリティで保護し、ポリシーを使用する | Microsoft Docs

https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/security-policy

・バックアップ

Azure Backupを使うと、VMのバックアップを取得でき、VM全体の復元、もしくは特定のファイルだけを復元することができます。

・Azure 予約VMインスタンス(RI:Reserver Instance)

1年、もしくは3年の契約期間で仮想マシンを割引価格で使えるリザーブド・インスタンスも利用可能です。
例えば、D1-5 v2インスタンスであれば、1年契約で57%、3年契約で71%の割引を受けることができます。
リザーブドインスタンスは12%の中途解約手数料を支払えば契約期間中の解約もでき、残り期間分は日割りで払い戻されます。


Azure Reserved Virtual Machine Instances | Microsoft Azure
https://azure.microsoft.com/ja-jp/pricing/reserved-vm-instances/

その他

・LinuxインスタンスのSSHキーペアは自身で準備する必要あり。AWSみたいにWebの管理画面上から自動生成してくれない。

・インスタンスのバリエーションは他クラウドより多いと感じる。特に多コア、巨大メモリーなどハイパフォーマンス系に強い印象。

・初めてAzure VMを構築する際には、Resource Groupやストレージアカウント、Virtual NetworkがVMの前提として必要なことを知らないと手間取る。

・インプレースVM移行は30秒以内の停止が真に許容されないシステムは世にそんなにないけど、何か地雷を踏みそうでリスクはある

・停止状態には「停止済み」と「削除済み (割り当て解除済み)」がある。OSからシャットダウンした場合は、「停止済み」状態となり、CPUコアなどは保持されるため、停止中も課金対象となる。リソースを解放して課金されないようにするには、Azure PortalかPowerShellから停止する手順が必要。

料金

・課金はVMを使った時間に対して課金。マーケットプレースでソフトウェアを調達した場合は、それも課金される。

・リザーブドインスタンス(事前予約)もあり。最大71%の割引を受けられる。

・課金単位は分単位(切り捨て)。6分45秒稼働させたら6分だけ課金される。

まとめ

Microsoft AzureなのでWindowsしか提供されないということはなく、Linuxも多くのディストリビューションに対応してますし、Oracleとかも提供されています。VMの使い勝手についてはAWSなど他社クラウドと遜色ない感じです。監視や運用自動化・省力化のためにサービスもいろいろあるようなので、別の日に取り上げたいと思います。


Azure Virtual Networkを解説 【シリーズ Azureサービスいちから紹介】

このエントリはQiita Advent Calendar 2017 Microsoft Azureサービスいちから紹介 の3日目です。

ナレッジコミュニケーションの大柳です(@oyngtmhr)

3日目はAzure Virtual Networkです。
Resource Manager、Storageに引き続き、仮想サーバ(Virtual Machine)を構築する際に必要になるものなので解説していきます。

概要

Virtual Networkはクラウド内、クラウド内の各種Azureサービス、そしてオンプレミスサーバにも接続できる仮想ネットワークです。

https://docs.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-overview から引用

Virtual Networkでは以下のような機能が提供されています。

・仮想ネットワークとサブネット

論理的な仮想ネットワークを作成するとともに、それぞれのネットワークをさらに複数のサブネットに分割できます。
後述するセキュリティグループにより、インターネットへの公開/非公開も制御できます。

・ルーティング

基本的にはルーティング設定しなくても、仮想ネットワーク内やインターネットとの通信ができます。さらに、ユーザー定義ルート(UDR:User Defined Root)をVirtual Networに適用することで、標準のルーティングルールを上書きしたり、他の仮想ネットワークなどへのルートを設定することができます。

・ピアリング

仮想ネットワーク同士をピアリングにより接続し、同じネットワークとして通信できるようになります。同一リージョン間だけでなく、リージョン間のピアリング(2017年12月時点ではプレビュー)、サブスクリプション間(他のアカウント)のピアリングも可能です。

・IPアドレス

動的/静的なアドレス、パブリックIP、プライベイトIPが提供されます。パブリックIPアドレスは静的に使うことも、もちろん可能で、仮想マシン、ネットワークインターフェイス、インターネットに接続するロード バランサー、VPN ゲートウェイ、アプリケーションゲートウェイに割り当て可能です。

・セキュリティグループ

通信のフィルタリングが可能です。送信元IP、ポート番号、許可/拒否を指定できます。セキュリティグループはステートフルなので、片方向を許可しとけば、戻りの通信も許容されます。
通信先をグループ化したものとして、サービスタグがあります。Azure内の仮想ネットワーク、ロードバランサー、インターネットなどあらかじめ定義されたグループを指定してセキュリティグループに設定できます。プレビューではありますが、Azure Storage、Azure SQL Database、Azure SQL Data Warehouseを指定できるサービスタグも提供されています。

ユースケース

・Virtual Networkを10.0.0.0/16で作成、フロントWeb用のサブネット10.0.0.0/24、バックエンドDB用のサブネット10.0.1.0/24に分割する

・フロントWeb用のサブネット10.0.0.0/24にはインターネットからの受信を許容、バックエンドDB用のサブネット10.0.1.0/24はフロントWeb用のサブネットからのみ受信を許容する。

・フロントWebサーバに静的なパブリックIPアドレスを割り当てて、IP指定でアクセスできるようにする。

・ExpressRouteへの接続のためUDRでルーティング設定を追加する。

・仮想ネットワークAと仮想ネットワークBの間でピアリングを設定し、相互に通信できるようにする。

その他

・SMTPでの送信には制約がある。エンタープライズ契約は制限なし、従量課金の場合は、申請によって制限を解除することができる。申請は「Microsoft の裁量にて審査および承認されます」。

・Azureからの監視や仮想マシンの管理は、IPアドレス 168.63.129.16と169.254.169.254のホストとの間で通信が行われる。これらのトラフィックをブロックすると、仮想マシンが正しく機能しない可能性があります。

・Windowsのライセンスキー管理のためにポート1688が使用される。

料金

仮想ネットワーク、サブネット、ルート テーブル、セキュリティグループには課金されません。パブリックIPアドレス、仮想ネットワークピアリングに対しては課金されます。

ピアリングでは、連携する2つのネットワークにといて、送受信とも通信した量が、GB単位で課金されます。

料金 - Virtual Network | Microsoft Azure https://azure.microsoft.com/ja-jp/pricing/details/virtual-network/

パブリックIPアドレスは、最初の5つの静的IPには費用が発生しません。6つ目以降は費用が発生します。

Azureデータセンターから出ていくデータに対してGB単位に課金されます。ストレージも同様です。

料金 - 帯域幅
https://azure.microsoft.com/ja-jp/pricing/details/bandwidth/

まとめ

クラウドのネットワークは設定が手軽な反面、制約が多かったりするのですが、Azureの場合はクラウドとオンプレもつなげたり、セキュリティグループも許可・拒否を柔軟に設定できたりと、設定の自由度が高いと感じました。VPN GatewayやExpressRouteなど、ネットワーク系の他のサービスとの連携もいろいろできるので、後日解説します。

明日の記事もお楽しみに。


Azure Storageを解説 【シリーズ Azureサービスいちから紹介】

このエントリはQiita Advent Calendar 2017 Microsoft Azureサービスいちから紹介 の2日目です。

ナレッジコミュニケーションの大柳です(@oyngtmhr)

2日目はAzure Storageです。

昨日のResource Managerに引き続き、仮想サーバ(Virtual Machine)の構築の前にStorageが必要になるので、第2回としてAzure Storageを取り上げます。

概要

Azure Storageはクラウドで提供されるストレージサービスです。AWSのS3に相当するインターネットストレージであるAzure Blobや仮想マシンのOSディスクなどのストレージが提供されます。
もちろん、クラウドなので高い可用性やセキュリティ、耐久性、スケーラビリティ、冗長性も備えています。

Azure Storageを使うにあたって、まずストレージアカウントの作成が必要です。この概念が若干分かりにくいのですが、公式サイトを引用すると以下のようなものです。

Azure ストレージ アカウントは、Azure Storage データオブジェクトの格納およびアクセスのための一意の名前空間を提供します。 ストレージ アカウント内のすべてのオブジェクトは、グループとしてまとめて課金されます。 既定では、アカウントのデータはアカウント所有者だけが使用できます。

さっくりいうとリソースグループのようにストレージをグループとして管理して、課金集計や監視のまとまりとして管理することができます。また、ストレージアカウントを削除するとそこに属するストレージはまとめて削除されて、片付け忘れを防ぐこともできます。ストレージアカウントと作成できるストレージタイプを整理すると以下のようになります。


ストレージアカウントに加えて、ストレージタイプ、レプリケーション(冗長性)の3つの基本的な概念について説明します。

ストレージアカウント

3種類のストレージアカウントがあります。

・汎用(Standard Storage)アカウント
あらゆるタイプのデータに使用できます。磁気媒体(HDD)を使ってデータが保存されます。

・汎用(Premium Storage)アカウント
SSDを使ったハイパフォーマンスなストレージです。VHD(Virtual Hard Disk) ファイルに使用されます。VM(仮想マシン)にはPremium Storageの利用が推奨されます。ページBlobのみ利用可能です

・Blobストレージアカウント
ブロックBlobと追加Blobに特化したストレージアカウントです。
「ホット」と「クール」のアクセスレベルを設定できます。

  • ホット:アクセス頻度の高いファイルに使用。料金は高い。アクセスが速い。
  • クール:過去ログなどアクセス頻度の低いファイルに使用。アクセスは遅い。料金は安い。

ストレージタイプ

5種類のストレージタイプがあります。

・ブロックBLOB
4.7 TB までのファイルの保存に使用できます。画像ファイルを保存してWebサイト上で公開する用途などに利用できます。

・ページBLOB
最大8 TBのファイルの保存に使用できます。ランダムアクセスもできるので、VMのOSファイルシステムにも利用できます。

・追加BLOB
追加操作に最適化されています。ログや監査ファイルなどを追記的に記録するのに使用します。

・Fileサービス
サーバーメッセージブロック(SMB)プロトコルでファイル共有をできます。複数の仮想マシン(VM)やオンプレサーバからファイルに対して読み書きができます。

・Queueサービス
キューとして、メッセージの保管と取得に利用できます。許容されるメッセージサイズは最大64 KBです。Pub/Subによる非同期処理に使用できます。

レプリケーション(冗長性)

4種類のレプリケーションオプションがあります。

・ローカル冗長ストレージ (LRS)
1つのデータセンターにデータのコピーが3つ作成されます。データセンター全体が利用できなくなった場合はデータを利用できなくなります。

・ゾーン冗長ストレージ (ZRS)
ローカルコピーが3つに加え、リージョン内のデータセンターに非同期的でレプリケートされます。汎用ストレージアカウントのブロック BLOBでのみ利用できます

・geo冗長ストレージ (GRS)
ローカルコピーが3つに加え、別のリージョンに、さらにコピーが3つ保持されます。プライマリリージョンで障害が発生すると、セカンダリリージョンにフェールオーバーして業務が継続できます。

・読み取りアクセスgeo冗長ストレージ (RA-GRS)
geo冗長ストレージに加えて、セカンダリリージョンにあるデータへの読み取りアクセスができます。プライマリが利用できない状態になった場合、セカンダリからデータを読み取ることができます。

ユースケース

・Wordpressの画像コンテンツをブロックBlobに配置、Web公開し、Blobから画像コンテンツをダウンロードできるようにする。読み取りアクセスgeo冗長ストレージにすることでリージョン障害時にもサイトへ読み取りアクセスを可能とする。

・ファイルストレージをオンプレサーバにマウント、Azure上の仮想マシンからもマウントし、各システムからアイル共有できるようにする。

・追加Blobにサーバの監査ファイルを追記書き込みし、蓄積するとともに改竄を防ぐ。

・OSのシステムファイルをgeo冗長ストレージで別リージョンに同期し、リージョン障害時も業務継続できるようにする。

料金

料金体系も整理します。

・ブロックBlobと追加Blob
格納データに対して1GB単位で課金が発生します。冗長オプションを上位のものにあげるとその分、料金が高くなります。PUT、READなどの操作に対しても課金されます。また、クールアクセスレベルに対しては、読み/書き時にGB単位で課金が発生します。

Azure Storage Blob の価格
https://azure.microsoft.com/ja-jp/pricing/details/storage/blobs/
・ページBlob
ディスクのサイズごとに月額料金が定められています。Premiumの場合はサイズごとにIOPSやスループット上限が定められています。スナップショットにも課金されます。

料金 - Managed Disks
https://azure.microsoft.com/ja-jp/pricing/details/managed-disks/
・ファイルサービス
格納データに対して1GB単位で課金が発生します。冗長オプションを上位のものにあげるとその分、料金が高くなります。PUT、READなどの操作に対しても課金されます。

Azure Files Storage の料金

https://azure.microsoft.com/ja-jp/pricing/details/storage/files/

・Queueサービス
格納データに対して1GB単位で課金が発生します。冗長オプションを上位のものにあげるとその分、料金が高くなります。トランザクション回数に対しても課金されます。

Azure Queues Storage Pricing

https://azure.microsoft.com/ja-jp/pricing/details/storage/queues/

・データ転送量(Outbound)
Azureデータセンターから出ていくデータに対してGB単位に課金されます。ストレージも同様です。

料金 - 帯域幅
https://azure.microsoft.com/ja-jp/pricing/details/bandwidth/

その他

・ファイルサービスやBlobに対してサーバサイド暗号化を行うこともできる。

・AzCopyコマンドラインユーティリティでデータのコピー・移動ができる。

・Table StorageはCosmos DBのサービスとして取り込まれた模様。

まとめ

ストレージアカウント、ストレージタイプ、冗長オプションなど選択肢が多く、要件に応じて様々なケースで利用することができます。VMならPremium StorageなどAzureの推奨に従うのがよさそうです。

明日の記事もお楽しみに。


Azure Custom Vision Serviceで「きのこの山」と「たけのこの里」を判別させてみる

このエントリは Cogbot! - Cognitive Services, Bot Framework, Azure ML, Cognitive Toolkit(CNTK) Advent Calendar 2017 の2日目です。

ナレッジコミュニケーションの大柳です。(@oyngtmhr)

今回はMicrosoft Azureの画像認識サービスCustom Vision Serviceを使った画像判定のデモをやってみます。「きのこの山」と「たけのこの里」が判別できるか、試してみます。

Custom Vision Serviceとは

Microsoft Azureで提供される画像認識サービスです。自分の持っている画像を学習させることで、その画像が何かを当てるための仕組み、いわゆる機械学習モデルを作ることができます。

https://azure.microsoft.com/ja-jp/services/cognitive-services/custom-vision-service/

例えば、Microsoftの公式ブログではヒアリかどうかを見分ける機械学習モデルを作った検証例が公開されています。

https://blogs.technet.microsoft.com/jpai/2017/09/14/protection-from-fire-ant-using-ai/

Azureの画像認識系のサービスには他にも、Computer Vision APIやFace APIもありますが、Microsoftが構築した機械学習モデルを使う形になります。一方、Custom Vision Serviceでは、Azureの力を借りてカスタマイズした学習モデルを作ることができます。
なお、2017年12月時点ではPreviewになっています。

今回やること

Custom Visionで画像認識させる題材を何にするか考えていたところ、コンビニで目に留まった「きのこの山」と「たけのこの里」を見分けられるのではないかとひらめいたので、検証してみます。

「きのこの山」と「たけのこの里」の画像を学習させて、見分けられるようになるでしょうか。
データの準備から、学習モデル作成、予測、APIの利用まで説明していきます。

データの準備

機械学習モデルを作成するには、学習するための元データが必要です。機械学習界隈では訓練データ(training data)と呼ばれるものです。
今回の場合は、「きのこの山」と「たけのこの里」の画像が必要です。ネットの画像検索から集めてくるやり方もありますが、今回は自前で準備します。

コンビニで「きのこの山」と「たけのこの里」を買ってきました。

パッケージを開けて、きのことたけのこを並べていきます。きのこの山、たけのこの里とも1箱にはちょうど30個入ってました。偶然なのかきっちり30個入ってるのかは別途検証したいです。
ちなみに「きのこの山」は残念ながら1本は折れていたため、今回検証用に使ったのは29本になります。

きのこの山

たけのこの里

写真を撮ったらPC上で、「きのこの山」と「たけのこの里」を1個1個切り出して保存していきます。
機械学習のためのデータ準備はこんな感じで地味な反復作業が多いです。OpenCVあたりを使えば自動切り出しもできるかもしれませんが、今回は数も多くないので手作業で地道にやっていきます。


画像のサイズや認識対象の位置は、きっとCustom Visionさんがよしなにやってくれると思うので、特にこだわらず調整はせず切り出していきます。

こんな感じで29個のきのこ、30個のたけのこの画像を切り出しました。

学習モデルの作成

学習データが準備できたのでCustom Visionで学習モデルを作っていきます。

前提としてAzureのライセンスが必要です。持ってない方は作りましょう。クレジットカードの登録が必要ですが、初回登録時は30日間、20,500円の無料枠がついています。(2017年12月時点)

まず、Custom Visionのポータルにアクセスします。

https://customvision.ai/

サインインして、新しいプロジェクトを作成します。


プロジェクト名を付けます。

「Domains」の選択肢にはfood、landmark、retailなどがあります。これらを選ぶと、モノの種類に応じた最適なモデルを作ってくれるようです。今回はどれにあてはまるか分からないのでgeneral(一般)を選びました。

できたプロジェクトを開くと、画像がアップロードできます。


訓練データのアップロードは複数ファイルをまとめてアップロードも可能です。今回はそれぞれ10枚ずつアップします。アップした画像にはタグをつけます。それぞれkinoko、takenokoというタグをつけます。


画像のアップロードとタグ付けが終わったので、いよいよ学習させます。[Train]ボタンを選択すると、10秒くらいで処理は終わりました。速いです。今回は画像サイズも小さく、画像数も各々10枚と少なかったためかと思いますが、それでもかなり速いです。
学習が終わると、モデルの作成結果が表示されます


Precisionは96%、Recallは100%とかなりよい精度が出ています。

このPrecision、Recallはそれぞれ適合率、再現率という機械学習モデルの成績を表す指標です。
適合率(Precision)は、例えば、「きのこ」と判断したもので、実際「きのこ」だったものの割合です。
再現率(Recall)は、実際に「きのこ」のもののうち、正しく「きのこ」と判断されたものの割合です。
分かりにくいですが、図にすると以下のようなイメージです。


さらに詳しく知りたいという方は、以下のサイトに詳しく解説されています。

そろそろ本気で機械学習の評価方法について学習するよ - Web就活日記

http://yut.hatenablog.com/entry/20120910/1347233734

予測

学習モデルが作れたので、予測、つまり「きのこ」か「たけのこ」か当ててみます。

右上にある[QuickTest]をクリックします。


ますは「きのこの山」画像を選んでアップロードします。
結果は100%の確率でkinoko、「きのこの山」と出ており正解です。

次に「たけのこの里」画像も試してみましたが、正解しています。

他のお菓子も試してみました。

アルフォートとコアラのマーチは、「きのこ」でも「たけのこ」でもないと正しく判断しています。
一方、コロンは「たけのこ」と判定されました。形や色が似ているため、間違ったんだと思いますが、そういうことを除けば正しく判定できてます。すごーい!

ここまでコマンド操作なし、Webブラウザだけで、1時間もかからず精度の高い「きのこの山」「たけのこの里」判定モデルを作成できました。Custom Vision、とても手軽です。

APIによる予測

Custom VisonではAPIも標準で提供されます。APIを使った予測もやってみます。
APIに画像を渡すには、インターネット上のURLを指定する方法とPOSTでデータとして渡す2通りの方法があります。

APIのURLは[PERORMANCE]タブ→[Prediction URL]から確認できます。

今回はインターネット上のURLを指定して画像を渡します。curlで以下のURLにPOSTします。
[crayon-6080c40ebb745531516392/]
結果はJSONで返ってきます。
[crayon-6080c40ebb751665898477/]
今回は「きのこ」の画像を投げました。kinokoである確率が99.9%と正しく予測できています。

APIの詳しい仕様やプログラミング言語ごとのサンプルコードは以下にあります。
Custom Vision Prediction PredictImageUrl
Custom Vision Prediction PredictImage

まとめ

従来は機械学習を使った画像判定モデルを作る場合は、学習データの収集、画像の調整(サイズ合わせ、トリミング、二値化など)、学習ネットワークの構築、データ学習、パラメータの調整、再評価・・・、と手数も時間もかかりました。しかしCustom Visionの登場により、画像さえあれば、誰でも、すぐに機械学習モデルを作って、活用することができます。API連携してアプリケーションと組み合わせることもすぐにできます。

今回は、それぞれ10枚という少ない画像から精度の高いモデルが作れたように見えます。しかし、実運用で使うにあたっては、画像の明るさ、見る向きなどにより期待した精度が出ない可能性もあり、訓練データを増やしたり、予測した場合の正解率を評価して、チューニングが必要かもしれません。

今回、使用した訓練データは以下のURLからダウンロードできるようにしています。この画像をもとに、Azureアカウントさえあれば、簡単に、すぐにCustom Vision Serviceを試すことができますので、ぜひともチャレンジしてみてください。

きのこ・たけのこ画像データ
http://doc.kc-cloud.jp/kinoko_takenoko.zip

最後までお読みいただきありがとうございました。


Azure Resource Managerを解説 【シリーズ Azureサービスいちから紹介】

このエントリは Qiita Advent Calendar 2017 Microsoft Azureサービスいちから紹介 の1日目です。

ナレッジコミュニケーションの大柳です(@oyngtmhr)。

Microsoftの提供するクラウドサービスであるAzureは日々サービスや機能が増えていっています。
2017年11月29日時点で数えてみたところ86個のサービスが提供されています。
サービスが多すぎて、これまで触ったことのないサービスがあったり、日本語の技術情報が公式/非公式とも少ないものもあったりするので、サービス知識の整理のためにナレッジコミュニケーションでシリーズ「Azureサービスいちから紹介」を2017年アドベントカレンダーとして本日から始めていきます。

第1回目はAzure Resource Managerです。Azure Resource Managerとは何か、そして使い方などを紹介していきます。

クラウドといえば仮想サーバ(Virtual Machine)がまず思いつくと思いますが、AzureではResource Managerがすべての始まりになるので、第1回として取り上げます。

概要

Azureでは、リソースグループ(Resource Group)という概念が、様々なリソース(仮想マシンやストレージなど)を作成する場合の前提となります。リソースグループは、Azure Resource Managerという機能を使って管理を行います。
Azure Resource Managerは頭文字をとってARMとか略されたりします(ARMと聞くと孫さんの買った半導体メーカーを連想してしまいます)。

Azureでは、課金はサブスクリプション(Subscription)という単位で行われます。
このサブスクリプションをさらに分割して、Resource Managerでリソースグループを作成することで、課金や仮想マシンの構築などを効率的に管理することが可能になります。

Resource Managerでは以下のような機能が提供されています。

・すべてのリソースをグループとしてまとめて、構築や管理、監視ができます。
部門ごと(業務部門、経理部門など)、環境(ステージング、本番)、プロジェクトごと(年末キャンペーン、データ分析など)などのグループ内でリソースの管理、課金の監視などができます。

・テンプレートを使用してリソースを管理できます。
例えばWebサーバ、DBサーバ、アプリケーションをまとめたテンプレートを作っておき、まとめて必要なリソースを自動作成できます。仮想ネットワークを作成してからサーバを作成するなど、リソース間の依存関係も考慮してテンプレートを作成できます。

・ロールベースのアクセス制御 (RBAC) が適用できます。
あるユーザには管理権限、別のユーザには参照権限しか与えないなどロールを割り当てて管理することができます。

・タグをリソースに適用し、サブスクリプションのすべてのリソースを論理的に整理できます。
仮想マシンなどのリソースにタグを設定することで、課金を集計したり、特定の環境、プロジェクトなどの情報に紐づけてリソースを管理できたりします。

ユースケース

・業務1部と業務2部用のリソースグループを作成して、課金額を把握できるようにする。
・VM、SQL Server、WebAppのサービスを定義したテンプレートを作成し、素早く環境を構築できるようにする。
・プロジェクト終了時にリソースグループを削除することで、不要となったリソースを漏れなく削除する。
・鈴木さんを管理者とし、仮想マシンの管理権限が必要な佐藤さんには操作者権限、リソース状況の確認しかやらない伊藤さんには参照権限を与える

料金

リソースグループの作成などResource Managerの利用には料金はかかりません。
Resource Manager経由で仮想マシンなど課金対象のリソースを作成した場合にはもちろん料金が発生します。

その他

・リソースグループはリージョンに紐づく。紐づくといってもメタデータの管理先が特定のリージョンになるだけ。例えば、東日本リージョンに作ったリソースグループで、西日本リージョンの仮想マシンを作ることは可能。リージョン障害時にどうなるかは気になるけど、おそらくペアリージョン(東日本なら西日本)にメタデータはバックアップされていて、リソースの管理ができなくなるとかはないと想像。

・あるリソースグループから別のリソースグループへの移動もできる。例えば、ステージング用リソースグループから本番リソースグループに移動することができます。

まとめ

これまでは、部門ごとやプロジェクトごとなどで、ローカルルールで命名規則やタグ付けで管理していたのが、Azure標準機能でまとめて管理できるようになり便利です。
リソースグループは、管理体系を分けたり、自動構築したり、アクセス制御したりすべての基本になるので、Azureでサーバなどリソースを作成する前に、まずリソースグループを作成しましょう。

明日の記事もお楽しみに。