【Bicep入門 #10】ここまでのおさらい — モジュール構成とGitHub Actionsデプロイの復習

この記事の内容

  • ローカル環境でリポジトリをクローンし、VS Codeで作業する手順の確認
  • main.bicep のスコープとリソースグループ作成の構成をおさらい
  • VM作成モジュール(vm.bicep)が作るリソースの全体像を整理
  • GitHub Actionsを使ったサブスクリプションレベルのデプロイ方法の振り返り
  • Azure ポータルでデプロイ結果を確認する流れ

はじめに

Bicep入門シリーズの第10回です。前回までにひと通りの構成を作り上げたところで、今回は「ここまで何をやってきたか」を改めて振り返ります。環境はローカルPCにリポジトリをクローンし、Visual Studio Codeで開いた状態から確認していきます。


ローカル環境の準備

まずリポジトリをクローンします。

git clone <リポジトリURL>

クローンしたフォルダをVisual Studio Codeで開き、作業を進めます。前回まではクラウドシェル(Azure Cloud Shell)上で環境を整えていましたが、今回からはローカルPCで作業します。


main.bicep の構成

main.bicep のポイントをおさらいします。

targetScope = 'subscription'

ターゲットスコープは サブスクリプション に設定しています。サブスクリプションレベルで動かすことで、まずリソースグループそのものを Bicep から作成できます。

resource rg 'Microsoft.Resources/resourceGroups@2022-09-01' = {
  name: 'youtube-vm'
  location: 'japaneast'
}

リソースグループ名は youtube-vm として定義しています。

次に、このリソースグループ内にVMを作るモジュールを呼び出しています。

module vm 'modules/vm.bicep' = {
  name: 'azure-vm'
  scope: rg
  params: {
    vmName: 'youtube-vm'
  }
}

モジュールには VM名だけ を引数として渡しています。内部の詳細なリソース構成はモジュール側(vm.bicep)にカプセル化されているため、呼び出し元はシンプルに保てます。


vm.bicep モジュールの構成

vm.bicep は受け取ったVM名をもとに、以下の4つのリソースを作成します。

リソース概要
パブリック IP アドレスVMへの外部アクセス用
仮想ネットワーク(VNet)VM が所属するネットワーク
サブネットVNet内のネットワーク区画
ネットワークインターフェイス(NIC)VMとネットワークを接続するインターフェイス

パラメーターは vmName の1つだけを受け取り、各リソースの名前付けに利用しています。

param vmName string

GitHub Actions によるデプロイ

このBicepテンプレートのデプロイにはGitHub Actionsを使っています。リポジトリの Settings → SecretsAZURE_CREDENTIALS という名前でAzureの認証情報を登録しており、ワークフローはこのシークレットを使って認証を行います。

ワークフローはサブスクリプションレベルのデプロイを実行するため、Azure CLIコマンドは以下のような形になります。

az deployment sub create \
  --location japaneast \
  --template-file main.bicep

デプロイ結果の確認

Azure ポータルでデプロイ結果を確認したところ、リソースグループ youtube-vm の展開が正常に完了していました。リソースグループの中を見ると、次のリソースが作成されています。

  • パブリック IP アドレス
  • 仮想ネットワーク(サブネット1個を含む)
  • ネットワークインターフェイス(NIC)

仮想ネットワークの中には default という名前のサブネットが1つ存在しており、NICがそこに接続されています。VM本体のデプロイは進行中の段階も確認でき、インフラの前段となるネットワークリソースが順次作られていく流れが確認できました。


まとめ

今回はBicep入門シリーズのここまでの内容を整理しました。

  • targetScope = 'subscription' を指定することで、リソースグループの作成からBicepで管理できます
  • モジュール化によって main.bicep はシンプルに保ちつつ、vm.bicep の中でパブリックIP・VNet・NICをまとめて定義しています
  • GitHub Actionsのシークレットに AZURE_CREDENTIALS を登録することで、CI/CDパイプラインからサブスクリプションレベルのデプロイが実行できます

次回以降はVM本体の定義や、さらに複雑なモジュール構成に進んでいく予定です。