PowerShell を使用した Azure Blueprints の管理

11月 14, 2019 セキュリティとコンプライアンス, MOVEit

Azure Blueprints は、Azure ガバナンスのための「ワンストップショップ」を提供します。JSON テンプレートとコントロールされた統合ワークフローを実装することによって、標準化された Azure 環境を定義、デプロイ、実施、および維持できます。

このブログでは、Azure PowerShell てを使用し Azure Blueprints サービスを管理する方法を説明します。Azure Blueprints の概要と、Azure ポータルで Azure Blueprints を作成する方法を知っていることを前提にしていますので、必要な場合は、それぞれの Azure ドキュメントを参照してください。

環境の設定

Azure PowerShell モジュールが既にインストールされており、PowerShell コンソールセッションを開いていると想定しています。その上で最初にすべきことは、Azure Blueprints モジュールを PowerShell ギャラリーからインストールし、ローカルヘルプを更新することです。

Install-Module -Name Az.Blueprint -Verbose ; Update-Help -Force -ErrorAction SilentlyContinue

このブログを書いている2019年10月時点(訳者注:元になった英語のブログは10月23日にポストされています。)では、Azure Blueprints はパブリックプレビューステータスになっています。製品が一般提供(general availability、GA)ステータスに達すると、Az.Blueprint モジュールはほかの Azure PowerShell モジュールにバンドルされるはずです。

注:一般的に、Microsoft はサービスレベルアグリーメント(SLA)やプレビュー機能のサポートは提供しません。Azure Blueprints は、GA に到達するまでは、テスト/開発環境でのみ使用する必要があります。

Visual Studio Code をインストールして、次のような拡張機能をロードすると便利かもしれません。

図1は、筆者が作成した ipswitch-std-vnet という Azure Blueprints ブループリント定義です。

図 1. 発行された Azure Blueprint

この ipswitch-std-vnet プロジェクトは、サポートされているすべての Azure Blueprint アーティファクトを組み合わせて、標準化された Azure 仮想ネットワーク(VNet)展開を定義しています。アーティファクトには以下が含まれます。

  • リソースグループ
  • Azure リソースマネージャー (ARM) テンプレート
  • ロールベースのアクセスコントロール (RBAC) 割り当て
  • Azure ポリシー定義

Azure Blueprint ソースコードの表示

図1の、管理グループのロケーションIDとバージョンのフィールドは覚えておく必要があります。ipswitch-std-vnet ブループリントへのリファレンスを作成するとき、これらを使います。

$b = Get-AzBlueprint -Name 'ipswitch-std-vnet' -ManagementGroupId 'test-mg' -Version 1.0

次に、Export-AzBlueprintWithArtifact コマンドレットを呼び出して、ブループリントのソースコードを取得します。

Export-AzBlueprintWithArtifact -Blueprint $b -OutputPath 'D:\blueprints'

図2は、ipswitch-std-vnet ブループリントがローカルシステムでどのように見えるかを示しています。アーティファクトの JSON ファイル名がわかりやすいものではなかったのにはがっかりしました。

図 2. Azure Blueprint ソースコード

ブループリント定義ファイルには、blueprint.json という名前を付ける必要がありますが、アーティファクトの名前は変更できます。今回のプロジェクトのアーティファクトのファイル名は、次のように変更しました。

  • policy.json
  • rbac-owner.json
  • rbac-contributor.json

以前 ARM テンプレートを使用したことがあれば、これらの JSON ファイルは特に不思議なものでも見慣れないものでもないはずです。インフラストラクチャをコードのように扱う “Infrastructure as Code” アプローチを保持することで、これらのブループリント定義とアーティファクトファイルをソースコード管理で維持し、その後、継続的統合/継続的展開(CI/CD)パイプラインを使用して Azure ブループリントの発行と割り当てを管理します。

プログラムによる新しい Azure ブループリントの作成

Azure Blueprints のライフサイクルは、Az.Blueprint コマンドレットで、適切にカバーされています。

ブループリントには blueprint.json 定義ファイルが必須ですが、それがあれば(ダウンロードしたものは編集できます)、次のようにして新しいブループリントへのリファレンスをキャプチャできます。

$blueprint = New-AzBlueprint -Name 'ipswitch-std-vnet-new' -BlueprintFile .\blueprint.json

アーティファクト JSON ファイルを変更(または作成)した後、次のようにプログラムで定義できます。

New-AzBlueprintArtifact -Blueprint $blueprint -Name 'rbac-owner-new' -ArtifactFile .\artifacts\rbac-owner-new.json

New-AzBlueprintArtifact -Blueprint $blueprint -Name 'policy-new' -ArtifactFile .\artifacts\policy-new.json

ARM テンプレートアーティファクトを作成するときのシンタックスは少し異なります。

New-AzBlueprintArtifact -Blueprint $blueprint -Type TemplateArtifact -Name 'std-vnet-subnet' -TemplateFile .\artifacts\std-vnet-subnet.json -ResourceGroupName 'myRG'

個々のアーティファクトを実際に Azure にプッシュする必要がない限り、New-AzBlueprintArtifact を使用する必要はありません。Azure Blueprints プログラムマネージャーの Alex Frankel 氏に教示いただきましたが、Import-AzBlueprintWithArtifact コマンドレットを使うとブループリントプロジェクト全体(アーティファクトを含めて)を Azure にプッシュできます。

Import-AzBlueprintWithArtifact -Name 'ipswitch-blueprint' -SubscriptionId 00000000-1111-0000-1111-000000000000 -InputPath D:\Blueprints\ipswitch-blueprint

上の例で、管理グループのスコープではなくサブスクリプションにブループリント定義をプッシュしていることに注意してください。

Azure Blueprints は、下書き > 発行 > 割り当て、というワークフローに従います。この新しい Azure ブループリントのバージョン1.0を発行しましょう。

Publish-AzBlueprint -Blueprint $blueprint -Version '1.0'

ブループリント・ドキュメントを静的にコーディングするのではなく、ブループリントをパラメータの割り当てを提供する必要があるように作成した場合、PowerShell を使用して Azureブループリントを割り当てるときには、少し注意が必要です。

その場合、パラメータの名前と値、デプロイする場所を提供する割り当て JSON ファイルを作成する必要があります。次のように、-AssignmentFile パラメータを使って指定します。

New-AzBlueprintAssignment -Blueprint $blueprint -Name 'std-vnet-subnet-assignment' -AssignmentFile .\assign.json

最後に、ドラフトモードで(推奨します)ローカルのブループリント定義をAzureサブスクリプションにプッシュします。

Import-AzBlueprintWithArtifact -Name 'test-blueprint' -ManagementGroupId 'myMG' -InputPath  '.\blueprints\test-blueprint'

まとめ

Microsoft は、明らかに、Azure Blueprints のために深慮し、多くの労力を注いできました。このサービスに Azure の展開を管理する傾向が反映されているように思います。

Managing Blueprints as Code は、Azure Blueprints についての優れたガイダンスになっています。

Tim Warner

Tim Warner is a Microsoft MVP, Microsoft Press/Wiley author, and Azure solution architect based in Nashville, TN. Contact Tim at Twitter (@TechTrainerTim) or his website, techtrainertim.com.