uzullaがブログ

uzullaがブログです。

AzureのApp Serviceを試したら、なにげにレンサバ属性が高いとおもったメモ

DISCLAIMER

このエントリでは、AzureとそのAppServiceが提供する拡張性や可用性を全く!活用してません。App Serviceは実際に中〜大規模のサイト運用でつかわれていると聞いていますが、このエントリに示すやり方は単純にセコいエンジニアがAzureで遊びで、App Serviceにトライしてみたものです。

このエントリでは一部安く利用する事について書いていますが、特にお金周りは保証も補償もできないので、自分で調査してください。(わりとカジュアルに錯誤課金できるWeb UIです)

私もドキュメントは読んでいるつもりですが、なにか「正しくない」かもしれません。Azureは公式ドキュメントが充実しているので、是非読んでみてはいかがでしょうか。*1

マクラ

先日ISUCONでAzureを触って以後引き続きちょこちょこ触っており、段々とAzureに対する印象ができてきた感じがある当方です。

Azure識者いわく、App Serviceを是非さわってみて!との事でしたので、つらつらと読んでみたら「タダっぽいプランがあるぞ!」と貧乏性をくすぐられ、俄然意欲が湧きました。やってみて色々おもしろかったんですが「ほほう、そう来ますか」「たしかに定石は破る為にあるよね」などといった独り言が多かったので、メモとしてこのエントリをかきます。

先取りのオチとしては「タダ(に近い安価)で遊べるやん!!最高や!!だがしかし…」です。


App Serviceは平たくいえばPaaSであり、Azure版のHerokuです。GCPだとGAE、AWSはElastic beanstalkでしょうか。*2

所で、私を含めてPHPerはあんまりPaaSに縁がない気がしますね、試しでもつかった事がない人も多いのでは?多くのPaaSが(意外かも知れませんが)PHPをサポートしているのに、使われている話を(私は)あまりきかない。

理由は様々でしょうが、PHPには昔から「レンサバ」というPaaSっぽいもの()があるんですよね。最近の言語を用いたウェブアプリ開発には存在しない概念ですし()、もう若い人は使ったことすらなさそうでありますが、Herokuあたりが出てくるまではPHPCGI以外に対するアドヴァンテージでしたよね(ホントか?まあ、ここでは他所に置きます)。

で、PaaSを使う事についてのハードルの高さ、あるいは腰の重さがどこにあるかといえば、そのレンサバ(や、LAMP)世界観の影響がある気がします。実際に実務でつかうことを検討すると、よくあるご要望がPaaSでネックになることが多いのです。

たとえば…コストはワンコインがいいとか真顔でいわれたり(PaaSは決して安くない)、「すでに入稿済みの広告に掲載されたURLがあるから、そこにWPをいれてくれ」っていわれた結果「突然アプリのレポジトリにwordpress爆誕!!!」とか(PaaSは普通git経由でデプロイする)とか…、いやそれは案件次第だろといわれればそうなんですが、PHPはやっぱりそういう所あるので…。

話がずれました(そのような「世界線のお客様(案件)」は若い人には本当に通じない事があるので、一応書きました)

勿論PaaSはレンサバでないし、そうあるべきでもない、だからこそクラウドでありカッチョよく便利なわけですし、オートスケールやそのクラウド特有のオブジェクトストレージがあったりして、レンサバとは価格も機能も自由度も一緒にする必要はないんですが、まあ悲しいかな日常の歯ブラシ業務はレンサバで十分、むしろ歯ブラシくらい雑に何にでもつかえないと困る事が多く、PHPはPaaSはあまり普及せず、レンサバ、VPS、専用サーバー、みたいな感じが多い気がします。

AzureのApp Serviceの話にもどしますが、App Serviceをちょっとさわってみて「これは使えるかもなあ」と思ったのは、悲しいかなその辺りの関係であり、わりとレンサバっぽい使い方もできないことはない…のがPaaSとして逆に新しいな!という所でした。たとえばFTPとかね!つかうかはさておき!

こう言うと、「ゲーッ」っておもいます?僕も他人事ならそう思うんですけど、でも突然お客さんが「今日からこの協力会社さんとやってくれたまえ!まずはFTPアカウントをメールでください!」ってなるんだよな!助けてくれ!

