Azure Bicepで実現するInfrastructure as Code

14分で読めます
エンハンスド技術チーム
AzureBicepIaCInfrastructure as CodeDevOps
Azure BicepによるIaCの実装方法と実践的なテクニックについて解説します。

Azure Bicep による Infrastructure as Code 実践ガイド

はじめに:インフラ管理の悪夢から解放された日

「また本番環境と開発環境の設定が違う...」 「手動でリソース作ったの誰だよ!」 「このStorage Account、消していいの?誰が作ったの?」

インフラ管理あるあるですよね。私も以前は、Azureポータルをポチポチして、Excelで管理表を作って...本当に大変でした。

そんな時に出会ったのがAzure Bicepです。最初は「また新しい言語覚えるの?」と思いましたが、使ってみたら世界が変わりました。今では、インフラもコードで管理するのが当たり前になっています。

なぜBicepを選んだのか?ARMテンプレートの悪夢

JSONの呪縛からの解放

最初はARM テンプレート(JSON)を使っていました。でも、これが本当に辛かった...

  • 括弧の対応が分からなくなる
  • ちょっとした修正で全体が壊れる
  • 100行のJSONで目がチカチカ

Bicepに変えてから、同じStorage Accountの定義が80%も短くなりました!しかも読みやすい。

// たったこれだけでStorage Accountが作れる!
resource storage 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  name: 'mystorage'
  location: 'japaneast'
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}

型チェックが救世主

「あれ?このパラメータって文字列だっけ?数値だっけ?」

こんな悩みもBicepなら解決。VSCodeで書いていると、間違った型を入れた瞬間に赤線が出ます。デプロイしてから「型が違います」エラーに泣く日々とはおさらばです。

実際にBicepでインフラを整理してみた

フォルダ構成で悩んだ話

最初は全部を1つのファイルに書いていました。でも、1000行超えたあたりで「これはヤバい」と気づきました。

そこで、こんな感じで整理:

infrastructure/
├── main.bicep              # ここから全体を統括
├── modules/                # 部品ごとに分割
│   ├── networking/         # ネットワーク関連
│   ├── compute/           # VM、AKS など
│   ├── data/              # データベース類
│   └── security/          # セキュリティ設定
└── environments/          # 環境別の設定値

ポイントは「レゴブロックのように組み合わせられる」こと。必要な部品だけ使えばいいんです。

実際に作ったモジュールたち

ネットワークモジュールで学んだこと

最初、VNetの設定を手動でやっていた時は、サブネットを1つ追加するだけで冷や汗ものでした。「このアドレス、他と被ってない?」「セキュリティグループの設定忘れてない?」

Bicepでモジュール化してからは、こんな感じで簡単に:

// 必要最小限の記述でネットワーク構築
module network 'modules/networking/vnet.bicep' = {
  name: 'network'
  params: {
    vnetName: 'myvnet'
    addressPrefix: '10.0.0.0/16'
  }
}

ポイント:

  • サブネット構成をテンプレート化
  • セキュリティ設定も自動適用
  • アドレス計算も自動化

これで「ネットワーク構築30分」が「5分」になりました!

AKSクラスタ構築で感動した話

Kubernetesって難しいですよね。最初にAKSを手動で構築した時は、丸一日かかりました。ノードプール?ネットワークポリシー?CNI???

でも、Bicepでモジュール化したら、こんなに簡単に:

開発環境:

module aks 'modules/compute/aks.bicep' = {
  name: 'aks-dev'
  params: {
    clusterName: 'aks-dev'
    systemNodePool: {
      count: 1  // 開発は最小構成
      vmSize: 'Standard_D2s_v3'
    }
  }
}

本番環境:

module aks 'modules/compute/aks.bicep' = {
  name: 'aks-prod'
  params: {
    clusterName: 'aks-prod'
    systemNodePool: {
      count: 3  // 本番は冗長性確保
      vmSize: 'Standard_D4s_v3'
    }
    // 自動スケーリングも有効
  }
}

嬉しかったポイント:

  • 環境差分が一目瞭然
  • セキュリティ設定も標準化
  • アップグレードも簡単に

「AKS怖い」から「AKS楽しい」に変わった瞬間でした。

すべてを統合するメインテンプレート

ここが一番面白いところです。個別のモジュールを組み合わせて、環境全体を作ります。

環境ごとの差分を簡単に管理

以前は「本番と開発の違いって何だっけ?」と毎回確認していました。Bicepなら、条件分岐で簡単に:

// 本番だけAKSを作る
module aks './modules/compute/aks.bicep' = if (environment != 'dev') {
  // 設定内容
}

