2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Bicep を触ってみた

Posted at

やりたいこと

仕事で Azure を使っており、Iac には Terraform を利用している。ただ、何やら Azure 向けに Bicep なるものがあるとのことで、興味が湧いたので少し触ってみる。
インストールからリソースグループの作成およびストレージアカウントの作成まで行っています。

Bicep とは

以下、公式ドキュメントより引用。

Bicep は、宣言型の構文を使用して Azure リソースをデプロイするドメイン固有言語 (DSL) です。 Bicep ファイル内で、Azure にデプロイするインフラストラクチャを定義し、そのファイルを開発ライフサイクル全体にわたって使用して、インフラストラクチャを繰り返しデプロイします。 リソースは一貫した方法でデプロイされます。
Bicep では、簡潔な構文、信頼性の高いタイプ セーフ、およびコードの再利用のサポートが提供されます。 Bicep により、Azure のコードとしてのインフラストラクチャ ソリューションに最適な作成エクスペリエンスをオファーします。

特徴としては以下。

  • 宣言型
  • 使えるのは Azure のみ

Azure 向けには、ARM (Azure Resource Manager) もあるが、書き方が複雑で使いづらい (らしい) が、Bicep は割とシンプルな書き方で IaC を実現できる。

インストール

CLI で行っていく。Bash などの Terminal を起動して以下コマンドを実行する。

リソースのデプロイ時に、Azure CLI も使うのでインストールする。
OS に合わせてリンクが分かれているので、環境に合わせる。

Bicep をインストールする。

インストール

az bicep install

インストールできたか確認する。

az bicep version

Bicep CLI version *.*.* みたいな表示がされれば OK。

実装

前準備

まずは以下コマンドを実行して、Azure にログインする。

az login

実行するとブラウザが起動して、Azure へのログイン画面が表示される。任意のアカウントでログインする。
Terminal に戻るとログインした旨の表示がなされる。
このとき、業務で複数のサブスクリプションを使っている場合には、どのサブスクリプションに対してデプロイするかを意識する必要がある。コマンド実行時に指定しない場合はデフォルトサブスクリプションにデプロイされるので、毎回指定するかデフォルトを該当のサブスクリプションへ変更しておく。

コマンドでのサブスクリプションの指定

コマンド実行時のグローバルパラメータとして、「--subscription {サブスクリプションの名前または ID}」 を付与する

デフォルトサブスクリプションの変更方法

az account set --subscription {目的のサブスクリプション名または ID}

今どのサブスクリプションがデフォルトになっているかは以下で確認 (サブスクリプションの名前や ID も分かる)。

az account list --query "[?isDefault]"

コード

まずはリソースグループを作成する。
リソースグループ名は任意のもので可。ただし、世界で一意である必要がある。

create_resourcegroup.bicep
param region string = 'japaneast'
param rg_name string = '{your_resourcegroup_name}'

targetScope = 'subscription'

resource resourceGroup 'Microsoft.Resources/resourceGroups@2022-09-01' = {
    name: rg_name
    location: region
}

リソースグループは、サブスクリプションに対して実行することになるので、targetScope = 'subscription' で指定する (デフォルトは、'resourceGroup' が指定されている)。

ストレージアカウントは、リソースグループに対してデプロイするため、targetScope = 'subscription だとデプロイできない。そのため他のファイルに分ける。デフォルトで指定されるが、ここでは明示的に targetScope を指定している。ストレージアカウント名も世界で一意になるように指定する。

create_storageaccount.bicep
param region string = 'japaneast'
param st_name string = '{your_storageaccount_name}'

targetScope = 'resourceGroup'

resource storageaccount 'Microsoft.Storage/storageAccounts@2021-02-01' = {
  name: st_name
  location: region
  kind: 'StorageV2'
  sku: {
    name: 'Premium_LRS'
  }
}

ちなみに、VSCode でコーディングする場合は、Bicep 用の拡張をインストールすると補完が効いて楽になる。
https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/bicep/install#vs-code-and-bicep-extension

デプロイ

Terminal で作成したファイルが存在するディレクトリに移動して以下コマンドを実行して、まずはリソースグループを作成する (サブスクリプションはデフォルトとして指定)。

az deployment sub create --location japaneast \
                         --template-file create_resourcegroup.bicep

実行すると、デフォルトサブスクリプションにリソースグループが作成される。

次に以下コマンドでストレージアカウントを作成する。

az deployment group create --resource-group {your_resourcegroup_name} \
                           --template-file create_storageaccount.bicep

実行すると、さっき作成したリソースグループ内にストレージアカウントが作成される。

削除

ストレージアカウントの削除
create_storageaccoutn.bicep のストレージアカウントのリソース定義を削除 (もしくはコメントアウト) して、以下コマンドを実行する。
terraform destroy みたいなことはできなさそう。存在しないストレージアカウントを作成するというイメージ? --mode Complete はデプロイモードの指定で、Complete にすることで削除可能になる。デフォルト (Incremental) だと、変更が無視された。

az deployment group create --resource-group rg-bicep-test-oitate \
                           --template-file create_storageaccount.bicep \
                           --mode Complete

リソースグループの削除
Bicep からは削除できない?ようなので、Azure CLI を使って以下コマンドで削除する。

az group delete --resource-group {your_resourcegroup_name}

使ってみて

割と便利ではある。ただ、リソースの削除がやや直感的でなかったり、一部コマンドオプションで指定する必要があるなどすべてをコードの実行だけで管理できなかったりというのが、個人的には微妙だった (もし他の方法をご存知の方がいれば教えて下さい:bow:)。
ドキュメントを見るといろんな関数も使えるようなので、そういうところはメリットなのかもしれない。Azure のみを使う場合は利用しても良いかも。

以上です。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?