App Serviceのレンサバ風使い方

さて、大まかな手順がこちらです。わかるひとはこれで十分でしょ、運がよければ一発でクリアできます(?)

なお、クリック数は作業の面倒くささの心境を表しており、実際のクリック数とは乖離があります。

  • App Serviceを作る(10クリックくらい)
    • 「Web + モバイル」とタイトルにあるテンプレート一覧*3から、素の「Web App」をえらぶ
    • (コンテナについては)今回無料にしたいので、必ずApp Serviceプランを変更する(ミスると月額8000円)
    • App Service プランのロケーションは日本なら「Japan East」或いは「Japan West」がよいでしょう
    • 0.00JPYの「F1 Free」は右上の「全て表示」を押さないとでてきません
    • App ServiceやApp Service プランやResource Groupとかの名前は適当に
  • App Serviceの概要をひらき、サイトがひらけるか確認(4クリックくらい)
  • デプロイ設定をする
    • FTP(FTPS)の場合…(5クリックくらい)
      • 「デプロイ資格情報」をひらいてユーザー名とパスワードを設定する(パスワードは二度と確認できないので、メモを)
      • 「概要」に記載された「FTP/デプロイ ユーザー名」「FTP(S)ホスト名」をコピーし、お手持ちのFTPクライアントで接続する
      • site/wwwrootが(デフォルトでは)Document Rootに相当しますので、そこにファイルをULしよう
    • Github等と連携する場合(10〜20クリックくらい)
      • 「まあ、git使う程度の力があればどうにかなる、がんばれ。Web UIがなんか変な気がする?それは気のせい「ではない」事が多い。重かったら「なにか裏で非同期ロード中では?」とか察しろ」
      • site/wwwrootにrepoの内容がcloneされる。ので、repo直下がdocument rootでないかぎり、設定アプリケーション設定仮想アプリケーションとディレクトリを修正すること。
      • ブランチは指定できる
      • Githubにpushすれば、自動的に反映される
      • Git連携しててもftpでさわれるが、更新時には(コンフリクトは)強制上書きになる
  • デプロイ(アップロード)できれば後は確認(3クリック)

どうですか?できました?できた人はお疲れ様でした。

ということで

スゴくお手軽にサービス(?)をたちあげられたぞ!しかも「コンテナの分は」無料っぽいぞ!やった!雑に客見せとかするとき最高かもしれんね(?)

一応書いておきますが、これは「完全無料」ではなく「コンテナの分」についてのみ無料。つまりコンテナのマシン(CPU+ローカルStorage)について適用されるもので、転送量とかは勿論従量課金のはずです。いやでもコンテナが無料なのは結構すごい事ですよ、そういうのが無料でなくなったPaaSもありますし。

ハマリ所や疑問ポイント等をつらつらと

色々不思議な所もありますので、書いていきます。

「再起動するとデータは消えるの?」

App Serviceに再起動ボタンがあるが、これをおしてもファイルは消えない。FTPでデプロイできるのだから当然といえる。

なにかの操作で消えるかもしれないが、いまのところ消す操作を見かけていない。

アクセスがないとプロセスは積極的に終了しているようにも見える(ので、再起動は頻繁にされているようなもの?)

無料コンテナは何個までつくれるの?

10個っぽい。

ただし、クオータがありCPU、Disk、帯域などの上限がきまっています。まあ無料レンサバでよくあるやつです(時間経過でリセット)、課金することでシームレスにクオータは外れる模様。

FTPアカウントの「このユーザー名とパスワードを使用すると、Microsoft Azure アカウントに関連付けられているすべてのサブスクリプションのどのアプリにもデプロイできます」ってなんなの

「それな」

書いてある通りですが、「Azureの中では自分がつかうFTPのIDとPASSが全部統合されています」。なので、ここで設定したID/PASSは他のApp Serviceでも同じものを(厳密には、IDはPrefixが付くのですこし違って、パスワードは同一)使う事になります(一度設定すれば、二度は設定しない)。

ただし、これは「このApp ServiceにアクセスできるFTPアカウントが一個しか発行できない」…ではなく!ユーザーはリソースグループで追加できるわけで、それらのユーザーが「自分で自分のFTP IDとPASS」管理できる、剥奪もRG経由で綺麗にできる、ということ(のよう)です。

