Azure Bicepで実現するInfrastructure as Code
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で確認してました。今は:
- Bicepファイルを修正
- プルリクエストを作成
- 自動で「What-if」が実行される
- 「こんな変更が起きますよ」が表示される
- チームでレビュー&承認
実際の会話:
- 開発者:「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 #自動化