Skip to main content

Create Azure Blob Storage and add to Veeam Backup & Replication


Markus.K1985
Forum|alt.badge.img+3

Hello,

I was trying to automation some of my lab stuff. The result was a ARM Template & PowerShell Script to create Azure Blob Storage and add it to Veeam Backup & Replication.

ARM Template:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "storageAccountName": {
        "type": "string",
        "metadata": {
          "description": "Specifies the name of the Azure Storage account."
        }
      },
      "containerName": {
        "type": "string",
        "defaultValue": "logs",
        "metadata": {
          "description": "Specifies the name of the blob container."
        }
      },
      "location": {
        "type": "string",
        "defaultValue": "[resourceGroup().location]",
        "metadata": {
          "description": "Specifies the location in which the Azure Storage resources should be deployed."
        }
      }
    },
    "resources": [
      {
        "type": "Microsoft.Storage/storageAccounts",
        "apiVersion": "2022-05-01",
        "name": "[parameters('storageAccountName')]",
        "location": "[parameters('location')]",
        "sku": {
          "name": "Standard_LRS"
        },
        "kind": "StorageV2",
        "properties": {
          "accessTier": "Hot",
          "minimumTlsVersion": "TLS1_2",
          "supportsHttpsTrafficOnly": true,
          "publicNetworkAccess": "Enabled",
          "allowBlobPublicAccess": false,
          "allowSharedKeyAccess": true,
          "allowCrossTenantReplication": true,
          "defaultToOAuthAuthentication": false
        }
      },
      {
        "type": "Microsoft.Storage/storageAccounts/blobServices",
        "apiVersion": "2022-05-01",
        "name": "[concat(parameters('storageAccountName'), '/default')]",
        "properties": {
          "automaticSnapshotPolicyEnabled": false,
          "changeFeed": {
            "enabled": false
          },
          "containerDeleteRetentionPolicy": {
            "enabled": false
          },
          "deleteRetentionPolicy": {
            "enabled": false
          },
          "isVersioningEnabled": false,
          "restorePolicy": {
            "enabled": false
          }
        },
        "dependsOn": [
          "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
        ]

      },
      {
          "type": "Microsoft.Storage/storageAccounts/fileservices",
          "apiVersion": "2022-05-01",
          "name": "[concat(parameters('storageAccountName'), '/default')]",
          "properties": {
              "shareDeleteRetentionPolicy": {
                  "enabled": false
              }
          },
          "dependsOn": [
              "[concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]",
              "[concat(concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName')), '/blobServices/default')]"
          ]
      },
      {
        "type": "Microsoft.Storage/storageAccounts/blobServices/containers",
        "apiVersion": "2022-05-01",
        "name": "[format('{0}/default/{1}', parameters('storageAccountName'), parameters('containerName'))]",
        "dependsOn": [
          "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
        ]
      }
    ]
  }

My Properties File:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "storageAccountName": {
            "value": "veeamautomationstorage"
        },
        "containerName": {
            "value": "veeamautomationstorageblob"
        },
        "location": {
            "value": "germanywestcentral"
        }
    }
}

PowerShell Script to get it all together:

#Install-Module -Name Az -Scope CurrentUser
Import-Module -Name Az
Connect-AzAccount

Import-Module -Name Veeam.Backup.PowerShell 
$VBRCredentials = Get-Credential -Message "VBR Credentials"
Connect-VBRServer -Server 192.168.70.146 -Credential $VBRCredentials

$resourceGroupName = "veeamautomation"
$location = "germanywestcentral"

# Create Ressources
## Resource Group
$AzResourceGroup = New-AzResourceGroup -Name $resourceGroupName -Location $location
## Storage Account
$AzResourceGroupDeployment = New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
    -TemplateFile ./arm/Veeam-AzureBlobtarget.json `
    -TemplateParameterFile ./arm/Veeam-AzureBlobtarget.parameters.json

$AzStorageAccountKey = (Get-AzStorageAccountKey -ResourceGroupName $resourceGroupName -Name $AzResourceGroupDeployment.Parameters.storageAccountName.Value ).Value[0]
$AzStorageAccountName = $AzResourceGroupDeployment.Parameters.storageAccountName.Value

# Remove-AzResourceGroup -Name $resourceGroupName

# Connect to VBR
## Credentials
$VBRAzureBlobAccount = Add-VBRAzureBlobAccount -Name $AzStorageAccountName -SharedKey $AzStorageAccountKey
## Create Folder
$VBRAzureBlobService = Connect-VBRAzureBlobService -Account $VBRAzureBlobAccount -RegionType Global -ServiceType CapacityTier
$VBRAzureBlobContainer = Get-VBRAzureBlobContainer -Connection $VBRAzureBlobService
$VBRAzureBlobFolder = New-VBRAzureBlobFolder -Container $VBRAzureBlobContainer -Connection $VBRAzureBlobService -Name "veeamautomationarm"
## Add Repo
$VBRAzureBlobRepository = Add-VBRAzureBlobRepository -AzureBlobFolder $VBRAzureBlobFolder[0] -Connection $VBRAzureBlobService -Name "veeamautomationarm"
## Disconect
Disconnect-VBRAzureBlobService -Connection $VBRAzureBlobService
Get-VBRBackupRepository -Name "veeamautomationarm"

GitHub Repo: https://github.com/vMarkusK/Azure-Veeam

Stay tuned for a detailed Blog Post on https://mycloudrevolution.com/en/​​​​​​

3 comments

Chris.Childerhose
Forum|alt.badge.img+21
  • Veeam Legend, Veeam Vanguard
  • 8400 comments
  • February 27, 2023

Thanks for sharing this, Markus.  Anything that helps automating tasks especially something like this in Azure benefits everyone.  😎


JMeixner
Forum|alt.badge.img+17
  • Veeam Vanguard
  • 2650 comments
  • February 27, 2023

Great work @Markus.K1985 

Every automation helps 😎👍🏼


Markus.K1985
Forum|alt.badge.img+3
  • Author
  • Comes here often
  • 8 comments
  • April 4, 2023

Comment