貼って使う Azure CLI スニペット（App Service編）

## 概要
* Azure リソースのメンテナンス等で使えそうなコマンドのスニペット（PowerShell ベース）をまとめました
* PowerShell コンソールに貼って使えます
* 今回は **App Service（Web Apps）** に関するスニペットをまとめます

## 前提
* [Azure CLI](https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli?view=azure-cli-latest) がインストールされている前提です
* 実行するには、事前に `az login` コマンドで 認証する必要があります（参考：[Azure CLI の概要 - サインイン](https://docs.microsoft.com/ja-jp/cli/azure/get-started-with-azure-cli?view=azure-cli-latest#sign-in)）
* 環境情報：
    * Azure CLI（v.2.0.57）
    * PowerShell（v.5.1.17134.407）
* 安全に試せるよう 情報取得系 中心にまとめます（一部注意事項あります）
* 一部のスニペットは実行時にパラメータが必要となります

---


## App Service の一覧を取得したい
```
az webapp list
```


## App Service名 だけ一覧取得したい

```
(az webapp list | ConvertFrom-Json) | % {$_.name}
```


## 停止中の App Service名 を一覧取得したい

```
(az webapp list | ConvertFrom-Json) | where {$_.state -eq "Stopped"}| % {$_.name}
```


## 起動中の App Service名 を一覧取得したい

```
(az webapp list | ConvertFrom-Json) | where {$_.state -eq "Running"}| % {$_.name}
```


## アプリケーション設定を取得したい

```
Param(
    [Parameter(Mandatory=$true)] $resourceGroup,
    [Parameter(Mandatory=$true)] $appName
); `
az webapp config show -g $resourceGroup -n $appName
```


## アプリケーション設定 の 'アプリケーション設定'（環境変数）を取得したい

```
Param(
    [Parameter(Mandatory=$true)] $resourceGroup,
    [Parameter(Mandatory=$true)] $appName
); `
az webapp config appsettings list -g $resourceGroup -n $appName --output table
```


## AlwaysOn(常時接続)が OFF の App Service名（と 紐づくリソースグループ名）を一覧取得したい

* **【注意】サブスクリプションに含まれるすべての App Service 設定を取得するため、処理に時間がかかります！**

```
@((az webapp list | ConvertFrom-Json) | `
    % {(az webapp config show -n $_.name -g $_.resourceGroup | ConvertFrom-Json)} | `
    where {$_.alwaysOn -eq $False}) | `
    % {$_.name + " (" + $_.resourceGroup + ")"};
```

* 特定のリソースグループ内のみ検索したい場合は `az webapp list` を `az webapp list -g <リソースグループ名>` と変更する


## すべての App Service の アプリケーション設定 を JSON として保存したい

* **【注意】サブスクリプションに含まれるすべての App Service 設定を取得するため、処理に時間がかかります！**
* **【注意】カレントディレクトリ以下指定したディレクトリに結果を保存します！**

```
Param(
    [Parameter(Mandatory=$true)] $outputDirName
); `
New-Item $outputDirName -ItemType Directory -Force; `
(az webapp list | ConvertFrom-Json) | `
    % {
        $outer = $_;
        (az webapp config show -n $_.name -g $_.resourceGroup | ConvertFrom-Json) `
    } | `
    % {
        New-Item ($outputDirName + "/" + $outer.name) -ItemType Directory -Force; `
        $_ | ConvertTo-Json -Depth 100 > ("./$outputDirName/" + $outer.name + "/config.json") `
    };
```

* 特定のリソースグループ内のみ検索したい場合は `az webapp list` を `az webapp list -g <リソースグループ名>` と変更する
* `-Depth 100` で シリアライズ時のネストの深さを指定（100が最大値）
    * デフォルトのシリアライズの挙動は、ネストが深すぎると変換してくれないため必要


## Webジョブの一覧を取得したい

* トリガー形式のジョブ

```
Param(
    [Parameter(Mandatory=$true)] $resourceGroup,
    [Parameter(Mandatory=$true)] $appName
); `
(az webapp webjob triggered list -g $resourceGroup -n $appName | ConvertFrom-Json)
```

* 継続的なジョブ

```
Param(
    [Parameter(Mandatory=$true)] $resourceGroup,
    [Parameter(Mandatory=$true)] $appName
); `
(az webapp webjob continuous list -g $resourceGroup -n $appName | ConvertFrom-Json)
```


## Webジョブ名とステータスを ジョブ種類問わず まとめて取得したい

* トリガー形式も継続的なジョブもまとめて取得

```
Param(
    [Parameter(Mandatory=$true)] $resourceGroup,
    [Parameter(Mandatory=$true)] $appName
); `
$res1 = (az webapp webjob triggered list -g $resourceGroup -n $appName | ConvertFrom-Json) | % {$_.name + " - " + $_.latestRun.status}; `
$res2 = (az webapp webjob continuous list -g $resourceGroup -n $appName | ConvertFrom-Json) | % {$_.name + " - " + $_.status}; `
($res1 + $res2);
```


## App Service のログをZIPで取得したい

```
Param(
    [Parameter(Mandatory=$true)] $resourceGroup,
    [Parameter(Mandatory=$true)] $appName
); `
az webapp log download -g $resourceGroup -n $appName --log-file ./applog.zip
```


## 今までに削除した App Service名, 所属リソースグループ, 削除日時 を一覧で取得したい

```
(az webapp deleted list | ConvertFrom-Json) | %{$_.name + "`n  リソースグループ: " + $_.resourceGroup + "`n  削除日時: " + $_.deletedTimestamp}
```


## スロット名と状態を一覧で取得したい

```
Param(
    [Parameter(Mandatory=$true)] $resourceGroup,
    [Parameter(Mandatory=$true)] $appName
); `
(az webapp deployment slot list -g $resourceGroup -n $appName | ConvertFrom-Json) | % {$_.name + " (" + $_.state + ")"}
```