この記事は更新から24ヶ月以上経過しているため、最新の情報を別途確認することを推奨いたします。
はじめに
この記事では、以下を目的としています。
・Azure Bicep とはなにか知ること
・Bicep の作り方や Azure へのデプロイ方法を知り、Bicep でリソース管理できそうな気が起こること
Bicep の前に、Azure Resource Manager (ARM) について整理します。
ARM は Azure のデプロイおよび管理サービスであり、リソース作成時においてポータルでも PowerShell でも Azure CLI でも同様のリソース作成結果が得られます。また、デプロイ方法の一つである ARM テンプレートは宣言的で一貫性はありましたが、その作成は JSON ファイルを組み大量の括弧 {} や大量の行をみる必要があり職人技でした。
Bicep はこの ARM テンプレートを作成したり、ARM テンプレートから Bicep ファイルにデコンパイルしたり、直接 Bicep ファイルを指定してデプロイできるソリューションです。
・参考URL
Azure Resource Manager の概要 – Azure Resource Manager | Microsoft Docs
Bicep とは
Bicep とは、ARM テンプレートのためのドメイン固有言語 (DSL:HTMLでスタイルを記述するCSSなど(=CSSはHTMLのDSL)) です。Azure リソースを宣言的にデプロイするためのプログラミングライクな言語で、 クリーンな構文、タイプセーフの向上 (ARMにはない型がある)、モジュール性とコードの再利用のサポートがあり、ARM テンプレートで実現できるものと同等の機能を備えています。
また、Bicep は 「.bicep」拡張子のファイルに Bicep コードを記述し、 ARM テンプレート JSON ファイルに変換することができます。
Bicep が目指すゴールは、インフラを記述、検証、および Azure にデプロイするための最適な言語を構築することで、ノンゴール/できないこととしては、汎用言語の構築や Azure API にはない Kubernetes のデプロイやデータベース内のユーザーの作成などがあります。詳しくは公式ドキュメントをご参照ください。
バージョンや注意点
現在のバージョンは 0.4.613 で、バージョン 0.3 以降 Microsoft サポートプランでサポートされています。将来的に破壊的変更が発生する可能性があります。
・以下 URL より抜粋
GitHub – Azure/bicep: Bicep is a declarative language for describing and deploying Azure resources
Learn everything about the next generation of ARM Templates | OD340 – YouTube
インストール
Bicep を使用するには、 Azure CLI と Visual Studio Code 拡張機能をインストールする必要があります。
インストール方法は、下部の GitHub をご参照ください。
1.Azure CLI (Bicep CLI) のインストール
必須。以下コマンドでインストール/アップグレードします。
・az bicep install、az bicep upgrade
適宜アップデートします。
・az bicep build –file .\main.bicep
ビルドコマンド。Bicep ファイルから ARM JSON ファイルへ変換します。
2.Visual Studio Code Bicep拡張機能
オプションですが、以下より実質必須と考えられます。
・スニペットがあり、プロパティ候補を出してくれたり、必須プロパティを補完してくれたりします。
・リンターにより、より良い記述方法や、秘匿情報をハードコーディングしていないか、定義されているのに使われていないパラメータ―がないかなどをチェックしてくれます。
・参考URL
GitHub – Azure/bicep: Bicep is a declarative language for describing and deploying Azure resources
使用してみる
VS Code を開き、.bicep ファイルを作成します。bicep ファイルで Bicep 拡張機能が動作します。
「res」と入力すると様々な bicep テンプレートが表示され、「ressto」だとストレージアカウントのスニペットが表示されます。
ストレージアカウントの場合、name、location、kind、sku を入力すれば完成です。
記述量が少なく、output (ARM の出力) などの記述も reference[…] を入力することなく . (ドット) でプロパティを選択・表示できます。
resource はリソース宣言、stg は変数名、’Microsoft.Storage/~’ は作成するリソース及び API バージョンです。
作成したら、以下コマンドで bicep ファイルを ARM テンプレートに変換できます。
az bicep build –file .\0-temp.bicep
デプロイは以下のコマンドで行います。非常にかんたんにデプロイできます。
# login
az login
# set subscription
az account set –subscription <subscription-id>
# rg create
az group create –location japaneast –resource-group mybicep01
# bicep deploy
az deployment group create –resource-group mybicep01 –template-file stac.bicep
仮想マシンの Bicep サンプルを記載します。
ここでのポイントは、NIC の id や監視用ストレージアカウントの指定が暗黙的な (鉤括弧内になくとも) 指定が可能になっています。なお、仮想マシンのスニペットでは NIC やパブリック IP、仮想ネットワークはありませんので、リソースの関係性は理解しておく必要があります。
また、bicep の構成要素をみてみます。
赤枠で括っている部分を説明します。
・param:入力パラメータ
・@secure:セキュアパラメータ=入力しても非表示になります。
・@allowed:許可値
・var:変数
・output:出力
・concat:関数。Bicep 関数 – Azure Resource Manager | Microsoft Docs
・resourceGroup:暗黙的なリソースグループの参照
もちろん、ストレージアカウントに関連するリソースとして Blob コンテナーやファイル共有など、関連するリソースも定義しデプロイできます。
その他、VS Code では Bicep ファイルを視覚化できます。どのような構成かひと目で確認できます。
まとめ・所感
Bicep での記述は ARM より遥かに楽であり、Bicep でリソース管理 (IaC) することが現実的と感じました。
また、破壊的変更はありうるとのことですが Bicep から ARM に変換できる (=作成した資産が無駄にならない) ことや MS サポートも対応していることもあり GA に向け使っていきたいサービスです。
次回はより実践的な方法を記述します。