Azure

Bicepのサンプルで仮想マシンを立ててみる

はじめに

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 Docs
Azure リソースをデプロイするための Bicep 言語 - Azure Resource Manager | Microsoft Docs

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 Docs
Azure CLI を Linux にインストールする | Microsoft Docs

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台構築してみたいと思います。

サンプルを利用してどのように作られるのかイメージしてみましょう。

bicep/docs/examples/101/vm-simple-linux at main · Azure/bicep · GitHub
bicep/docs/examples/101/vm-simple-linux at main · Azure/bicep · GitHub

Bicep is a declarative language for describing and deploying Azure resources - bicep/docs/examples/1 ...

github.com

これを利用してデプロイメントしていきます。

事前に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にはこのようなサンプルが用意されているので嬉しいところです。

 

 

-Azure
-