##概要
AppServiceはMicrosoftが提供するPaaSです。(herokuやGAEと同じような位置付けだけど、mBaaSやFaaS的な一面もあります)Standardプラン(7,588円/月)以上だと「スロット」機能の利用が可能となり、1つの物理リーソス(AppServiceプラン)で複数のインスタンスを構築することができます。
スロット内のインスタンスは「スワップ」機能により相互入れ替えが自動またはワンクリックで可能となり安全にデプロイができます。またgitなどのソース管理システムの連携もクリックベースで簡単にできます。(kudu、FTPを利用して直接ファイル書き込み、転送も可能です)
これらの機能を利用してプロダクション/ステージング環境の構築、ステージング環境のベーシック認証、各環境のデプロイなどを紹介します。
AppServiceのスロット追加(ステージング環境の構築)
開発の流れとしては以下を想定しています。
ローカルで開発 → ソース管理システム(Gitなど) → ステージング環境に反映/確認 → プロダクションにリリース
AzureポータルからAppServiceにアプリを作成後、AppSeriviceブレードから「デプロイメント スロット」を選択し「スロットの追加」を行います。追加を行うとURLが割り振られ名前に指定した値が利用されます。また追加する際に既にアプリを構築していれば複製して追加することも可能です。
環境変数の設定(ソース上で各スロットに応じた値を利用)
AppSeriviceブレードの「アプリケーション設定」の「アプリ設定」に環境変数を指定することが可能です。「スロットの設定」にチェックを付与することで、スロット毎に異なる値が指定可能で、ソース上で各スロットに応じた値を利用することができます。
ソース管理システムとの連携
「デプロイメント スロット」から上記で作成したスロットを選択し「デプロイオプション」で利用しているソース管理システムを選択後、展開元のセットアップを行います。Github、Bitbucketなどはアカウント承認後、リポジトリ・ブランチの設定画面が表示されます。同期後はソースをコミットしたタイミングで自動的にスロットに反映されます。
ステージング環境のベーシック認証
以下のモジュールを利用します。
https://github.com/nabehiro/HttpAuthModule
READMEのとおりですが、rootディレクトリにbinディレクトリを作成して、HttpAuthModule.dllを設置します。あとはrootディレクトリ内にweb.configを配置し以下を追記します。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<configSections>
<section name="httpAuthModule" type="System.Configuration.NameValueFileSectionHandler" />
</configSections>
<httpAuthModule>
<add key="AuthMode" value="Basic"/>
<add key="Realm" value="SecureZone"/>
<add key="Credentials" value="ログインID:パスワード;"/>
</httpAuthModule>
<system.webServer>
<modules>
<add type="HttpAuthModule.HttpAuthModule" name="HttpAuthModule" />
</modules>
</system.webServer>
<appSettings>
<add key="HttpAuthModuleEnabled" value="false" />
</appSettings>
</configuration>
また環境変数(アプリケーション設定)でベーシック認証の有効/無効が可能となります。この際はHttpAuthModuleEnabledをfalseとし、アプリケーション設定で以下の値を設定します。
キー:HttpAuthModuleEnabled
値:true/false
ステージングからプロダクションにリリース
ステージングでリリース前の確認が終わりリリースを行う際は、AppSeriviceブレードの「デプロイメント スロット」からページ上部の「スワップ」をクリックします。
ここで「ソース」(展開元)と「展開先」を選択します。この時に環境変数(「アプリケーション設定」の「アプリ設定」)にスロット毎の差異がある場合は「変更のプレビュー」に警告が表示されます。
「OK」ボタンクリックでスワップが開始されます。
スワップは1分程度で完了となりますが、公式で以下の記載があります。
スロットにアプリをデプロイした後に運用サイトにスワップすると、運用サイトへのスワップ前にスロットのすべてのインスタンスが準備されます。 これにより、アプリをデプロイする際のダウンタイムがなくなります。 トラフィックのリダイレクトはシームレスであるため、スワップ操作によりドロップされる要求はありません。
##その他にも
ドメイン・SSLの適用、各種アラートの通知、SQLDatabaseを利用していればファイアウォールの設定、Databaseの暗号化なども説明不要なレベルで簡単に設定ができました。またSQLDatabaseはアクセス頻度からIndexの改善アドバイスを提案してくれる便利機能があったりします。個人では少し高いですがAppServiceも素晴らしいなと。