APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

Azure Deployment Environmentsで実現する組織におけるAzureインフラストラクチャー構成管理

はじめに

こんにちは!ACS事業部)土居です。

先週のIgnite 2022でパブリックプレビューになったAzure Deployment Environmentsについて紹介したいと思います。 公式からアナウンスされた発表内容はこちらのブログ記事をご参考下さい。

techcommunity.microsoft.com

Azure Deployment Environmentsとは?

開発のアジリティ向上がビジネスの成功に直結する時代となり、開発に必要な複数の環境をいかに高速に用意できるかが重要であると世の中では叫ばれています。 そうした中で、ある一つのプロジェクトで作成した高品質な環境を汎用化し、Azure Resource ManagerやBicep、Terraformに代表されるようなInfrastructure as Codeを用いて別のプロジェクトや社内開発者向けに横展開するといったニーズが非常に多くなっています。

Azure Deployment Environmentsは、このようなAzureインフラストラクチャーのテンプレート環境を横展開する際に便利なサービスです。 Azure Deployment Environmentsを利用することで開発チームはプロジェクトベースのテンプレートを使用してアプリインフラストラクチャを迅速に起動し、セキュリティ、コンプライアンス、およびコスト効率を最大化しながら、一貫性とベストプラクティスを確立できます。

また、その他の使用シナリオとして以下が公式ドキュメントで紹介されています。

  • 再利用可能なコードとしてのインフラストラクチャ (IaC) のテンプレートを使用して、オンデマンドの Azure 環境をすばやく作成します。
  • サンドボックス環境を作成してコードをテストします。
  • さまざまな種類の環境を事前に構成して、CI/CD パイプラインとシームレスに統合します。
  • トレーニングとデモ用の事前構成済みの環境を作成します。

learn.microsoft.com

Azure Deployment Environmentsの構成要素

Azure Deployment Environmentsサービスは下記のように構成されています。 少し複雑なので、利用にあたりそれぞれの関係性は押さえておきましょう。

コンポーネント 説明
Dev Center 複数のプロジェクトやその共通設定(カタログや環境タイプ)を束ねるコレクションです。Azure Deployment Environmentsを活用する上でとりあえず1つ作成しましょう。
Project Azure Deployment Environmentsの管理者が、開発チーム向けに公開するアクセス単位です。プロジェクトは1つのDev Centerに関連付けられます。Azure Deployment Environmentsの管理者は開発チームがすぐ環境を利用できるように様々な種類のインフラストラクチャー環境を事前定義しておくことができます。
Environment Type 開発チームが利用できる様々なAzure環境を定義することができます。この環境タイプはAzureのサブスクリプションと紐付けられます。
Catalogs インフラストラクチャーのテンプレートコードを格納したリポジトリの参照先を表します。参照先には現在、GitHubとAzure Reposが利用可能です。リポジトリ内のテンプレートのメタデータに基づき、カタログ項目としてデプロイ単位をまとめることができます。
Environment Azure上に作成されるリソースの構成単位です。Environment TypeとCatalogs(カタログ項目)を関連付けることで、デプロイ先のサブスクリプションとインフラストラクチャーのテンプレートコードが決まります。
マネージドID 開発チームは用意されたEnvironmentを作成したり削除したりしますが、それにはAzureリソースを操作する権限が必要になり権限設計が面倒です。Azureリソース操作は、Dev CenterのマネージドIDを用いて代わりに実行されます。
Key Vaults CatalogsでGitHubとAzure ReposのリポジトリにアクセスするためのPAT(個人アクセストークン)をセキュアに格納します。

公式ドキュメントにも各構成要素の説明がありますので、参考にして下さい。 learn.microsoft.com

Azure Deployment Environmentsを作成して動作確認してみよう

クイックスタートに従って、実際にAzure Deployment Environmentsを作成していってみましょう。 以下の順序に沿って、作業を行います。

  1. Dev Centerの作成
  2. マネージドIDの有効化
  3. Key Vaultsの作成とアクセスポリシーの設定
  4. リポジトリの作成(今回はAzure Reposを利用します。)
  5. Catalogsの作成
  6. Environment Typeの作成
  7. Projectの作成
  8. 再度Environment Typeの作成(Azureサブスクリプションとの関連付け)
  9. 開発チームへのアクセス権付与
  10. Environmentの作成と削除

1. Dev Centerの作成

まずはDev Centerを作成します。Azure Portalで「デベロッパーセンター」で検索し、作成しましょう。英語のPortalを利用されている方は検索窓に「Dev centers」と検索します。
Dev Centerの名前、リージョン(Japan Eastも選択可能でした!)を決めて作成します。

作成が完了すると、Dev Centerリソースが作成されます。

2. マネージドIDの有効化

作成したDev CenterリソースのマネージドIDを有効化します。「Dev Centerリソース」-「ID」からシステム割り当て済みのマネージドIDを選択し、「状態」をオンにしましょう。これはどのAzureリソースでも同じ設定操作なのでわかりやすいですね。作成されたオブジェクトIDは後で使用するのでコピペして控えておきましょう。

3. Key Vaultsの作成とアクセスポリシーの設定

CatalogsのPAT格納用のKey Vaultsを先に作成しておきましょう。Key Vaultsの詳細については下記を参照下さい。

learn.microsoft.com

作成時に合わせてアクセスポリシーも設定してしまいます。2で有効化したDev CenterのマネージドIDに対してシークレットへの読み取り権限を追加します。コピペしたオブジェクトIDでマネージドIDを検索して下さい。

4. リポジトリの作成(今回はAzure Reposを利用します。)

