Bicep:最新の Azure IaC
ARM JSON の強い型付けによる抽象化である Bicep の簡潔な構文を学び、既存の ARM テンプレートを Bicep に変換して Azure CLI でデプロイします。
「Bicep:最新の Azure IaC」はCoddyKit上の無料Cloud & IT Cert Prepレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCloud & IT Cert Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
Bicep とは何か、なぜ使用するのか
Bicepは Microsoft が開発したドメイン固有言語(DSL)で、強い型付けを備えた簡潔な ARM JSON テンプレートの代替手段です。Bicep は標準の ARM JSON にコンパイルされるため、同じ ARM デプロイ エンジンを使用し、初日からすべての Azure リソースの種類をサポートします。Bicep により、生の JSON で必要となる定型コードの多くが不要になり、型安全性と IntelliSense のサポートも向上します。
Bicep と ARM JSON の構文比較
ARM テンプレートで約 25 行の JSON を必要とする同じストレージ アカウントが、Bicep では約 8 行で記述できます。Bicep では、'$schema'、contentVersion、resources 配列のラッパー、冗長な式構文が不要です。Bicep は ARM JSON の直接的な抽象化レイヤーであるため、プロパティ名と型は同一で、実行時の違いはまったくありません。
// Bicep: deploy a storage account
param storageAccountName string
param location string = resourceGroup().location
param sku string = 'Standard_LRS'
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: storageAccountName
location: location
sku: {
name: sku
}
kind: 'StorageV2'
properties: {
supportsHttpsTrafficOnly: true
minimumTlsVersion: 'TLS1_2'
}
}Bicep のパラメーターとデコレーター
Bicep のパラメーターでは、簡潔な param name type = defaultValue 構文を使用します。パラメーターの直上に、@ で始まるデコレーターを適用して、@minLength()、@maxLength()、@allowed()、@description() などの制約を追加できます。@secure() デコレーターはパラメーターを機密情報としてマークし、ARM JSON の secureString と同等の働きをします。
@description('Globally unique name for the storage account')
@minLength(3)
@maxLength(24)
param storageAccountName string
@allowed(['Standard_LRS', 'Standard_GRS', 'Premium_LRS'])
param sku string = 'Standard_LRS'
@secure()
param adminPassword stringBicep の変数と式
Bicep の変数は var キーワードで宣言し、'${value}' 構文による文字列補間を含む任意の式を格納できます。文字列補間は ARM JSON に比べて特に読みやすくなった点の 1 つで、concat() 関数を呼び出す必要がありません。Bicep は、三項演算子 condition ? trueValue : falseValue を使用した条件式にも対応しています。
param environment string = 'dev'
param baseName string = 'myapp'
var uniqueSuffix = uniqueString(resourceGroup().id)
var storageAccountName = '${baseName}${environment}${uniqueSuffix}'
var isProd = environment == 'prod'
var skuName = isProd ? 'Standard_GRS' : 'Standard_LRS'リソース宣言とシンボリック名
Bicep では、各リソースにシンボリック名を付けます。これは、テンプレート内でリソースを参照するための識別子です。シンボリック名は、リソースの Azure 名とは異なります。シンボリック名を使用すると、リソースのプロパティにアクセスできるほか、あるリソースを別のリソース内で参照して暗黙的な依存関係を確立できます。そのため、明示的な dependsOn 配列は不要です。
resource vnet 'Microsoft.Network/virtualNetworks@2023-05-01' = {
name: 'myVNet'
location: location
properties: {
addressSpace: { addressPrefixes: ['10.0.0.0/16'] }
}
}
// Implicit dependency via symbolic name reference
resource subnet 'Microsoft.Network/virtualNetworks/subnets@2023-05-01' = {
parent: vnet // Bicep knows to create vnet first
name: 'mySubnet'
properties: {
addressPrefix: '10.0.1.0/24'
}
}Bicep の出力
Bicep の出力は、output キーワードに続けて、出力名、型、値を指定して宣言します。シンボリック名とドット記法を使用すると、デプロイしたリソースのプロパティを参照できます。これは ARM の reference() 関数よりもはるかに読みやすい方法です。出力は、Bicep モジュールの呼び出し間で値を受け渡すために不可欠です。
output storageAccountName string = storageAccount.name
output blobEndpoint string = storageAccount.properties.primaryEndpoints.blob
output storageAccountId string = storageAccount.idBicep モジュール
Bicep モジュールは、ARM JSON におけるリンク済みテンプレートに相当し、インフラストラクチャを再利用可能なコンポーネントに分割できます。モジュールは単なる別の .bicep ファイルです。module キーワードを使用して参照し、パラメーターを渡して、その出力を利用します。モジュールはAzure Container Registryに公開して、チーム全体で再利用することもできます。
// main.bicep — consuming a storage module
module storage './modules/storage.bicep' = {
name: 'storageDeploy'
params: {
storageAccountName: 'myuniquestorage'
location: location
sku: 'Standard_LRS'
}
}
// Reference module output in parent template
output blobUri string = storage.outputs.blobEndpointARM テンプレートから Bicep への変換
既存の ARM JSON テンプレートがある場合は、Bicep CLI の bicep decompile を使用して Bicep に逆コンパイルできます。結果には手動での調整が必要になる場合がありますが、優れた出発点になります。また Microsoft は aka.ms/bicepdemo でオンライン playground を提供しており、ARM JSON を貼り付けると、対応する Bicep をリアルタイムで確認できます。
# Install the Bicep CLI (or use it via Azure CLI)
az bicep install
az bicep upgrade
# Decompile existing ARM JSON to Bicep
az bicep decompile --file azuredeploy.json
# Produces azuredeploy.bicep in the same directory
# Compile Bicep to ARM JSON (for inspection)
az bicep build --file main.bicepAzure CLI を使用した Bicep のデプロイ
Azure CLI は Bicep ファイルを直接サポートしているため、デプロイ前に ARM JSON へ手動でコンパイルする必要はありません。--template-file フラグを指定した az deployment group create に .bicep ファイルのパスを渡すと、CLI が透過的にコンパイルします。同じ validate サブコマンドと what-if サブコマンドを、ARM JSON の場合とまったく同じように Bicep ファイルで使用できます。
# Deploy a Bicep file directly
az deployment group create \
--resource-group MyRG \
--template-file main.bicep \
--parameters storageAccountName=myprodstore environment=prod
# What-if preview with Bicep
az deployment group what-if \
--resource-group MyRG \
--template-file main.bicep \
--parameters storageAccountName=myprodstore environment=prodBicep のループと条件
Bicep では、for ... in 構文を使用したリソースループにより、配列パラメーターから複数のリソースインスタンスを作成できます。これにより、コピーと貼り付けによる重複をなくせます。if キーワードを使用すると条件付きリソースデプロイが可能になり、特定の条件が true の場合にのみリソースを含められます。これらの機能は、それぞれ ARM の copy 構造体と condition 構造体にコンパイルされます。
// Loop: create multiple storage accounts
param storageNames array = ['alpha', 'beta', 'gamma']
resource stores 'Microsoft.Storage/storageAccounts@2023-01-01' = [for name in storageNames: {
name: '${name}${uniqueString(resourceGroup().id)}'
location: location
sku: { name: 'Standard_LRS' }
kind: 'StorageV2'
}]
// Condition: only deploy in prod
param deployKeyVault bool = false
resource kv 'Microsoft.KeyVault/vaults@2023-07-01' = if (deployKeyVault) {
name: 'myKeyVault'
location: location
properties: { sku: { family: 'A', name: 'standard' }, tenantId: subscription().tenantId, accessPolicies: [] }
}Bicep のツールと lint
Visual Studio Code 用 Bicep 拡張機能は、入力中の高度な IntelliSense、型チェック、インラインエラー表示を提供します。Bicep CLI にはlinterが含まれており、未使用のパラメーター、説明の欠落、不適切な API バージョンなど、ベストプラクティスへの違反をチェックします。CI パイプラインで az bicep lint --file main.bicep を実行すると、デプロイ前に問題を検出できます。
# Run the Bicep linter
az bicep lint --file main.bicep
# Format a Bicep file
az bicep format --file main.bicep
# Generate resource type documentation
az bicep generate-params --file main.bicep --output-format jsonクイックチェック
このレッスンで扱った Microsoft Azure Fundamentals (AZ-900) の概念について、理解度を確認しましょう。
レッスンのまとめ
このレッスンでは、Bicepが ARM JSON に対する簡潔で強い型付けの抽象化であり、標準の ARM テンプレートにコンパイルされること、モジュールとループによって再利用可能で DRY なインフラストラクチャコードを実現できること、そしてAzure CLI が Bicep ファイルを直接デプロイし、同じ validate/what-if/deploy ワークフローをサポートすることを学びました。次は Azure での Terraform について説明します。
よくある質問
「Bicep:最新の Azure IaC」レッスンは無料ですか?
はい。「Bicep:最新の Azure IaC」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cloud & IT Cert Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
「Bicep:最新の Azure IaC」で何を学びますか?
ARM JSON の強い型付けによる抽象化である Bicep の簡潔な構文を学び、既存の ARM テンプレートを Bicep に変換して Azure CLI でデプロイします。 ブラウザで直接実行するハンズオンコードでCloud & IT Cert Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cloud & IT Cert Prepを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCloud & IT Cert Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「Bicep:最新の Azure IaC」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCloud & IT Cert Prepレッスンでコードを書いて実行できますか?
はい。すべてのCloud & IT Cert Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Azure Resource Manager の仕組み
- ARM テンプレートの作成
- Bicep:最新の Azure IaC
- Azure での Terraform