// 環境で設定を変える
count: environment == 'prod' ? 3 : 1

実際の効果:

  • 開発環境:月5万円のコスト
  • 本番環境:月20万円のコスト
  • でも、定義ファイルはほぼ同じ!

環境差分による事故が激減しました。「開発では動いたのに本番で動かない」がなくなったんです。

GitOpsで実現した夢の自動化

プルリクエストでインフラレビュー

以前は「このリソース追加していい?」とSlackで確認してました。今は:

  1. Bicepファイルを修正
  2. プルリクエストを作成
  3. 自動で「What-if」が実行される
  4. 「こんな変更が起きますよ」が表示される
  5. チームでレビュー&承認

実際の会話:

  • 開発者:「Storage Account追加のPR出しました」
  • レビュアー:「What-if見たけど、レプリケーション設定これでいい?」
  • 開発者:「あ、GRSにするの忘れてた!修正します」

こんなやり取りがGitHub上で完結。履歴も残るし、ミスも激減しました。

デプロイの恐怖から解放

昔:

  • 金曜日の夕方は絶対デプロイしない
  • デプロイ日は胃が痛い
  • 「誰か一緒に画面見てて」

今:

  • mainブランチにマージするだけ
  • 自動でテスト環境→本番環境
  • 問題があれば自動でロールバック

デプロイが「イベント」から「日常」になりました。

使ってみて発見した便利テクニック

条件分岐で無駄を削減

最初は全環境に全リソースを作っていました。開発環境にRedis Cache必要?いらないよね...

// 本番だけRedisを作る
resource redis '...' = if (environment == 'prod') {
  // 設定
}

これで開発環境のコストが月3万円削減できました!

ループで楽をする

複数のWeb Appを作る時、コピペ地獄だったのが:

// アプリのリストを定義
param apps = ['api', 'web', 'admin']

// 一気に作成!
resource webApps '...' = [for app in apps: {
  name: 'app-${app}'
  // 共通設定
}]

10個のアプリも10行で定義完了。素晴らしい!

つまずきポイントと解決法

デバッグで苦労した話

「なんでエラーになるの!?」

最初はエラーメッセージも分からず、試行錯誤の連続でした。そこで発見したのが「output」の活用:

// 何が渡されているか確認
output debugInfo object = {
  actualValue: myParameter
  expectedType: 'string'
}

これで「あ、型が違ってた!」とすぐ分かるように。デバッグ時間が半分になりました。

セキュリティで学んだ教訓

大失敗:パスワードをGitにコミット

最初、SQLのパスワードを直接Bicepファイルに書いてました...セキュリティチームに怒られました(当然)。

解決策:Key Vaultの活用

  • パスワードはKey Vaultに保存
  • Bicepからは参照のみ
  • @secure()デコレーターでログにも残さない

今では「セキュリティファースト」が身に付きました。

まとめ:Bicepがもたらした本当の価値

半年前、インフラ管理は「必要悪」でした。手動作業、ドキュメント更新、環境差分...ストレスの塊でした。

でも今は違います。

Bicepを導入して変わったこと:

  • インフラ構築時間:1週間→1日
  • 環境差分による障害:月3件→0件
  • インフラコスト:30%削減(無駄なリソースを発見)
  • チームの笑顔:プライスレス

一番嬉しかったこと: 新人エンジニアから「インフラって意外と楽しいですね!」と言われた時。これまで「インフラは難しい」「触りたくない」と敬遠されていたのに、Bicepのおかげで身近になりました。

正直な感想: 最初は「また新しいツール覚えるの?」と抵抗がありました。でも、使い始めて1週間で「もう手動には戻れない」と確信。今では、Bicepなしのインフラ管理は考えられません。

Infrastructure as Codeは、単なる効率化ツールではありません。インフラをコードで表現することで、チーム全体でインフラを理解し、改善していける文化が生まれます。

エンハンスド株式会社では、Bicepを活用したインフラ構築の支援を行っています。「手動作業に疲れた」「環境差分をなくしたい」「インフラコストを最適化したい」という方は、ぜひご相談ください。一緒に、インフラ管理の新しい世界を体験しましょう!

参考リンク


執筆者: エンハンスド株式会社 インフラチーム
公開日: 2025年6月12日
カテゴリ: Azure, IaC, DevOps
タグ: #AzureBicep #InfrastructureAsCode #Azure #DevOps #自動化

技術的な課題をお持ちですか?

記事でご紹介した技術や実装について、
より詳細なご相談やプロジェクトのサポートを承ります

無料技術相談を申し込む