Azure Reposでリポジトリを作成し、テスト用のARM Template を格納しておきます。尚、今回使用したARM Template はGitHub上で公開されているチュートリアル用のテンプレートを利用させて頂きました。

github.com

PATもAzure Deployment Environments用に新規で作成しておきます。PATに与える権限は「Code」-「Read」のみでも問題なさそうでした。

作成したPATをコピーし、3で作成したKey Vaultsの「シークレット」に格納しましょう。格納後、シークレット識別子は次のCatalogs作成で必要になるのでコピペして控えておきましょう。

リポジトリにGitHubを利用する場合は、以下のドキュメントを参考に読み替えながらリポジトリの作成とPATの作成をして下さい。

https://docs.github.com/ja/get-started/quickstart/create-a-repo

https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token

5. Catalogsの作成

Catalogsの作成を行います。カタログ名に加え、4で作成したリポジトリのURL、ブランチ、フォルダーパス、シークレット識別子を入力して作成しましょう。 Dev Centerからうまくリポジトリにアクセスできると「Status」が「接続済み」となり初回同期が実行されます。 これで、各ProjectからCatalogsを参照することができるようになります。

6. Environment Typeの作成

Dev CenterからEnvironment Typeの作成を行います。今回は全て利用しませんが、とりあえず「Sandbox」、「Dev」、「Proc」の3つを作成してみました。

7. Projectの作成

次はProjectの作成です。「Dev Center」-「プロジェクト」から作成していきましょう。 プロジェクトの作成では、紐づけるDev Centerを指定します。

作成が完了すると、Projectリソースが作成されます。

8. 再度Environment Typeの作成(Azureサブスクリプションとの関連付け)

7で作成したProjectリソースからEnvironment Typeを作成します。「Project」-「環境の種類」から作成していきましょう。 ここでは、6で作成したEnvironment Typeとデプロイ先のAzureサブスクリプション、作成されたリソースに対してユーザーに付与するロールを設定することができます。
今回はテストなので、Environment Typeは「Sandbox」、「Dev」、デプロイ先のAzureサブスクリプションは共通、付与するロールは「所有者」にしました。本来であれば、Environment Typeに応じて紐づけるAzureサブスクリプションや付与するロールなどを変更してあげると良いですね。

Environment Typeが作成されると以下のように画面に表示されます。

9. 開発チームへのアクセス権付与

1-8までで、開発チームに引き渡す事前準備が完了しました。最後に、Projectに対して開発チームがアクセスできるようにDeployment Environments Userロールを付与してあげます。 その他のロールについての詳細はこちらのドキュメントを参照下さい。

learn.microsoft.com

learn.microsoft.com

10. Environmentの作成と削除

開発チームのロールでAzureにサインインし、環境を作成していきます。現在、環境作成はコマンドラインでしか行えないようですので注意下さい。今回はAzure CLIを用いて行いました。 詳細は手順は下記のドキュメントを参照下さい。

learn.microsoft.com

# 特定のプロジェクトで作成できる環境の種類を一覧表示します

az devcenter dev environment-type list --dev-center doi-deploy-center --project-name sample-project -o table

Command group 'devcenter' is experimental and under development. Reference and support levels: https://aka.ms/CLI_refstatus
DeploymentTargetId                                   Name     Status
---------------------------------------------------  -------  --------
/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  Sandbox  {}
/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  Dev      {}
# 特定のプロジェクトで使用できるカタログ アイテムを一覧表示します
az devcenter dev catalog-item list --dev-center doi-deploy-center --project-name sample-project -o table

Command group 'devcenter' is experimental and under development. Reference and support levels: https://aka.ms/CLI_refstatus
CatalogName    Name
-------------  -----------
AzureRepos     FunctionApp
AzureRepos     Sandbox
AzureRepos     WebApp
# 使用できるカタログ アイテムの一覧から catalog-itemを使用して、環境を作成します
az devcenter dev environment create --dev-center-name doi-deploy-center --project-name sample-project -n Sandbox --environment-type Sandbox --catalog-item-name WebApp --catalog-name AzureRepos

尚、今回使用したARM Template は設定パラメータが既に埋め込まれていましたが、環境作成時にパラメータ指定をする場合には、--parametersのオプションを指定すると良いようです。json-stringまたはjson-fileとして指定が可能です。

環境作成が完了すると、以下のようにsandbox環境が特定のリソースグループで作成されています。プロビジョニングの状態も「成功」となっています。実際にリソースグループにはApp Serviceがデプロイされており、ユーザーに権限も付与されています。

作成した環境は、az devcenter dev environment deleteを実行することでまるごと削除が可能です。 同じように、Dev環境もカタログアイテムを指定することで、Sandboxと同じリソース構成や別のリソース構成をデプロイすることができます。
ここまで環境を準備するのが少し面倒でしたが、開発チームからとると、コマンドのcreatedeleteを行うだけで環境の構築と削除が即時に行えるため非常に楽ですね。
開発チームに不要に強いロールが与えられていない点もセキュリティの観点から良さそうです。

おわりに

まだパブリックプレビュー状態のAzure Deployment Environmentsですが、ARM TemplateだけではなくBicepやTerraformも今後サポートされる予定だそうです。 正直、AzureでIaCを利用するならこの2つを利用することが多いため、拡張が今から楽しみですね。 他にも、Dev CenterにはAzure Compute GalleryやDev Boxなどの設定項目も存在します。
公式ドキュメントにまだそれぞれの使い方は紹介されていませんが、おそらくCatalogsに加えてデプロイするVMのテンプレートイメージやDev Box環境なども指定できるようになるのではないでしょうか。 引き続き進捗をWatchしていきましょう。

azure.microsoft.com