お勉強のためAzure CLIでAzureのリソースを弄っていたら色々ハマったので記録に残しておきます。
下記お話はWindows環境下のAzure CLI Version 2.0.78のお話です。
目次
- 目次
- Azure CLIのWindows側WebAppのRuntimeに.NET Coreがない?
- --deployment-local-gitで作成した.NET Core 3.1アプリのDeployに失敗する
- ZIP Deploy時にKuduがコケる
- おわり
Azure CLIのWindows側WebAppのRuntimeに.NET Coreがない?
az webapp list-runtimes
でRuntimeを確認すると、.NET Core系が表示されません。
> az webapp list-runtimes [ "aspnet|V4.7", "aspnet|V3.5", ... ]
az webapp list-runtimes --linux
だと.NET Core系Runtimeが表示されます。
> az webapp list-runtimes --linux [ ... "DOTNETCORE|1.0", "DOTNETCORE|1.1", "DOTNETCORE|2.0", "DOTNETCORE|2.1", "DOTNETCORE|2.2", "DOTNETCORE|3.0", "DOTNETCORE|LTS", "DOTNETCORE|Latest", ... ]
Windowsでは.NET Coreが使用できない?おかしいなぁと思いつつ--is-linux
を指定せずにAppService Planを作成し、WebAppの--runtime
をDOTNETCORE|LTS
に指定したところ、案の定エラーとなりました。
Azure PortalではWindowsもLinux両方とも.NET Core対応してるのに...。
とりあえず--is-linux
を指定してWebAppを作ることにしました。
--deployment-local-git
で作成した.NET Core 3.1アプリのDeployに失敗する
こちらの記事を参考に--deployment-local-git
オプションを付与して作成したWeebAppにDeployしてみました。
下記コマンドでAppService, WebAppを作成します。
WebAppは--deployment-local-git
オプションを付与して作成します。
az appservice plan create --resource-group <GroupName> --name <PlanName> --location japaneast --sku FREE --is-linux az webapp create --resource-group <GroupName> --name <WebAppName> --plan <PlanName> --runtime "DOTNETCORE|LTS" --deployment-local-git
Commit先のRepositoryを調べます
az webapp deployment source config-local-git -g <GroupName> -n <WebAppName>
適当なASP.NET Coreプロジェクトを作成しComitすることでDeployします。
mkdir SampleMVC cd SampleMVC dotnet new sln dotnet new mvc -o SampleMVC.App dotnet sln add .\SampleMVC.App git remote add azure <RepositoryURL> git add * git commit -m "First Commit" git push azure master
Deployに失敗します。
remote: Deploy Async remote: Updating branch 'master'. remote: Updating submodules. remote: Preparing deployment for commit id 'hoge'. remote: Repository path is /home/site/repository remote: Running oryx build... remote: Build orchestrated by Microsoft Oryx, https://github.com/Microsoft/Oryx remote: You can report issues at https://github.com/Microsoft/Oryx/issues remote: remote: Oryx Version : 0.2.20191105.2, Commit: hogehoge, ReleaseTagName: 20191105.2 remote: Build Operation ID: |mC+o15dPjG8=.a6cd1293_ remote: Repository Commit : hogehoge remote: remote: Error: Platform 'dotnet' version 'lts' is unsupported. Supported versions: 1.0.16, 1.1.14, 2.0.9, 2.1.13, 2.2.7, 3.0.0 remote: Deployment Logs : 'https://foobar.scm.azurewebsites.net/newui/jsonviewer?view_url=/api/deployments/hogehoge/log' To https://foobar.scm.azurewebsites.net:443/SampleMVC.git * [new branch] master -> master
なんでや…と思ってぐぐったところ、こんなissueが。
ほーん。
ちょっと動かしてみたいだけなのになぁ…。じゃあローカルでビルドしてFTP転送するか、とFTP転送を試してみる。
ZIP Deploy時にKuduがコケる
以下のコマンドでAppServiceとWebAppを作ったとします。
前途の通り、AppServiceは--is-linux
で作成しています。
az appservice plan create --resource-group <GroupName> --name <PlanName> --location japaneast --sku FREE --is-linux az webapp create --resource-group <GroupName> --name <WebAppName> --plan <PlanName> --runtime "DOTNETCORE|LTS"
Deploy Userを適当に作ります。
az webapp deployment user set --user-name <UserName> --password <Password>
先程作成したコードをRuntimeIdentifier=linux-x64
を指定してpublishします。
publishしたオブジェクトをZIP固めてDeployします。
※参考:ZIP または WAR ファイルを使用した Azure App Service へのアプリのデプロイ
cd SampleMVC dotnet publish -c Release -r linux-x64 -o out compress-archive -path ./out -destinationpath build.zip az webapp deployment source config-zip --resource-group <GroupName> --name <WebAppName> --src build.zip
結果、Deployに失敗します。
PS C:\Users\piyoe\work\dotnet\SampleMVC> compress-archive -path ./out -destinationpath build.zip >> az webapp deployment source config-zip --resource-group <GroupName> --name <WebAppName> --src build.zip Getting scm site credentials for zip deployment Starting zip deployment. This operation can take a while to complete ... Deployment endpoint responded with status code 202 Configuring default logging for the app, if not already enabled Zip deployment failed. {'id': 'hogehoge', 'status': 3, 'status_text': '', 'author_email': 'N/A', 'author': 'N/A', 'deployer': 'Push-Deployer', 'message': 'Created via a push deployment', 'progress': '', 'received_time': '2019-12-29T12:30:20.0796419Z', 'start_time': '2019-12-29T12:30:20.2406707Z', 'end_time': '2019-12-29T12:30:23.0381806Z', 'last_success_end_time': None, 'complete': True, 'active': False, 'is_temp': False, 'is_readonly': True, 'url': 'https://hogefugapiyo.scm.azurewebsites.net/api/deployments/latest', 'log_url': 'https://WebAppNameHogehoge.scm.azurewebsites.net/api/deployments/latest/log', 'site_name': 'WebAppNameHogehoge'}. Please run the command az webapp log tail -n <WebAppName> -g <GroupName>
ググったら同じことで困ってる人がいました。
https://github.com/projectkudu/kudu/issues/2982
対処法
本当の原因は分かりませんが、以下の手順で回避することが出来ました。
PowerShellでcompress-archive
せずにpublishしたフォルダを右クリックして送る(N) -> 圧縮(zip形式)フォルダー
で作成したZIPをaz webapp deployment source config-zip
コマンドでUpするとDeployすることができました。
結局、わざわざ手動で圧縮するのは面倒なのでVisual Studio CodeのAzure App Service
を使うようにしました。
おわり
実際の開発ではCI/CD環境を構築し、そこからDeployするのがセオリーです。
なので、こういった手動でのDeployはすることは殆どないとは思いますが…もやもやしますね。
まだ色々罠がありそうなので、さっさとARM書けるようになった方が良いのでは感ありますね