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の推奨に従うのがよさそうです。

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


【Custom Vision 】誰でも出来る「きのこの山」と「たけのこの里」を使って画像認識 【Azure】

はじめに

Microsoft Azure の画像認識サービス Custom Vision Service をご存知でしょうか?
今回はみんなが大好きなあのお菓子
「きのこの山」と「たけのこの里」が判別できるか試してみます!

  • 画像認識のチュートリアルです
  • このサービスを使うことにより、機械学習の知識がなくても、AIを試すことができます。
  • 画像認識や判定、Azure を試しに使ってみたい方向け

Custom Vision Serviceとは

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

  • 特定のドメイン用に最先端の画像分析をカスタマイズしたり、埋め込んだりできる
  • シナリオに合わせたカスタマイズが可能
  • シンプルなインターフェイスを使用して、画像識別モデルを簡単に作成

公式ブログ

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

公式ブログの記事
image.png

Azureの画像認識系のサービスには他にも、「 Computer Vision API 」や「 Face API 」もあります。
上記はMicrosoftが構築した機械学習モデルを使う形になります。

Custom Vision Service では、 Azure の力を借りてカスタマイズした、学習モデルを作ることができます。

今回やること

コンビニで目に留まった「きのこの山」と「たけのこの里」を見分けられるのではないかとひらめいたので、検証してみます。

データの準備から、学習モデル作成、予測、APIの利用まで説明していきます。

1.データの準備

機械学習モデルを作成するには、学習するための元データが必要です。
機械学習界隈では訓練データ(training data)と呼ばれるものです。
まず、「きのこの山」と「たけのこの里」の画像が必要です。
ネットの画像検索から集めてくるやり方もありますが、今回は自前で準備します。
image.png
中身のきのことたけのこを並べていきます。
きのこの山、たけのこの里とも1箱にはちょうど30個ずつ入ってました。
ちなみに「きのこの山」は残念ながら1本は折れていたため、今回検証用に使ったのは29本です。

きのこの山
image.png
たけのこの里
image.png

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

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

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

image.png

2.学習モデルの作成

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

前提としてAzureのライセンスが必要です。
クレジットカードの登録が必要ですが、初回登録時12ヶ月の無料枠がついています。

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

Custom Vision - Home

https://customvision.ai

サインインして、新しいプロジェクトを作成します。
image.png
プロジェクト名をつけます。
image.png
「Domains」の選択肢にはfood、landmark、retailなどがあります。
これらを選ぶと、モノの種類に応じた最適なモデルを作ってくれるようです。
今回はどれにあてはまるか分からないので、「general(一般)」を選びました。

できたプロジェクトを開くと、画像がアップロードできます。
image.png
訓練データのアップロードは複数ファイルをまとめてアップロードも可能です。
今回はそれぞれ10枚ずつアップします。
アップした画像にはタグをつけます。
それぞれ kinoko、takenoko というタグをつけます。
image.png
画像のアップロードとタグ付けが終わったので、いよいよ学習させます。

[Train]ボタンを選択すると、10秒くらいで処理は終わりました。
今回は画像サイズも小さく、画像数も各々10枚と少なかったためかと思いますが、それでもかなり速いです。

3.モデルの作成結果

学習が終わると、モデルの作成結果が表示されます
image.png
「Precision(適合率)」は96%、「Recall(再現率)」は100%とかなりよい精度が出ています。

この「 Precision」「Recall 」はそれぞれ機械学習モデルの成績を表す指標です。

  • 適合率(Precision)
    • 例えば、「きのこ」と判断したもので、実際「きのこ」だったものの割合です。
  • 再現率(Recall)
    • 実際に「きのこ」のもののうち、正しく「きのこ」と判断されたものの割合です。

図にすると以下のようなイメージです。
image.png
さらに詳しく知りたいという方は、以下のサイトに詳しく解説されています。

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

4.予測

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

右上にある[QuickTest]をクリックします。
image.png
まず「きのこの山」画像を選んでアップロードします。
結果は100%の確率で kinoko 、「きのこの山」と出ており正解です。
image.png
次に「たけのこの里」画像も試してみましたが、正解しています。
image.png

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

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

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

5.APIによる予測

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

APIのURLは[PERORMANCE]タブ→[Prediction URL]から確認できます。
image.png
今回はインターネット上の URL を指定して画像を渡します。
curl で以下の URL に POST します。

[crayon-61efbe1830d02012273357/]

結果はJSONで返ってきます。

[crayon-61efbe1830d0b142573615/]

今回は「きのこ」の画像を投げました。
kinoko である確率が99.9%と正しく予測できています。

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

まとめ

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

従来は機械学習を使った画像判定モデルを作る場合は、

  • 学習データの収集
  • 画像の調整(サイズ合わせ、トリミング、二値化など)
  • 学習ネットワークの構築
  • データ学習
  • パラメータの調整
  • 再評価・・・

と手数も時間もかかりました。
しかしCustom Visionの登場により、画像さえあれば、誰でもすぐに機械学習モデルを作って、活用することができます。
API連携してアプリケーションと組み合わせることもすぐにできます。

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

きのこ・たけのこ画像データ

公式サイトリンク

公式ドキュメント


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でサーバなどリソースを作成する前に、まずリソースグループを作成しましょう。

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