Deploy to Azure ボタンについての詳しいまとめ

先日の「JAZUG Azure日本DCドキドキ1周年 お祝いライブ」のコーナーの続編です。

この記事は Deploy to Azure (日本語訳) ボタンについて、詳細にまとめたメモです。2015年3月現在、試験的機能であるためこのボタンに関するドキュメントがまとまっていません。Deploy to Azure ボタンを高度に活用する際に、この記事が助けになると幸いです。

Deploy to Azure ボタンとは何か

これが Deploy to Azure ボタンです。
※2015年3月5日、ボタンの画像が上記の通り新しくなりました。2015年3月6日現在、なんとれいささんが作った画像データが使われています。SVG化についてはここで検討中です。

通常はこのように、 Github のリポジトリの README.md 等に配置します。

そうすることによって、OSSユーザーはこのボタンを使って Azure 上に目的のアプリを驚くほど簡単に展開することができるようになります。

隣にある これは Deploy to Heroku ボタンです。特に何もカスタマイズしなければ Deploy to Azure ボタンはこれと同じ挙動をします。

Hello World

ここにHello World用のデモリポジトリがあります。

このボタンをクリックしてみてください。Azure のサブスクリプションをお持ちなら、ものの数秒でHello Worldと書かれたindex.htmlがあるだけのウェブサイトを Azure Websites にデプロイできるはずです。

これが Deploy to Azure ボタンです。

ボタンを配置する

Deploy to Azure ボタンを配置するには、 README.md 等に次のようなコードを挿入します。

[![Deploy to Azure](https://azuredeploy.net/deploybutton.png)](https://azuredeploy.net/)

通常はこれだけで動作します。ボタン画像を表示させるだけのただのリンクです。

デプロイ対象リポジトリの明示的な指定

デプロイ対象のリポジトリを明示的に指定しなかった場合、ブラウザーによって提供されるリファラーを元に対象リポジトリを特定します。これは現在、リポジトリ・リファラー共にGithubしか対応していません。

たとえば npm 等で表示される README.md でボタンを動作させたい場合、対象リポジトリを明示的に指定する必要があります。

次のように指定します。

[![Deploy to Azure](https://azuredeploy.net/deploybutton.png)](https://azuredeploy.net/?repository=https://github.com/Tuesdaysgreen/HelloWorldDemo)

ご覧の通り、?repository= クエリが使用できます。

高度なデプロイ

Deploy to Azure の挙動は azuredeploy.json を対象リポジトリに置くことでカスタマイズできます。

azuredeploy.jsonARMテンプレートです。実は azuredeploy.json が置かれていない場合のデプロイフローでは、既定のARMテンプレートが利用されます。→ これ。(つまり Websites リソースを新規作成する挙動が定義されてある。)

これを用いることで、アプリケーションを動作させるために環境変数やデータベース接続文字列などを、デプロイ時に要求することができます。このように:

これはreichatazuredeploy.json の例です。赤く囲った部分がカスタマイズによって追加された部分です。

既にお察しの通り、 Websites 以外のリソースの作成・配置も可能です!

カスタム ARM テンプレート

azuredeploy.json を作成してみましょう。内容は こちら からコピペします。これがカスタム ARM テンプレートです。

{
  "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": { <parameter-definitions-of-template> },
  "resources": [ { <definition-of-resource-to-deploy> } ]   
}

このような構造になっていると思います。

パラメーターの追加

"parameters": {} にキーとプロパティを追加します。

"redisHost": {  
  "type": "string",
  "defaultValue": ""
}

"redisHost" がキーです。入力された値をリソースのプロパティ等で利用します。これはアッパーキャメルケースで変換されラベルとして表示されます。

パラメーターの利用

プロパティ文字列中で次のように呼び出しできます。

"name": "[parameters('redisHost')]"  

Websites のアプリケーション設定 (環境変数)

このように定義できます。

スキーマリファレンス

Azure Resource Manager Template Language です。

Web.config

必要に応じて設定します。

フィードバックしましょう

Deploy to Azure ボタンはまだベータ版です。Githubのprojectkudu/slingshotで開発が進められていますので、何かあればこんな感じでIssueを作成しましょう。

オープンソースってすばらしい。

参考