はじめに
Azureを構築するためにはPortal以外にも様々な手法があります。Azure PewerShell、Azure CLI、ARMテンプレート、Terraform、Ansibleなどマイクロソフト純正のものからサードベンダーのものがあります。BicepはARMテンプレートの延長線上にあるものです。ARMテンプレートは、複雑な構文になりがちです。それを解消できるのがBicepです。簡単にいうとBicepで書かれたものはARMテンプレートのJSONに変換(Bicep CLIが変換する)されて、それをAzure PowerShellたAzure CLIがデプロイメントすします。
ARMテンプレートを書くのが面倒だったひとにもよいツールだと思います。
では、サンプルがあるので試していきたいと思います。
インストール
Bicepのインストールにはデプロイメントまで行うにはVS Codeを使うのが良いと思います。Bicepの拡張機能を利用すると良いでしょう。作成が楽になります。とうぜんVS Codeを利用せずメモ帳でもできますが今回はVS Codeを使っていきます。
VS Codeを立ち上げて、Bicep拡張機能をインストールします。
インストール完了後に試しに 拡張子 bicep のファイルを作成してみます。
Bicepのファイルとして認識されています。
次にBicep CLI(Bicep本体)をインストールします。
今回はWSLのUbuntuにインストールしています。Azure CLIは事前にインストールしてあることが前提です。
Azure CLIのインストールは下記を参考にしてください。
他に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にはこのようなサンプルが用意されているので嬉しいところです。




