デプロイ ワークフローから Bicep コードを発行する

完了

テンプレート スペックまたは Bicep モジュールの発行プロセスを自動化する場合は、通常は自分で行うすべての作業を確実に自動化してワークフロー内で実行できるようにする必要があります。 このユニットでは、前にデプロイ ワークフローからテンプレート スペックと Bicep モジュールを発行するときに学習した原則のいくつかを適用する方法について説明します。

テンプレート スペックとモジュール

Bicep では、コードを簡単に再利用できます。 Bicep コードをデプロイ間で再利用するための 2 つの一般的なアプローチは次のとおりです。

  • テンプレート スペック。これは、完全なソリューションのデプロイ用に最適化されています。 たとえば、会社の仕様に従って完全な仮想マシンをデプロイするために、セキュリティ強化された一連のリソースを定義したとします。 このコードをテンプレート スペックとして発行できます。それにより、同僚はそのテンプレート スペックを使って、Azure portal からでも完全な仮想マシンをデプロイできます。
  • モジュール。これは、他のデプロイのコンポーネントになるように設計されています。 たとえば、ストレージ アカウントを作成する Bicep ファイルを作成したとします。 他の多くのデプロイでもストレージ アカウントが必要になる可能性があるため、その Bicep ファイルをレジストリに発行し、それを組織のデプロイ全体でモジュールとして使用できます。

テンプレート スペックと Bicep モジュールのどちらを使用するかは、次の基準で判断するとよいでしょう。テンプレートをそのまま組織全体でデプロイする場合には、テンプレート スペックが適していると考えられます。 一方、そのテンプレートを複数の親テンプレート内で再利用したい場合は、Bicep モジュールの方が都合がよいと考えられます。

ワークフローで再利用可能なコードを検証する

通常の Bicep デプロイとは異なり、テンプレート スペックまたはモジュールを作成する場合は、そのリソースを直接 Azure にデプロイすることはしません。 代わりに、テンプレート スペックまたはモジュールを発行します。 それにより、そのテンプレート スペックまたはモジュールを別のデプロイで使用できます。 そのデプロイでは、前に定義したリソースがデプロイされます。 この違いのために、テンプレート スペックや Bicep モジュールを検証およびテストする方法は、通常の Bicep デプロイで使用するプロセスとは異なる可能性があります。

Bicep コードをリンティングすることをお勧めします。 リンターが構文上の問題を検出し、推奨される方法に従っていない場合は警告を表示します。

リンティング以外にも、プレフライト検証を使用してテンプレート スペックとモジュールをテストすることも検討できます。 あるいは、テンプレート スペックとモジュールを Azure にデプロイし、それによって作成されたリソースが期待どおりに動作することをテストすることさえ検討できます。 ただし、次の 2 つの理由で、これらの種類のテストをデプロイ ワークフローから実行することは困難な場合があります。

  • プレフライト検証とデプロイには、リソースをデプロイするための Azure 環境が必要です。 モジュールのデプロイやテストに使用するための専用の Azure サブスクリプションまたはリソース グループを維持することが必要になる場合があります。
  • 多くのテンプレート スペックとモジュールでは、一連のパラメーターを指定する必要があります。 テンプレート スペックまたはモジュールがデプロイされるときに使用するパラメーターのテスト セットを作成することが必要になる場合があります。

テンプレート スペックとモジュールをデプロイしてテストするワークフロー ステップを含めるかどうかを選択する必要があります。 この Microsoft Learn トレーニング モジュールでは、Bicep コードをリントしますが、他の形式のテストは含めません。 テンプレート スペックとモジュールをテストする場合は、それらを Azure にデプロイする方法を検討してください。 また、リソースをデプロイするための専用のサブスクリプションまたはリソース グループを使用するかどうかも検討してください。

ヒント

自動化されたワークフローで Bicep ファイルをテストする方法の詳細については、「GitHub Actions を使用して Bicep コードをテストする」を確認することをお勧めします。

