💪

自分なりにAzure Bicepを推してみる

2022/05/04に公開

はじめに

この記事はタイトルの通り、Bicep推しの私の「個人の感想ですよね」の記事です。

あまり技術的な内容は含まれておりませんが、短い記事なのでさらっと読み流して下さいね。

Bicepって

上腕二頭筋(いわゆる力こぶ)の事ですね。

Azure Resource Managerが2015年あたりから登場して(それまではAzure Service Manager)こちらがAzureインフラストラクチャを構築するうえでの主流でした。

Azure Resource Managerはよく「ARM」と略されます(Azure Service ManagerはASM)。

しかし正直Azure Resource Managerは人類にはまだ早かった印象です。

決して使いづらい訳ではなく(いや、使いづらいんですけど)完全に所感ですが以下の点が玄人向けだったのではと考えます。

  • JSON形式で全て記載
  • 組み込み関数が難解
  • モジュール化し辛い(出来るけど)
  • リソース間の依存関係を細かくコントロールする必要がある

ARM=腕、ということで腕の中の力こぶとして、上記の不便さを軽減させたものとしてBicepは生まれました(多分)。

もうARMは覚えなくていいのか

答えは「No」で、読める必要はあります。

Azureポータルを見ると、殆どすべてのリソースのメニューには「テンプレートのエクスポート」があり、現在デプロイされているリソースの構成がARM Template(JSON形式)として出力することが出来ます。

Azureポータル上で表示されていない細かいプロパティを確認する場合にはこちらのJSONを確認したり、Azure Resource Explorerを使うと便利です。

Azure Resource Explorer (Preview)

他に、Bicepで書いたコードがシンタックス的に問題が無ければARM Templateに変換されてデプロイに進みますが、デプロイ中にエラーとなるケースもあります。

私が良く経験したケースとしては、既に作成済みと思っていたリソースが無くて(まだ出来ていなくて)リソースIDの取得が失敗したとかが多い印象です。

後はApp ServiceのSKUを安価なプランに変更したら、対応する機能が制限されてプロパティで設定不可になったケースとかですね。

こういった場合でも、ARM Templateを読む力が少しあると、解決させるまでの時間短縮になるでしょう。

なんでもBicep一択か

そんな事はありません。

Azureのinfrastructureを構成する方法としては大きく以下があるでしょう。

  1. Azureポータルによるマウス操作(ClickOps[1]
  2. Azure CLI
  3. Azure PowerShell
  4. ARM Template
  5. Bicep
  6. Terraform
  7. 各種言語毎に用意されたSDKの利用
  8. REST API直接呼び出し

1~3について少し以下に補足します。

Azureポータルによるマウス操作

ちょっとしたテストや、初めてAzureに触れる人には間違いなくお勧めです。

私も初めて使うAzureリソースで標準的なプロパティを確認する際には、まずはAzureポータルで作成後、先に説明したテンプレートのエクスポートを行ったJSON結果を良く利用しています。

Azure CLI / Azure PowerShell

Linuxエンジニアやマカーは、きっとshも得意なはずなので、その延長でAzure CLIは便利に使えるでしょう。

Windowsエンジニアであれば、きっとPowerShellは常用しているはずなので、Azure PowerShellが便利です。

ARM TemplateやBicepは、Azureリソースを構築する為の手段となるため、例えば動いている仮想マシンを停止するといったアクション系の操作は基本的に行えません。

例えばAzureポータルで仮想マシンの停止する場合には「□停止」ボタンを押しますが、これをBicepで肩代わりできません。

Azure CLIであれば、以下のコマンドで停止させることができます。

az vm stop --resource-group <リソースグループ名> --name <仮想マシン名>

Bicepの半分はIDEでできている バファリンの半分はやさしさでできている

Bicepでコードを書く際には必ずVisual Studio Codeで、Bicepの拡張機能を導入しましょう。

Bicep language support for Visual Studio Code

通常は、Azure Tools拡張機能をインストールするとAzureでの開発に便利な拡張機能がわんさかとインストールされますが、その中にもBicep拡張機能が含まれています。

Azure Tools

インテリセンスの恩恵を最大限に受けることができます。基本Visual Studio Codeで編集してノーエラーのコードであれば、とりあえずAzureへデプロイしてもつまらないエラーで止まることはないでしょう。

何から学習するか

Azureの基礎的な部分や、自身が使いたい機能に対して必要なAzureリソースの構成や設定すべきパラメータなどについては、Bicepに限らず必要な基礎知識なので本記事では割愛させてください。

公式サイトを頭から読むのは面倒なので、まずは先人の知識の宝庫であるクイックスタートテンプレートを参照するのはどうでしょう。

Azure Resource Manager QuickStart Templates

もともとは、ARM Templateでのサンプルファイルが公開されていましたが、昨今では併せてBicepのコードも併記されているものが増えてきています。

例えば、Azure Key Vaultのリソースを作成するサンプルは以下です。

https://github.com/Azure/azure-quickstart-templates/blob/master/quickstarts/microsoft.keyvault/key-vault-create/main.bicep

Key Vaultリソースを作成する定義に対して、可変となりうるプロパティはパラメータ化されており、デフォルト値、許容値、パラメータの説明がちゃんと書かれているため再利用性が高いですね。

以下にあるベストプラクティスのページも先に軽く読んでおくと、いきなりスマートで格好いいコードが書けるようになるでしょう。

Bicep に関するベスト プラクティス

BicepとARM Templateのリファレンスマニュアルは以下となります。

Define resources with Bicep and ARM templates

こちらもとても有用ですのでブックマーク必須かと。

GitHub上で開発が進められているので、Issueや最新リリースの確認をするのもお勧めです。

Bicep Versionは0.6.1(2022/5/4時点)となっており、まだまだ成長過程ではあるため慣れてきたらこちらも参照して開発チームとのコミュニケーションを行うのも良いかと。

Azure Bicep(GitHub)

個人サイトからの情報

手前みそで恐縮ですが、私もいくつかBicepを使ったコードを公開しています。

あと、多分日本で一番Bicepに詳しい近江さんのサイトもBicep味が高いです。

https://zenn.dev/takekazuomi

おわりに

今回はアイデア記事として、「とりあえずBicepはじめてみようか」と思っている方の背中を少し押せたらと思い執筆しました。

時間をかけて更にBicepコードの中まで掘り下げた記事も書きたいのですが、それは別の機会とします。

脚注
  1. https://www.slideshare.net/brikis98/cloud-adoption-fails-5-ways-deployments-go-wrong-and-5-solutionspdf ↩︎

Discussion