5
3

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について自分のためにまとめる

5
Last updated at Posted at 2024-05-07

こんにちは。Bicepについて調べた内容をまとめます。
私はインフラ周辺の勉強から始めてまだ歴が浅いので、こういう言語の話はとても苦手です。開発寄りの人はBicepも大丈夫かもしれませんが、そうでなければ公式ドキュメントを部分的に読んでつまみ食いするよりも、ラーニングモジュールをまとめてやった方がいいと思いました。

Bicep 以前の話

そもそもAzure 上にできるリソースはどのように定義されるのか?
たとえば仮想マシンを作成するにはWindows やLinux の別、ディスクサイズとか可用性ゾーンを指定する必要があります。これらの設定値=パラメーターは、いかにしてAzure に伝わりリソースがデプロイされるのか?
結論から言うと「Azure Resource ManagerというAPI(アプリケーション・プログラミング・インターフェイス)に、仮想マシンなどのリソースの情報(=リソースの種類やパラメーター)をJSONファイルに書いて渡すと、リソースがデプロイされる」となります。
ポータルではマウスとキーボードでリソースの情報を入力しますが、ポータルは裏でJSONファイルを作成しています。
適当に仮想マシンをデプロイしてみたので確認しましょう。ポータルの仮想マシンの概要画面で、右上に「JSON ビュー」というのがあるのでクリックします。

image.png

仰々しいテキストが見えます。

image.png
このファイルがリソースを定義しています。
作成方法がポータルであれテキストエディタであれ、これをAzure Resource Manager (ARM)に渡せばリソースを作成してくれます。
したがって、JSON で全部書いてARM 渡せばポータルで毎回ポチポチしなくてよくなるわけです。IaC (Infrastructure as Code)というやつです。

そこでBicep

しかし、JSON は書くのが大変だそうです。そこで、Bicep が役立つとのことです。
上に貼ったラーニングモジュールに、JSON とBicep の比較がありますが、JSON と比べるとBicep のコードは単純でかなり書きやすそうです。

使い方(ざっくりと説明)

Bicep ファイルにデプロイしたいリソースの種類を書き、JSON ファイルに詳細なパラメーター情報を書きテンプレートファイルとします。この2 種類のファイルをAzure Powershell やAzure CLI の引数として渡して実行するとデプロイされます。
私はAzure Powershellで勉強しています。重要構文をいくつか書いておきます。

Bicep を使ったデプロイコマンド

New-AzResourceGroupDeployment -TemplateFile main.bicep -TemplateParameterFile main.parameters.dev.json

上記はラーニングモジュールに出てくるコマンドそのままです。

ファイル名 説明
main.bicep デプロイしたいリソースを定義したBicep ファイル名
main.parameters.dev.json リソースのパラメーターを定義したテンプレートファイル名

(なんかイケてない表やな)

例えばリージョンという設定値(=パラメーター)に対しては、Bicep ファイルの方では"location" という文字列でとりあえず書いておいて、テンプレートファイルの方で"location" の具体的な項目を定義する、といった具合に書きます。
こうすることで、このコマンドを打つごとに(デプロイごとに)テンプレートファイルを変えるだけで、同じBicep ファイルからパラメーター違いの構成をポンポン作ることができます。
テンプレートファイルを分けない場合だと、先の例だとリージョンを変えたいだけでも1 つのファイル全体を書き直す必要があります。

リソースの宣言

resource resourcename '{resource-provider}/{resource-type@API version}' =
項目 説明
resourcename リソースに付ける名前。任意に決めていいが、誰にでもわかるようほぼ決まっている。
{resource-provider}/{resource-type} リソースの種類を表す言葉
API version リソースごとにあるAPIのバージョン。VS Codeの拡張機能だと可能な選択肢を出してくれる

API バージョンについては、デプロイしたいものはここで探すんだと思います。
このページで各リソースの定義の仕方がわかります。
(でもこのページの情報だけだと情報足りなくて、作りたいリソースのjson ファイルを自分で見て書く必要があると思います)

= のあとにリソースのパラメーターを入れられます。

ターミナルにサブスクリプションを設定

$context = Get-AzSubscription -SubscriptionId {Your subscription ID}
Set-AzContext $context

Azure Powershell のターミナルに上記コマンドを打つと、そのターミナルの既定サブスクリプションを設定できます。つまり、リソースをデプロイするサブスクリプションをあらかじめ決めておくことができます。

サブスクリプションID

Get-AzSubscription

サブスクリプションが複数ある場合は全部見られるので、狙いのサブスクリプションのIDをコピーして使いいます。

テンプレートファイルの書き方

テンプレートファイルの書き方はJSON そのものだと思うので省略(まだ理解してない)

終わり

勉強したことをまとめただけですがこれまで。
いつも検証で使っている、1 つのVM とVPN gateway の構成は、近いうちにIaC したいと思っています。またそのときに加筆するつもりです。

5
3
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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?