【Bicep 入門 #4】モジュールにパラメーターを渡す

この記事の内容

  • Bicep でリソース名をハードコーディングする問題点を解説します
  • param キーワードを使ったパラメーターの定義方法を紹介します
  • ストレージアカウント名をパラメーター化してモジュールを柔軟にする手順を説明します
  • モジュール呼び出し元からパラメーターを渡す方法を解説します
  • 実際にデプロイして結果を確認するところまで紹介します

パラメーターを使う理由

前回まではリソースグループ名やストレージアカウント名をファイル内に直接書いていました。しかし、これではリソース名を変更するたびにファイルを直接編集しなければならず、使い勝手がよくありません。

そこで今回は、リソースグループ名とストレージアカウント名を自由に変更できるよう、パラメーター化する方法を学んでいきます。


ストレージモジュールのパラメーター定義

まずはストレージアカウントのモジュールファイルを編集します。ハードコーディングされていた名前を、外から受け取れるパラメーターに変更します。

パラメーターは param キーワードを使って次のように定義します。

param name string

これで name という名前の文字列型パラメーターが定義されました。

次に、このパラメーターをリソースのプロパティに適用します。たとえばストレージアカウントのリソース名として使う場合は次のようになります。

resource storageAccount 'Microsoft.Storage/storageAccounts@2021-02-01' = {
  name: name
  ...
}

こうすることで、モジュールを呼び出す側からストレージアカウント名を渡せるようになります。


パラメーターを定義するとエラーが出る

モジュール側でパラメーターを必須にしたにもかかわらず、呼び出し元(メインの Bicep ファイル)でパラメーターを渡していないと、次のようなエラーが表示されます。

これは Bicep の補完・検証機能が、必須パラメーターが渡されていないことを検知してくれているためです。エラーの内容を確認すると、どのパラメーターが必要なのかを教えてくれます。


呼び出し元からパラメーターを渡す

メインの Bicep ファイルでモジュールを呼び出す際に、パラメーターを渡すよう修正します。

module storageModule './storage.bicep' = {
  name: 'storageDeployment'
  scope: resourceGroup('youtube4')
  params: {
    name: 'youtubeebisudan'
  }
}

Bicep のエディター補完機能を使うと、そのモジュールで必須となっているパラメーターを自動で候補として表示してくれます。これにより、渡すべきパラメーターを簡単に確認できます。


デプロイして確認する

パラメーターを渡す設定が完了したら、実際にデプロイを実行します。メインの Bicep ファイルはサブスクリプションスコープで実行し、その中でリソースグループの作成とストレージアカウントのデプロイが順に行われます。

デプロイが完了したら、Azure ポータルでリソースグループを確認します。

  • リソースグループ youtube4 が作成されていること
  • その中にストレージアカウント youtubeebisudan が作成されていること

以上の2点を確認できれば成功です。指定したパラメーターの値どおりにリソースが作成されていることが分かります。


まとめ

今回は Bicep のモジュールにパラメーターを渡す方法を解説しました。

  • param 名前 型 でパラメーターを定義することで、外部から値を受け取れるようになります
  • 必須パラメーターが渡されていない場合、Bicep の検証機能がエラーとして教えてくれます
  • 呼び出し元の params ブロックにパラメーター名と値を指定することで、モジュールに値を渡せます

ハードコーディングをなくしてパラメーター化することで、同じモジュールをさまざまな名前のリソースに使い回せるようになります。Bicep でのインフラ管理がより柔軟で再利用しやすくなりますので、ぜひ活用してみてください。