AzureデプロイメントスタックとAzure Developer CLIの統合

Azure Developer CLI (azd) では、テンプレートデプロイのAzureデプロイ スタックがサポートされます。 Azureデプロイ スタックは、Azure リソースのグループを 1 つのまとまりのある単位として管理できるリソースです。 デプロイ スタックを使用すると、 azd テンプレートとアプリに関連付けられているリソースのセットをさらに制御できます。

この記事では、次のことについて説明します。

  • azd で Azure デプロイ スタックのサポートを有効化します。
  • Azureデプロイ スタックを使用して、azd テンプレートをデプロイします。
  • azd構成を使用してデプロイ スタックの動作を構成します。

Azureデプロイ スタックのサポートを有効にする

Azureデプロイ スタックのサポートは、azd config コマンドを使用して有効にする必要があります。

azd config set alpha.deployment.stacks on

Azureデプロイ スタックのサポートは現在アルファ機能であるため、手動で有効にする必要があります。 ただし、デプロイ スタックは、将来のリリースで azd の既定のデプロイ動作になります。 バージョン管理戦略の詳細をご覧ください。

azd config show コマンドを使用して、機能が正常に有効になっていることを確認します。

azd config show

デプロイ スタックを使用してテンプレートをデプロイする

デプロイ スタック機能を有効にした後、この機能の既定の動作を活用するために、 azd テンプレートに対するそれ以上の変更は必要ありません。 azd は、azd up を実行すると、プロビジョニングされたテンプレート リソースを Azure デプロイ スタックに自動的にラップします。

azd up

azd は、テンプレートの main.bicep ファイルで定義されているスコープをAzureデプロイ スタックに使用します。 たとえば、テンプレートのスコープがサブスクリプションまたはリソース グループ レベルの場合は、関連付けられたサブスクリプションまたはリソース グループ ページの Deployment stacks ページで、Azure ポータルで関連付けられているデプロイ スタックを表示できます。

Azure portal におけるサブスクリプションレベルのデプロイメントスタックを示すスクリーンショット

デプロイ スタックを選択して、その管理ページを表示します。

デプロイ スタックの詳細を示すスクリーンショット。

デプロイ スタックを削除する

既定では、標準の azd down コマンドを使用して、デプロイ スタックとそれに関連付けられているリソースを削除できます。

azd down

azd downスタックとデプロイ スタックの正確な動作は、azure.yaml ファイルを使用して構成されます。

デプロイ スタックを構成する

azd では、infra ファイルの azure.yaml セクションを通じてさまざまな構成設定が公開され、Azureデプロイ スタックの動作に影響します。 これらの設定は、 デプロイ スタック のドキュメントで詳しく説明されている標準オプションにマップされます。 次の azure.yaml 例を考えてみましょう。

name: todo-nodejs-mongo-aca
metadata:
  template: todo-nodejs-mongo-aca@0.0.1-beta
infra:
  provider: bicep
  deploymentStacks:
    actionOnUnmanage:
      resources: delete
      resourceGroups: delete
    denySettings:
      mode: denyDelete
      excludedActions:
        - Microsoft.Resources/subscriptions/resourceGroups/delete
      excludedResources:
        - <your-resource-id-1>
        - <your-resource-id-2>
      excludedPrincipals:
        - <your-targeted-principal-id-1>
        - <your-targeted-principal-id-2>
      applyToChildScopes: true
# ...
# Remaining file contents omitted
# ...

前の例では、次のオプションが deploymentStacks セクションで定義されています。

  • actionOnUnmanage: デプロイ スタックが削除されると、関連付けられているAzure リソースはアンマネージドと見なされます。 この設定により、Azureがアンマネージ リソースを処理する方法が決まります。 指定できる値は、次のとおりです。
    • delete は既定値であり、削除されたデプロイ スタックによって管理されるすべてのリソースが破棄されます。
    • detach はリソースを所定の場所に残しますが、削除されたデプロイ スタックへの関連付けを削除します。
  • denySettings: デプロイ スタックのリソースを細かく制御できるサブセクション。
    • mode: デプロイ スタック リソースに対する高レベルの制限を決定します。 指定できる値は、次のとおりです。
      • none は既定値であり、デプロイ スタック リソースを削除したり、新しいリソースを追加したりできます。
      • denyDelete は、デプロイ スタック リソースが削除されないようにします。
      • denyWriteAndDelete では、デプロイ スタック リソースが削除されるのを防ぎ、新しいリソースがデプロイ スタックに追加されるのを防ぎます。
    • excludedActions: デプロイ スタック リソースで許可されていないAzureロールベースのアクセス制御 (RBAC) アクションを一覧表示します。
    • excludedResources: denySettingsから除外されるリソース ID を一覧表示します。
    • excludedPrincipals: denySettingsから除外されるサービス プリンシパル ID を一覧表示します。
    • applyToChildScopes: 拒否設定がデプロイ スタック内のリソースの子リソースに適用されるかどうかを設定するブール値。 たとえば、SQL Server リソースには子データベース リソースがあります。