さすがマイクロソフトActive Directoryで培われた縦横無尽な大統一認証基盤だ!すげえ!…といいたいところではありますが、普段からしょぼいUnixACL*4になれしたしんでると、本当に不安になるのでもうちょっとなんか書いてくれるとUNIX系原始人に優しい。

Github連携の挙動がおかしいんだけど

  • 認証がうまくできない>ブラウザをとじてやりなおしたり、日をあらためてみよう
  • 本当によくわからない感じになっている>概要からアプリを再起動してみよう、プロセスも見よう
  • リポジトリ一覧、ブランチ一覧がでない>裏でがんばってるかも?数分(なにも動いてなさそうでも)待ってみよう。リロードしてみよう
  • pushして反映されない、状況がわからない>デプロイオプションで状況がみれるはず、最初はなんか反応悪い気がする…。
  • 本当に(どこに)ファイルがおかれたの?>FTPや、コンソールをつかってファイルがどう配置されているか確認しよう

ログはどこ?

ログ周りは私が把握しているかぎり一番辛いポイントです。

まず、すべてのログはデフォルトオフです。よって診断ログから、Web サーバー ログアクセスログ)をオンにしましょう。

するとログストリームから見る事ができます…が、ものすごい遅延するし、過去分を見れません(ログとは…?)。

しかたないので我々は生ログを見る事になります。ログファイルはLogFiles/http/Raw/Logsにかきだされており、「FTPで」DLできます。FTPか…。

まあ、アクセスログなんてどうでもいいですよね、必要なのはエラーログです。やはりデフォルトではエラーログはどこにもでません、さらに厳しい事にGUIからは設定ができません、なんでだ絶対必要でしょ。

出力されない理由はphpinfoをみるとわかりますが、log_errorsがoffになっていますのでonにしましょう。設定すればLogFiles/php_errors.logに無事に書き出しはじめます。やっぱりFTPでDLは必要なんですが。

onにする手法は皆さんご存じの通りですが、コードにini_set("log_errors", 1);とか書いちゃう方法と、php.iniに指定する方法です、php.iniはいじれない(と思う)ので、Document Root直下等に.user.iniを指定するとよいのではないでしょうか*5

なお、他にも診断ログ画面ではアプリケーション ログ (ファイル システム)詳細なエラー メッセージなどがありますが、これらはPHPにおいては一切意味なさそうです(IISのエラーHTMLが出力されたりしています)

その他、聡い人は気付くとおもいますが、「PHP デバッグ」という項目がありAzure App ServiceはなんとZ−rayがつかえるのです!デバッグとありますし、もしかしてこれでなんとかなるのでしょうか!

残念!なんとかなりません!オチからいえば

  • Exceptionは見れるが、Fatal Errorはみれない(PHPのバージョンにもよるかもしれない)
  • (Free版で)Enableにすると、あらゆるアクセスでZ-rayのダッシュボードがでてしまう(まあこれは開発用なら正しいが)
  • (多分)CPU時間や、ディスクスペースを消費するので、クオータを使い切る要因になりそう…

まあ、Z-ray自体は便利なので、使ったことが無ければためしてみるといいとおもいます。

まあ色々かきましたけど、ここは男らしくPHPの最高機能、display_errorsをオンにしてしまうのが一番なのではないでしょうかね…(苦笑)。

最後に重要なことを書くと、ディスクスペースが潤沢ではないのですから、調査なりがおわったらログは切った方が良いでしょう。(多分)ログローテーションの仕組みはありません*6

追記、ログについてエントリかきました

uzulla.hateblo.jp

PHPのバージョンや、directory index変更はどうするの?

アプリケーション設定から変更できます。

Directory Indexは既定のドキュメント項目です。まあPHP的にはindex.phpとindex.htmlだけで十分ですが、色々あります。htmlがphpより上なのだけはさっさと直した方がよいでしょう。

ところで、既定のドキュメントを見て見慣れない布陣だとおもいましたか?そうです、これはIISです!Apacheではないのです。

.htaccessはどうすればいいの?

フレームワークをつかってアプリをかいたらmod_rewrite相当のことは必要になりますよね、しかし上述したとおり、App Service はIISであり、.htaccessはよみこめません。web.configを書いて代わりに置くことになります。

