Azure Resource Managerって何ですか? というのをいつも通り適当に書いておきたいと思います。
適当は嫌じゃ、という方は //build/ 2014 と TechEd 2014 NA のセッションとかを見たほうが早いかもしれません。
- Azure Resource Group Model: Modern Management for Modern Cloud
- Microsoft Azure Resource Manager
- Azure Templates in the new Azure Portal
- Exploring Resource Manager in the new Azure Portal
Azure Resource Manager って何ですか?
Azure上での「リソース」という概念を管理するための仕組み、という感じです(字面のまんま)。
目的としては、アプリケーションライフサイクルのコンテナーの提供、開発・構成のための宣言型ソリューション、一貫した管理レイヤーを提供、といったところでしょうか。
Azure内部に持っている(利用者の)リソースをあれこれいじることができます。今のところはAzure PowerShellで。あと新しいプレビューポータルでは意識せずにリソースがちりばめられていて、実はAzure Resource Managerを使ってるわけです。(明確にこれがResource Managerだ!という風ではない)
ところで仕組みとしてはAzureのプレビューポータルが出たとき(//build/ 2014)に組み込まれた感じです。既存のポータルでも少しは表面に出てきていますが、ほとんど意識しないと思います。(現行ポータルサイトはある意味リソース中心なのでややこしいですが)
※プレビューポータルについては過去のポストとか、Build Insiderの記事を参照ください。
何が嬉しいの?
Webサイトやらの設定が単体でなくシステム全体として管理できます。(普通WebサイトだけじゃなくてDBとかキャッシュとかその他細かい設定も含めてシステムとして機能しますよね?)
それって普通のPowerShellでもできるじゃない、ということですがそれは機能的にできますが宣言的ではないですよね。ResourceManagerでは各リソースの関係性なども含めて定義(JSON形式)できるので、このシステムはこの構成でというのが明確に定義できます。後で出てきますが、Azure Templatesは同じ仕組みを使ってギャラリーとして機能させている感じです。(例えばWordPressを選べばDB含めて構成されますよね)
もちろん展開時に嬉しいだけでなく管理する際も一つのシステムに紐づくリソースを纏めて参照したり、モニタリングしたりできるので(このあたりはもうちょっとドキュメントなりAPIが欲しいけど今はプレビューポータルで我慢)アプリケーションのライフサイクルを管理!というのもなんとなく、わかってもらえるかもしれません。
何が嬉しくないの?
まだまだ対応してるリソースが少ないのと、定義をいじるための手段が乏しいANDドキュメントが少ないところでしょうか。リソース用のJSONはスキーマが用意されているので、Visual Studio 2013 Update2なんかを使えばだいぶ楽ですが。
これからの発展性に期待、というところでしょうか。
Azure Resource Managerの使い方
意識せずに使う分にはプレビューポータル使えばOKです。意識してメンテしたり、中を見たい場合はAzure PowerShell (Ver0.8.0以上)を使います。
使う場合は最初にSwitch-AzureMode でResource Managerに切り替えます。
Switch-AzureMode -Name AzureResourceManager
戻す場合はAzureServiceManagementにします。
Switch-AzureMode -Name AzureServiceManagement
あと、Azureにアクセスするので、最初にAdd-AzureAccountなどで認証しておきましょう。
Resource (リソース)
リソースはまぁそのまんま資源的な意味合いですが、Azure上で現状扱えるリソースとしてはWebサイトやSQL Database(ServerとDB)のほかにも、オートスケールの設定やWebテスト、証明書、アラートのルールなどが定義されています。
以下抜粋。(Get-AzureLocationで取得)
| Name | LocationsString |
| ResourceGroup | East Asia, South East Asia, East US, West US, North Central US, South Central US, Central US, North Europe, West Europe |
| Microsoft.ApiManagement/service | North Central US, East US, West US, North Europe, West Europe, East Asia |
| Microsoft.Batch/batchAccounts | West US, East US, East US 2, North Central US, South Central US, Central US, West Europe, North Europe, East Asia, Southeast Asia, Japan West, Japan East, Brazil South |
| Microsoft.BizTalkServices/BizTalk | East US, West US, North Europe, West Europe, Southeast Asia, East Asia, North Central US, Japan West, Japan East, South Central US |
| Microsoft.Cache/Redis | North Central US, South Central US, West Europe, North Europe |
| Microsoft.ClassicStorage/storageAccounts | East Asia, Southeast Asia, East US, East US 2, West US, North Central US, South Central US, Central US, North Europe, West Europe, Japan East, Japan West, Brazil South |
| Microsoft.Insights/alertrules | East US, West US |
| Microsoft.Insights/autoscalesettings | East US, West US |
| Microsoft.Insights/components | Central US |
| Microsoft.Insights/webtests | Central US |
| Microsoft.Sql/servers | Brazil South, Central US, East Asia, East US, East US 2, Japan East, Japan West, North Central US, North Europe, South Central US, Southeast Asia, West Europe, West US |
| Microsoft.Sql/servers/databases | Brazil South, Central US, East Asia, East US, East US 2, Japan East, Japan West, North Central US, North Europe, South Central US, Southeast Asia, West Europe, West US |
| microsoft.visualstudio/account | North Central US |
| microsoft.visualstudio/account/project | North Central US |
| Microsoft.Web/certificates | Brazil South, East Asia, East US, Japan East, Japan West, North Central US, North Europe, West Europe, West US |
| Microsoft.Web/serverFarms | Brazil South, East Asia, East US, Japan East, Japan West, North Central US, North Europe, West Europe, West US |
| Microsoft.Web/sites | Brazil South, East Asia, East US, Japan East, Japan West, North Central US, North Europe, West Europe, West US |
| successbricks.cleardb/databases | East Asia, East US, Japan East, Japan West, North Central US, North Europe, Southeast Asia, West Europe, West US |
| Microsoft.Resources/resourceGroups | East Asia, South East Asia, East US, West US, North Central US, South Central US, Central US, North Europe, West Europe |
それぞれのリソースには親子関係なども設定できるようになっています。例えばSQL Databaseのデータベースの親はサーバーとか、そういうのです。
Get-AzureResourceコマンドレットを使えば現在所有しているリソースの一覧や、特定のリソースの詳細を見ることができます。
引数何もなしで実行した際の結果を一部抜粋すると
Name : sampledb ResourceGroupName : Buchizo2ndResourceGroup ResourceType : Microsoft.Sql/servers/databases Location : japanwest ParentResource : servers/buchi2nd
みたいになります。sampledbという名前でSQL Databaseのデータベースというのがわかりますね。
このリソースの詳細を見る場合はGet-AzureResourceコマンドレットに名前とリソースグループ名、タイプ、親リソースなどを指定して実行します。(各引数に渡す値は先ほどの結果から持ってくるといいでしょう)
Get-AzureResource -ResourceType "Microsoft.Sql/servers/databases" -Name sampledb -ApiVersion 2014-04-01 -ResourceGroupName Buchizo2ndResourceGroup -ParentResource "servers/buchi2nd"
結果はこんな感じ。
Name : sampledb
ResourceGroupName : Buchizo2ndResourceGroup
ResourceType : Microsoft.Sql/servers/databases
ParentResource : servers/buchi2nd
Location : Japan West
Properties : {
"databaseId": "f2becb28-xxxx-xxxx-xxxx-efe9cef3650c",
"edition": "Web",
"status": "Online",
"serviceLevelObjective": "Shared",
"collation": "SQL_Latin1_General_CP1_CI_AS",
"maxSizeBytes": "1073741824",
"creationDate": "2014-05-16T15:54:08.147Z"
}
設定値などの詳細はPropertiesにJSON形式で含まれてるのがわかりますね。他にも例えばサーバーエラーを見るアラートのルールなどは
Name : ServerErrors buchi2nd
ResourceGroupName : Buchizo2ndResourceGroup
ResourceType : microsoft.insights/alertrules
ParentResource :
Location : East US
Properties : {
"name": "ServerErrors buchi2nd",
"description": "buchi2nd has some server errors, status code 5xx.
",
"isEnabled": true,
"condition": {
"odata.type": "Microsoft.Azure.Management.Insights.Models.Thres
holdRuleCondition",
"dataSource": {
"odata.type": "Microsoft.Azure.Management.Insights.Models.Rul
eMetricDataSource",
"resourceUri": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx
xxxxx/resourcegroups/Buchizo2ndResourceGroup/providers/Microsoft.W
eb/sites/buchi2nd",
"metricName": "Http5xx"
},
"windowSize": "PT5M"
},
"action": {
"odata.type": "Microsoft.Azure.Management.Insights.Models.RuleE
mailAction",
"customEmails": []
},
"lastUpdatedTime": "2014-05-16T17:14:56.6319783Z",
"provisioningState": "Succeeded"
}
みたいになります。管理ポータル上と同じですね。
とまぁこんな感じでプレビューポータル上で見ることができるパーツやらの設定はだいたいリソースになっているわけです。(なので現状足らないリソースは管理できない)
※ちなみにそれぞれのリソースにどんな機能があるか、情報が提供されるか等はリソースタイプ次第でよくわかりません。
Resource Group
次にリソースグループですが、これはそのまんまリソースを論理的に束ねたグループです。論理的なのでロケーションなどは関係ありません。現行ポータルのリソースのリンクと違って、1つのWebサイトに紐づく、といったようなものでもないので必要なリソースを纏めて管理することができます。
別にWebサイトは1つとかの制限は無いので、フロントエンド用とバックエンド用を纏めてみたりとかできます。
あ、プレビューポータルであれこれWebサイトやらなにやら作る際はだいたいリソースグループを指定する欄があって、既定のまま意識せずにぽんぽんと作ってるとリソースグループが乱立されるので注意ください。
※現行ポータルで作成した場合なども含む
通常はシステムに必要な一連のものが含まれるので、リソースグループのライフサイクルがアプリケーションのライフサイクルとも言えますね。というわけでリソースグループを如何に上手に使いこなすかが肝かと思います。
Azure Templates
さてアプリケーションを展開したりする際、DBやらまとめて作ることも多いですよね。Azure Resource ManagerではAzure TemplatesとしてそのあたりをJSON形式で定義し、サイト名など必要なパラメーターを受け取り、自動的に作成することができます。
実際に使われている例としてはWebサイトのギャラリーなどが当てはまります。
WordPressなんかはClearDB(MySQL)を必要として一緒に作成してくれますよね。その際はサイト名など最低限の入力だけで済みます。Get-AzureResourceGroupGalleryTemplate コマンドレットを使うと、実際にギャラリーに表示されているものと同じものが表示されます。
以下抜粋。
SourceTreeSolutionsLLC SourceTreeSolutionsLLC.mojoPortal.0.1.0-... SourceTreeSolutionsLLC SourceTreeSolutionsLLC.mojoPortal.0.2.0-... StandingCloudInc StandingCloudInc.OpenXpackagedbyStanding... StandingCloudInc StandingCloudInc.OpenXpackagedbyStanding... SuccessBricksInc SuccessBricksInc.ClearDBMySQLDatabase.0.... TechInfoSystems TechInfoSystems.GalleryServerPro.0.1.0-p... TechInfoSystems TechInfoSystems.GalleryServerPro.0.2.0-p... umbracoorg umbracoorg.UmbracoCMS.0.1.0-preview umbracoorg umbracoorg.UmbracoCMS.0.2.0-preview VirtoCommerce VirtoCommerce.VirtoCommerce.0.1.0-preview VirtoCommerce VirtoCommerce.VirtoCommerce.0.2.0-preview WikimediaFoundation WikimediaFoundation.MediaWiki.0.1.0-preview WikimediaFoundation WikimediaFoundation.MediaWiki.0.2.0-preview WordPress WordPress.WordPress.0.1.0-preview WordPress WordPress.WordPress.0.2.0-preview WordPress WordPress.WordPressJapanese.0.1.0-preview WordPress WordPress.WordPressJapanese.0.2.0-preview
これらがAzure Templatesとして定義され、公開されているものになります。では実際に中身を見てみましょう。テンプレートはSave-AzureResourceGroupGalleryTemplateコマンドレットで保存することができます。
保存したものをざっと見るとこんな感じです。
$schema でスキーマを定義してるので、Visual Studio 2013 Update2ならインテリセンスもききます。便利!
スキーマはこんな感じですね。
作成時に必要となるパラメーターは「parameters」として定義されてます。例の場合だとsiteNameやhostingPlanName、siteLocationなどですね。
実際に画面を見ると同じようなのが入力項目で表示されます。
実際にどのようなリソースを作成するかは「resources」で定義していきます。依存関係の指定なども可能ですね。このあたりはJSONよく見ればなんとなくわかると思います。
さて自前で用意したAzure Templatesを使うにはNew-AzureResourceGroupコマンドレットのTemplateFile引数で自前のJSONファイルなテンプレートを渡します。(テンプレートに使うパラメーターはJSON形式で記述したファイルをTemplateParameterFileコマンドレットで渡すこともできます)
また、実際に展開する前にTest-AzureResourceGroupTemplateコマンドレットでテストすることもできます。
Test-AzureResourceGroupTemplate -ResourceGroupName Buchizo2ndResourceGroup -TemplateFile .\MyTemplate.json cmdlet Test-AzureResourceGroupTemplate at command pipeline position 1 Supply values for the following parameters: (Type !? for Help.) siteName: buchitestsite03 hostingPlanName: Free siteLocation: Japan East
※テンプレートにエラーがなければ何も出力されずに終わります。(テストの際は既に存在するリソースグループ名を指定しないとダメな気がしますが)
実際にデプロイするにはNew-AzureResourceGroupコマンドレットを使って以下のようにします。
New-AzureResourceGroup -ResourceGroupName TestResourceGroup2 -TemplateFile .\MyTemplate.json
cmdlet New-AzureResourceGroup at command pipeline position 1
Supply values for the following parameters:
(Type !? for Help.)
Location: East Asia
siteName: buchitestrm02
hostingPlanName: buchitestrm02Plan
siteLocation: East Asia
ResourceGroupName : TestResourceGroup2
Location : eastasia
ProvisioningState : Succeeded
Resources :
Name Type
Location
==================================== =============================
======= =========
CPUHigh buchitestrm02Plan microsoft.insights/alertrules
eastus
ForbiddenRequests buchitestrm02 microsoft.insights/alertrules
eastus
LongHttpQueue buchitestrm02Plan microsoft.insights/alertrules
eastus
ServerErrors buchitestrm02 microsoft.insights/alertrules
eastus
buchitestrm02Plan-TestResourceGroup2 microsoft.insights/autoscales
ettings eastus
buchitestrm02 microsoft.insights/components
centralus
buchitestrm02Plan Microsoft.Web/serverFarms
eastasia
buchitestrm02 Microsoft.Web/sites
eastasia
無事できました。ポータル上でみてもできたことがわかります。
とまぁこんな感じ。
まとめ
インフラ的なところはまだまだ無いので今後に期待。でるかなぁ?この仕組みでインフラもってなるともう一段何か必要な気がする。OSの上という意味で。あとAzure Pack的に汎用的になると面白そうですね。
アプリケーションとしては管理の視点が変わってきて面白いかと思います。これがモダンというやつかー。
ところでde:codeでこのあたりの話はでるのだろうか。。