はじめに
Azureを構築するためにはPortal以外にも様々な手法があります。Azure PewerShell、Azure CLI、ARMテンプレート、Terraform、Ansibleなどマイクロソフト純正のものからサードベンダーのものがあります。BicepはARMテンプレートの延長線上にあるものです。ARMテンプレートは、複雑な構文になりがちです。それを解消できるのがBicepです。簡単にいうとBicepで書かれたものはARMテンプレートのJSONに変換(Bicep CLIが変換する)されて、それをAzure PowerShellたAzure CLIがデプロイメントすします。
-
Azure リソースをデプロイするための Bicep 言語 - Azure Resource Manager | Microsoft Learn
Azure にインフラストラクチャをデプロイするための Bicep 言語について説明します。 JSON を使用してテンプレートを開発するよりも優れた作成エクスペリエンスが提供されます。
docs.microsoft.com
ARMテンプレートを書くのが面倒だったひとにもよいツールだと思います。
では、サンプルがあるので試していきたいと思います。
インストール
Bicepのインストールにはデプロイメントまで行うにはVS Codeを使うのが良いと思います。Bicepの拡張機能を利用すると良いでしょう。作成が楽になります。とうぜんVS Codeを利用せずメモ帳でもできますが今回はVS Codeを使っていきます。
VS Codeを立ち上げて、Bicep拡張機能をインストールします。
インストール完了後に試しに 拡張子 bicep
のファイルを作成してみます。
Bicepのファイルとして認識されています。
次にBicep CLI(Bicep本体)をインストールします。
今回はWSLのUbuntuにインストールしています。Azure CLIは事前にインストールしてあることが前提です。
Azure CLIのインストールは下記を参考にしてください。
-
Azure CLI を Linux にインストールする | Microsoft Learn
Azure CLI を Linux 上に手動でインストールして実行する方法について説明します。 Linux コンピューターへの Azure CLI のインストールは、1 つのコマンドで行うことも、ステ ...
docs.microsoft.com
他にVS Codeを利用することでリソースの資格化が行える(これかっこいい
Bicepのインストール
root@DESKTOP-0N1SEQ2:~# az bicep install Installing Bicep CLI v0.4.1124... Successfully installed Bicep CLI to "C:\Users\user1\.azure\bin\bicep.exe".
WSLの場合はWindows側にインストールされるようです。
インストール後に動作確認
root@DESKTOP-0N1SEQ2:~# az bicep version Bicep CLI version 0.4.1124 (66c84c8ee5)
デプロイメント
最初は仮想マシンを1台構築してみたいと思います。
サンプルを利用してどのように作られるのかイメージしてみましょう。
これを利用してデプロイメントしていきます。
事前にVS Codeのターミナルを開きAzureにログインしておきます。
az login
アカウントの設定をします。
az account set --subscription "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
事前にリソースグループは作成しておきます。
今回はbicepdemoというリソースグループを作成してデフォルトで利用するリソースグループとして登録しています。
az configure --defaults group=bicepdemo
あとはサンプルを展開するだけです。
az deployment group create --template-file main.bicep
デプロイメント
az deployment group create --template-file main.bicep
ユーザー名とパスワードを聞かれます。
Please provide string value for 'adminUsername' (? for help): azureuser Please provide securestring value for 'adminPasswordOrKey' (? for help):
実行結果
{ "id": "/subscriptions/fa4dc6d1-abc7-4363-8d47-36340ae168e2/resourceGroups/bicepdemo/providers/Microsoft.Resources/deployments/main", "location": null, "name": "main", "properties": { "correlationId": "bd0dfd55-7a9f-487b-a157-8598c124a8e8", "debugSetting": null, "dependencies": [ { "dependsOn": [ { "id": "/subscriptions/fa4dc6d1-abc7-4363-8d47-36340ae168e2/resourceGroups/bicepdemo/providers/Microsoft.Network/networkSecurityGroups/SecGroupNet", "resourceGroup": "bicepdemo", "resourceName": "SecGroupNet", "resourceType": "Microsoft.Network/networkSecurityGroups" }, { "id": "/subscriptions/fa4dc6d1-abc7-4363-8d47-36340ae168e2/resourceGroups/bicepdemo/providers/Microsoft.Network/publicIPAddresses/simpleLinuxVMPublicIP", "resourceGroup": "bicepdemo", "resourceName": "simpleLinuxVMPublicIP", "resourceType": "Microsoft.Network/publicIPAddresses" }, { "id": "/subscriptions/fa4dc6d1-abc7-4363-8d47-36340ae168e2/resourceGroups/bicepdemo/providers/Microsoft.Network/virtualNetworks/vNet/subnets/Subnet", "resourceGroup": "bicepdemo", "resourceName": "vNet/Subnet", "resourceType": "Microsoft.Network/virtualNetworks/subnets" } ], "id": "/subscriptions/fa4dc6d1-abc7-4363-8d47-36340ae168e2/resourceGroups/bicepdemo/providers/Microsoft.Network/networkInterfaces/simpleLinuxVMNetInt", "resourceGroup": "bicepdemo", "resourceName": "simpleLinuxVMNetInt", "resourceType": "Microsoft.Network/networkInterfaces" }, { "dependsOn": [ { "id": "/subscriptions/fa4dc6d1-abc7-4363-8d47-36340ae168e2/resourceGroups/bicepdemo/providers/Microsoft.Network/virtualNetworks/vNet", "resourceGroup": "bicepdemo", "resourceName": "vNet", "resourceType": "Microsoft.Network/virtualNetworks" } ], "id": "/subscriptions/fa4dc6d1-abc7-4363-8d47-36340ae168e2/resourceGroups/bicepdemo/providers/Microsoft.Network/virtualNetworks/vNet/subnets/Subnet", "resourceGroup": "bicepdemo", "resourceName": "vNet/Subnet", "resourceType": "Microsoft.Network/virtualNetworks/subnets" }, { "dependsOn": [ { "id": "/subscriptions/fa4dc6d1-abc7-4363-8d47-36340ae168e2/resourceGroups/bicepdemo/providers/Microsoft.Network/networkInterfaces/simpleLinuxVMNetInt", "resourceGroup": "bicepdemo", "resourceName": "simpleLinuxVMNetInt", "resourceType": "Microsoft.Network/networkInterfaces" } ], "id": "/subscriptions/fa4dc6d1-abc7-4363-8d47-36340ae168e2/resourceGroups/bicepdemo/providers/Microsoft.Compute/virtualMachines/simpleLinuxVM", "resourceGroup": "bicepdemo", "resourceName": "simpleLinuxVM", "resourceType": "Microsoft.Compute/virtualMachines" } ], "duration": "PT57.2154783S", "error": null, "mode": "Incremental", "onErrorDeployment": null, "outputResources": [ { "id": "/subscriptions/fa4dc6d1-abc7-4363-8d47-36340ae168e2/resourceGroups/bicepdemo/providers/Microsoft.Compute/virtualMachines/simpleLinuxVM", "resourceGroup": "bicepdemo" }, { "id": "/subscriptions/fa4dc6d1-abc7-4363-8d47-36340ae168e2/resourceGroups/bicepdemo/providers/Microsoft.Network/networkInterfaces/simpleLinuxVMNetInt", "resourceGroup": "bicepdemo" }, { "id": "/subscriptions/fa4dc6d1-abc7-4363-8d47-36340ae168e2/resourceGroups/bicepdemo/providers/Microsoft.Network/networkSecurityGroups/SecGroupNet", "resourceGroup": "bicepdemo" }, { "id": "/subscriptions/fa4dc6d1-abc7-4363-8d47-36340ae168e2/resourceGroups/bicepdemo/providers/Microsoft.Network/publicIPAddresses/simpleLinuxVMPublicIP", "resourceGroup": "bicepdemo" }, { "id": "/subscriptions/fa4dc6d1-abc7-4363-8d47-36340ae168e2/resourceGroups/bicepdemo/providers/Microsoft.Network/virtualNetworks/vNet", "resourceGroup": "bicepdemo" }, { "id": "/subscriptions/fa4dc6d1-abc7-4363-8d47-36340ae168e2/resourceGroups/bicepdemo/providers/Microsoft.Network/virtualNetworks/vNet/subnets/Subnet", "resourceGroup": "bicepdemo" } ], "outputs": { "adminUsername": { "type": "String", "value": "azureuser" }, "hostname": { "type": "String", "value": "simplelinuxvm-jse37geyedaxg.eastus.cloudapp.azure.com" }, "sshCommand": { "type": "String", "value": "ssh azureuser@simplelinuxvm-jse37geyedaxg.eastus.cloudapp.azure.com" } }, "parameters": { "adminPasswordOrKey": { "type": "SecureString" }, "adminUsername": { "type": "String", "value": "azureuser" }, "authenticationType": { "type": "String", "value": "password" }, "dnsLabelPrefix": { "type": "String", "value": "simplelinuxvm-jse37geyedaxg" }, "location": { "type": "String", "value": "eastus" }, "networkSecurityGroupName": { "type": "String", "value": "SecGroupNet" }, "subnetName": { "type": "String", "value": "Subnet" }, "ubuntuOSVersion": { "type": "String", "value": "18.04-LTS" }, "virtualNetworkName": { "type": "String", "value": "vNet" }, "vmName": { "type": "String", "value": "simpleLinuxVM" }, "vmSize": { "type": "String", "value": "Standard_B2s" } }, "parametersLink": null, "providers": [ { "id": null, "namespace": "Microsoft.Network", "providerAuthorizationConsentState": null, "registrationPolicy": null, "registrationState": null, "resourceTypes": [ { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "eastus" ], "properties": null, "resourceType": "networkInterfaces" }, { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "eastus" ], "properties": null, "resourceType": "networkSecurityGroups" }, { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "eastus" ], "properties": null, "resourceType": "virtualNetworks" }, { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ null ], "properties": null, "resourceType": "virtualNetworks/subnets" }, { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "eastus" ], "properties": null, "resourceType": "publicIPAddresses" } ] }, { "id": null, "namespace": "Microsoft.Compute", "providerAuthorizationConsentState": null, "registrationPolicy": null, "registrationState": null, "resourceTypes": [ { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "eastus" ], "properties": null, "resourceType": "virtualMachines" } ] } ], "provisioningState": "Succeeded", "templateHash": "2128878038946191457", "templateLink": null, "timestamp": "2022-01-15T08:23:35.841882+00:00", "validatedResources": null }, "resourceGroup": "bicepdemo", "tags": null, "type": "Microsoft.Resources/deployments" }
ポータルを確認
あとはログインして確認できれば問題ないです。
まとめ
bicepのサンプルを利用してデプロイしてみました。簡単だったと思います。実際にbicepのテンプレートについてはまた説明したいです。
またbicepにはこのようなサンプルが用意されているので嬉しいところです。