Azure Deployment Environment の体験記とつまずきそうなポイント


Azure Deployment Environmentを触ってみてつまずきそうなポイントをまとめておく

参考：[Azure Deployment Environments プレビューとは](https://learn.microsoft.com/ja-jp/azure/deployment-environments/overview-what-is-azure-deployment-environments)

## デベロッパーセンターを作成する

公式ドキュメント通りに作成する

### 設定周り

作成したデベロッパーセンターで以下のような設定を行う。

- デベロッパーセンターでマネージドIDを割り当てる
- デベロッパーセンターでAzure ロールの割り当て：**所有者ロール** を割り当てる
- KeyVault を作成してアクセスポリシーからマネージドIDを割り当てる

これらの設定によりデベロッパーセンターが KeyVault にアクセスできるようになる。

試す環境として👇のリポジトリをforkして参照した。
https://github.com/Azure/deployment-environments

PAT の生成をしないといけないので自分のアカウントにforkしておく

PAT の生成は、GitHub では右上の自分のアイコンの[Settings]へいき、[Developer Settings] -> [Personal access tokens(classic)] から生成できる。  
生成した PAT は先ほど作成した KeyVault のシークレットに保管する。
デベロッパーセンターが 保管したこのシークレット(PAT)を参照できるようにシークレット識別子をコピーしておく

PAT周りを適切に設定しないとカタログの追加でたぶん失敗する。

### カタログの追加

以下の内容を入力して追加する

- 名前: 任意のカタログ名を入力
- Git クローン URI: リポジトリのURL。設定周りでフォークしたものを入力
- ブランチ: main
- フォルダーのパス: /Environments
- シークレット識別子: PATを保管しているシークレットのシークレット識別子を入力

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467168/96fd6c0c-84a4-6e97-4a87-3a5017c9f132.png)
シークレット識別子は、マネージドIDやアクセスポリシーを設定していないと失敗するので適切に設定する。  
追加すると同期がスタートする。

失敗した場合は上記の設定を見直す。

### 環境の種類の作成

デベロッパーセンターから環境の種類を作成する。
今回は Dev で作成した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467168/99b028bb-395e-d256-7d94-11f44881308d.png)

## プロジェクトの作成

デベロッパーセンターからプロジェクトを作成する
[管理] にある [プロジェクト] へ移動して [作成] を押す
任意で名前などを入力して作成した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467168/04499ca6-1d8b-cd10-2628-b6ed3ed460bc.png)

### 環境の作成

作成したプロジェクトへ移動して、そこから [管理] にある [環境] へ移動すると👇の画面が表示される。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467168/069ce926-f313-724e-7bb6-b0b3075eaf7f.png)
現在(2022/11/22)、GUIでは用意されていないため Azure CLI から作成する。
コマンドは公式ドキュメントあるのでそれを参考にしながら作成。  
（※2022/11/22 時点だとコマンドが間違ってたりしてるので注意）

参考にしたコマンド→[環境の種類](https://learn.microsoft.com/ja-jp/azure/deployment-environments/how-to-configure-use-cli#environments)

Azure Portal 上の Cloud Shell だとログイン周りで私はうまくいかなかったのでlocalでコマンド流した。

az コマンド使用できるのであれば local でも問題なくできる。

### 拡張機能をインストール

```PowerShell
az extension add --source https://fidalgosetup.blob.core.windows.net/cli-extensions/devcenter-0.1.0-py3-none-any.whl
```

### ログイン

```PowerShell
az login
```

### 環境作成

```PowerShell
az devcenter dev environment create --dev-center-name dev-center-hoge --project-name pj-hoge -n env-hoge-test --environment-type Dev --catalog-item-name WebApp --catalog-name catalog-hoge --owner me
```

- `--dev-center-name`: プロジェクトがあるデベロッパーセンターを入力。今回は最初に作成したデベロッパーセンターでok
- `--project-name`: 作成したプロジェクトの名前を入力
- `-n`: 作成したい環境の名前（任意の名前を入力）
- `--environment-type`: 環境の種類を入力（今回は Dev）
- `--catalog-item-name`: forkしたリポジトリのEnvironments/WebApp/manifest.yamlで記述してるnameを入力する。※1
- `--catalog-name`: 追加したカタログの名前
- `--owner`: me を入力

※1 `--catalog-item-name` では👇画像にある `name` に指定してある WebApp を入力した。（画像はfork元のリポジトリになってます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467168/e31ec6d2-9d77-23d8-bf09-2507173f4bec.png)
正常にコマンドが走ると `Running` になるので待機。  
コマンドが問題なければ Azure Portal 上でプロビジョニングのステータスとかも出てきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467168/f46688be-9011-1812-ea26-f0ae952de03f.png)
しばらくすると プロビジョニングの状態が成功になります。  
この画面からリソースグループ、コスト分析の画面へ遷移できる。

#### 注意点

- az login でログインしてからでないと失敗しますのでまずはログインする
- 存在するリソース名(デベロッパーセンター、プロジェクト、環境の種類、カタログ名、カタログアイテム名)を入力しないとおそらくエラーになる
- もしプロビジョニングが失敗した場合は、設定まわりを見直す。
  - ロール、KeyVault のアクセスポリシー、GitHub のPATなど
  - カタログの同期を再度確認してみる。同期が失敗した場合はPATやKeyVault周りの設定が怪しいと思われる
- コマンド誤表記
  - 公式ドキュメントでは `-g <resource-group-name>` でリソースグループを選択しているが、このオプションは現時点ではないらしい
  - 公式ドキュメントでは `---catalog-name <catalog-name>` となっており、`-`が１個多いのでコピペするとき注意
  - 公式ドキュメントでは `--parameters <deployment-parameters-json-string>` がありますが必須オプションではないです。おそらくデプロイ実行時の設定まわりをjson文字列で渡せるのだと思ってます。
  - 公式ドキュメントでは `--owner me`は記載されてないが、この所有者識別子のオプションがないとたしか認証でエラーになり、プロビジョニングが失敗した気がします。
- 困ったら`--help`オプションでコマンドのオプションを確認する

```PowerShell
az devcenter dev environment create --help
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467168/9e0ee3f2-a0e1-8c52-e3d9-76e739dc0e9f.png)

#### 環境の削除：おまけ

最後にリソースをきれいにするために以下のコマンド流しました。

```PowerShell
az devcenter dev environment delete --dev-center dev-center-hoge --project-name pj-hoge -n env-hoge-test --user-id "me"
```

正常に削除できていたのを確認しました。