あなたが利用しているフレームワークが有名なものなら大抵IIS対応のweb.configも配布しているでしょう。まあそこまでスゴイ難しいものではないので、ググればどうにかなります。

あくまで一例ですが、slim frameworkは以下のように書くようです。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="slim" patternSyntax="Wildcard">
                    <match url="*" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

なぜか403でアクセスできないファイルがある

私は/vendor/css/bootstrap/bootstrap.min.cssというパスのアクセスがどうしても403になりました。

「The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.」とか言われます。

よくわからないんですが、/css/bootstrap.min.cssと、ファイルを移動し、パスを変更したら動いたので、IISかなにかの予約語を踏んだ気がします。

(こういうときに詳細なエラーログが役立つ!のかなとおもったんですが、これは念力で解決しました…)

まとめ

良い点

  • 別途のツールが不要(Tool beltとかいれなくていい)
  • git不要!FTP(FTPS)!
  • (協力会社さんにやさしい!!(かもしれない…))
  • 試すだけならほぼタダで始められるし、遊びにもつかえそう
    • なんだかんだ最初の自腹が安く済むのは重要
  • PHP7がちゃんとある(という安心感)、なお5.4〜7。
  • Freeコンテナでもhttpsが無言で付いてくる、流石
  • ちゃんとつかえば、ちゃんとPaaSっぽい(使い込んでないのでまだなんとも)
  • 課金は1000円くらいから(共用サーバー、独自ドメイン
  • 「グローバルにリージョンがあるレンサバと考えると唯一無二感でるな!」「その需要、ニッチすぎるのでは…」*7

悪い点

  • 「これはWindowsIIS+PHP(fcgi))です、郷には入れば郷に従え」
    • web.configとか普段かかないからつらい
    • チョイチョイ、LinuxPHPと差異がある(けど、まあ滅多に踏まない…多分)
  • ログを見る環境が致命的に酷い
  • (使えなかったから書いて無いけど)コンソールが予想の3倍つかいづらい
  • 安定して挙動不審なWeb UI
    • 遷移してるだけで設定がまきもどったり
    • 昨日できたはずの事ができなくなったり
    • こんな時のazure cliだとおもったが、ほぼ対応してないのでWeb UI必須

感想

とりあえず、ゴリゴリのPaaSっぽくない所が良くて、これくらいゆるければ、その内仕事でも使うんじゃないかなーと思っております。

この感想が好感的な感想なのかわからないかもしれませんが、私は好感度高いということです。

(なんか、バックアップとかもあるんですよね…どんだけレンサバっぽいの)

あと、Preview版ではありますがタダのMysqlがあるのもいいですね(疲れたので、後日また書きます)、コンソールも面白いといえば面白くて、notepadとかたたくとどうやら本当に裏でnotepadがうごいてるらしくて面白いです(つかれたので、後日また書きます)、一瞬触ったAdvanced Toolsが実は使える感じなのでは?とおもいましたが、これも後で書きます(疲れたので)App Service Editor(Preview)がブラウザで動くエディタっぽくて、これもつかえそう(軽微な事ならFTPつかわなくても済む?)とおもった(ry(疲れた(ry

今日のところはこちらからは以上です、面白そうなので、また書きます。

追記

mysqlの件書きました。

uzulla.hateblo.jp

写真

無料コンテナ最高

f:id:uzulla:20160925045337p:plain

クオーターについて

f:id:uzulla:20160925045155p:plain

仮想ディレクトリについて

f:id:uzulla:20160925045241p:plain

github連携について

f:id:uzulla:20160925045311p:plain

*1:それだけで疑問が解決するかはさておき…

*2:AWSの重量級は、本当にPaaSなのかと疑問はありますが

*3:「Web+モバイル」というタイトルよくわからん…

*4:マシンで分断されたUIDやOwner,Group,Otherしかないパーミッション

*5:.user.iniはキャッシュされますので、修正が反映されなくてもあせらないようにご注意を http://php.net/manual/ja/configuration.file.per-user.php

*6:BlobにULしてしまえば関係ないですけど、お金がかかりますからねー

*7:当方的には非常に重要!!!