Microsoft AzureのAppServiceは .NET、.NET Core、Node.js、Java、Python、PHPを動作させる事ができるプラットフォームです。いわゆるサーバレスのアーキテクチャでOSに対してログインする事はできませんので、ストレージ層と疎結合になっている事が使用上の前提条件です。このページでは、AppServiceをazコマンドで操作する方法をまとめます。
AppService
デプロイ用ユーザの作成
以下のコマンドでデプロイ用ユーザを作成します。ユーザ名はAzureで一意な名前を指定する必要がありますので、「user01」のような他の人が使ってそうな名前は使用できません。パスワードは長さが8文字以上で、文字、数字、記号のうち2つを含む必要があります。
az webapp deployment user set \ --user-name <username> \ --password <password>
実行例は以下の通りです。
admin@mac19 ~ % az webapp deployment user set \ --user-name gokatei03_user \ --password P@ssw0rd1234 { "id": null, "kind": null, "name": "web", "publishingPassword": null, "publishingPasswordHash": null, "publishingPasswordHashSalt": null, "publishingUserName": "gokatei03_user", "scmUri": null, "systemData": null, "type": "Microsoft.Web/publishingUsers/web" }
リソースグループの作成
以下のコマンドでリソースグループを作成します。
az group create --name myResourceGroup --location japaneast
AppServiceプランの作成
以下のコマンドでAppServicePlanを作成します。
az appservice plan create \ --name myAppServicePlan \ --resource-group myResourceGroup \ --sku FREE \ --is-linux
AppServiceの作成
以下のコマンドでAppServiceを作成します。–nameはAzureで一意な名前を入力します。「sample01」のような誰かが使ってそうな名前はerrorになります。
引数–runtimeで指定するランタイムは「az webapp list-runtimes」コマンドで指定可能なランタイム一覧を調査する事ができます。–deployment-local-gitはローカルのgitからデプロイする場合の指定です。ローカルのgit以外を使用する方法は、公式ドキュメントの「Azure App Service の CLI サンプル」の実装例などを参照ください。
az webapp create \ --resource-group myResourceGroup \ --plan myAppServicePlan \ --name <app-name> \ --runtime 'PHP|7.4' \ --deployment-local-git
操作例は以下の通りです。ログ出力される「deploymentLocalGitUrl」や「enabledHostNames」は後続の操作で使用するので、メモに控えてください。
admin@mac19 ~ % az webapp create \ --resource-group myResourceGroup \ --plan myAppServicePlan \ --name gokatei03-app \ --runtime 'PHP|7.4' \ --deployment-local-git Local git is configured with url of 'https://gokatei03_user@gokatei03-app.scm.azurewebsites.net/gokatei03-app.git' { "availabilityState": "Normal", "clientAffinityEnabled": true, "clientCertEnabled": false, "clientCertExclusionPaths": null, "clientCertMode": "Required", "cloningInfo": null, "containerSize": 0, "customDomainVerificationId": "327A85F857F2C6D6ADE2FCDBE11E225065D369A1D0CCFA26C79E0674E5C91EBC", "dailyMemoryTimeQuota": 0, "defaultHostName": "gokatei03-app.azurewebsites.net", "deploymentLocalGitUrl": "https://gokatei03_user@gokatei03-app.scm.azurewebsites.net/gokatei03-app.git", "enabled": true, "enabledHostNames": [ "gokatei03-app.azurewebsites.net", "gokatei03-app.scm.azurewebsites.net" ],
「enabledHostNames」欄に出力されたホスト名をブラウザに入力します。このページの操作例の場合ならば「gokatei03-app.azurewebsites.net」をブラウザに入力します。
まだ、アプリケーションがデプロイされる前ですので、マイクロソフトが用意したサンプルページが表示されます。
サンプルアプリケーション
サンプルアプリケーションの作成
index.htmlとinfo.phpのみの単純なPHPアプリケーションを作成します。操作例は以下の通りです。
mkdir app_service_sample_01 cd app_service_sample_01 cat << EOF > index.html this is top page EOF cat << EOF > info.php <?php phpinfo(); EOF
サンプルアプリケーションの動作確認
phpコマンドを用いて簡易的にhttpサーバを起動します。
php -S localhost:8080
「http://localhost:8080/index.html」と「http://localhost:8080/info.php」をブラウザに入力し、Webページが表示される事を確認します。
git関連の設定
ローカルのgitで初回のコミットをします。また、ローカル側のブランチ名は「main」とします。
git init git add . git commit -m "first commit" git branch -m main
AppSerivceでどのブランチからのpushを許可するかを指定します。以下は「main」からのpushを許可する設定例です。
az webapp config appsettings set \ --name gokatei03-app \ --resource-group myResourceGroup \ --settings DEPLOYMENT_BRANCH='main'
AppService作成時に「deploymentLocalGitUrl」欄にリモートブランチのURLが表示されていたはずです。このURLをazureというリモートブランチ名で定義します。
git remote add azure <deploymentLocalGitUrl-from-create-step>
操作例は以下の通りです。
git remote add azure https://gokatei03_user@gokatei03-app.scm.azurewebsites.net/gokatei03-app.git
動作確認
デプロイ1回目
ローカルのmainブランチをAppServiceへデプロイします。
git push azure main
操作例は以下の通りです。対話形式でパスワードを問われますが、az webapp deployment user setコマンドで指定したパスワードを指定してください。このページの操作例の場合ならば「P@ssw0rd1234」になります。
admin@mac19 app_service_sample_01 % git push azure main Password for 'https://gokatei03_user@gokatei03-app.scm.azurewebsites.net': Enumerating objects: 4, done. Counting objects: 100% (4/4), done. Delta compression using up to 4 threads Compressing objects: 100% (2/2), done. Writing objects: 100% (4/4), 303 bytes | 151.00 KiB/s, done. Total 4 (delta 0), reused 0 (delta 0), pack-reused 0 remote: Deploy Async remote: Updating branch 'main'. remote: Updating submodules. <omitted> remote: Deployment successful. remote: Deployment Logs : 'https://gokatei03-app.scm.azurewebsites.net/jsonviewer?view_url=/api/deployments/f6740920b17f38add0ba49dd628772d3cfd42517/log' To https://gokatei03-app.scm.azurewebsites.net/gokatei03-app.git * [new branch] main -> main admin@mac19 app_service_sample_01 %
index.htmlやinfo.phpをブラウザで閲覧してみましょう。このページの操作例の場合ならば、ブラウザに入力するURLは「http://gokatei03-app.azurewebsites.net/index.html」「http://gokatei03-app.azurewebsites.net/info.php」になります。
「Linux 550552febe95 5.4.0-1056-azure #58~18.04.1-Ubuntu SMP Wed Jul 28 23:14:18 UTC 2021 x86_64 」と表示されている事から、Azureのマネージドサービスの仮想マシン上にデプロイされた事が分かります。
デプロイ2回目
コードの改修が可能かどうかを確認するために、2回目のデプロイをやってみましょう。
動作確認のため、簡単なPHPコードを作成します。動作確認例としてFizz Buzzを示します。
cat << 'EOF' > fizzbuzz.php <?php for($i=1; $i<=100; $i++) { if ($i % 3 == 0 && $i % 5 == 0) { echo "FizzBuzz"; } elseif ($i % 3 == 0 ) { echo "Fizz"; } elseif ($i % 5 == 0) { echo "Buzz"; } else { echo $i; } echo "<br/>"; } EOF
作成したコードをAzureへPushします。
git add fizzbuzz.php git commit -m "fizz buzz" git push azure main
fizzbuzz.phpをブラウザで開き、想定通りの出力が得られる事を確認します。
リソースの解放
リソースグループの削除
リソースグループを削除します。
az group delete --name myResourceGroup --no-wait
デプロイ用ユーザの無効化
デプロイ用ユーザを削除する事はできません。代わりにユーザ名に空文字列を指定すると、設定前のユーザが使えなくなるので実質のユーザ削除と同等の効果になります。
az webapp deployment user set \ --user-name "" \ --password ""