認証と承認

テンプレート スペックを自分で Azure に発行する場合は、Microsoft Entra ユーザーに、そのテンプレート スペック リソースが含まれているリソース グループへのアクセス権を付与する必要があります。 同様に、Bicep モジュールをレジストリに発行する場合は、Microsoft Entra ユーザーに、その Bicep モジュールのために組織で使っている Azure Container Registry インスタンスに書き込むためのアクセス許可が必要です。

自動化されたデプロイ ワークフローを操作する場合も、同じ原則が適用されます。 ただし、自分が実際にデプロイを実行しているわけではないため、ワークフローの ID に、テンプレート スペックを発行するためのリソース グループ、またはモジュールを発行するためのコンテナー レジストリへの適切なアクセス権が確実に与えられているようにする必要があります。

ヒント

モジュールをレジストリに発行する場合は、デプロイを実行しているワークロード ID に多くのアクセス許可はおそらく必要ありません。 レジストリで Microsoft Entra 認可が使われている場合、ワークロード ID には、レジストリに対する AcrPush アクセス許可のみが必要です。

セキュリティの最小特権の原則を使用することを検討してください。 ワークフローの ID に、リソース グループまたはサブスクリプションではなく、コンテナー レジストリへのアクセス権のみを与えます。

ワークフローからテンプレート スペックとモジュールを発行する

Azure CLI を使って自分のコンピューターからテンプレート スペックを発行する場合は、次のようなコマンドを使います。

az ts create \
  --name StorageWithoutSAS \
  --location westus3 \
  --display-name "Storage account with SAS disabled" \
  --description "This template spec creates a storage account, which is preconfigured to disable SAS authentication." \
  --version 1 \
  --template-file main.bicep

この Azure CLI コマンドは GitHub Actions のステップに変換できます。

- name: Publish template spec
  uses: azure/cli@v1
  with:
    inlineScript: |
      az ts create \
        --name StorageWithoutSAS \
        --location westus3 \
        --display-name "Storage account with SAS disabled" \
        --description "This template spec creates a storage account, which is preconfigured to disable SAS authentication." \
        --version 1 \
        --template-file main.bicep

このワークフローでは、自分で使用するテンプレート スペックを発行するのと同じプロセスが使用されます。

同様に、Azure CLI を使って自分のコンピューターから Bicep モジュールを発行する場合は、次のようなコマンドを使います。

az bicep publish \
   --file module.bicep \
   --target 'br:toycompany.azurecr.io/mymodules/myqueue:2'

この Azure CLI コマンドも GitHub Actions のステップに変換できます。

- name: Publish Bicep module
  uses: azure/cli@v1
  with:
    inlineScript: |
      az bicep publish \
        --file module.bicep \
        --target 'br:toycompany.azurecr.io/mymodules/myqueue:2'

ヒント

この例では、Bicep レジストリのホスト名 (toycompany.azurecr.io) がワークフロー ステップの定義に埋め込まれています。 この方法はお勧めできません。 環境変数を使用して、次のような構成設定を設定できます。 この方法については、この Microsoft Learn トレーニング モジュールの後の方で確認します。

このユニットで説明されている手順を使用してワークフローからテンプレート スペックを発行する方法については、このすぐ後で確認します。

モジュールまたはテンプレート スペックを使用する

前の Microsoft Learn トレーニング モジュールでは、テンプレート スペックで定義されているリソースをデプロイする方法と、レジストリに格納されている Bicep モジュールを使う方法を学習しました。 テンプレート スペックとモジュールを手動で発行するか、デプロイ ワークフローから発行するかにかかわらず、同じ方法を使用してデプロイします。

たとえば、az deployment group create Azure CLI コマンドを使用して、または Azure PowerShell で New-AzResourceGroupDeployment コマンドレットを使用して、テンプレート スペックまたは Bicep ファイルをリソース グループにデプロイします。