Azure Automation – Script de Start e Stop Automático – Power BI Embedded

Pessoal, Tudo bem?

Cenário

Alguns clientes tem se voltado para a implantação do Power BI Embedded em horários apenas administrativos encapsulando seus relatórios em um portal customizado, ou seja, fora do expediente o serviço é paralisado evitando assim cobrança desnecessária para o cliente, isto torna grande a redução de custo e potencializa a utilização do Power BI para muito mais usuários dentro da empresa.

Solução

Esta configuração é realizada via Automation do Azure, criando um runbook com o seguinte código:

workflow PBIEmbedded_StartStop
{
    Param 
    (    
        [Parameter(Mandatory=$true)] 
        [String] 
        $AzureResourceGroup,
        [Parameter(Mandatory=$true)] 
        [String] 
        $PowerBIEmbeddedName,
        [Parameter(Mandatory=$true)] 
        [Boolean] 
        $Suspend
    )  
    $connectionName = "AzureRunAsConnection" 
 
    try 
    { 
        # Get the connection "AzureRunAsConnection " 
        $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName          
 
        "Logging in to Azure..." 
        Add-AzureRmAccount -ServicePrincipal -TenantId $servicePrincipalConnection.TenantId -ApplicationId $servicePrincipalConnection.ApplicationId -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint  
              
    } 
    catch { 
        if (!$servicePrincipalConnection) 
        { 
            $ErrorMessage = "Connection $connectionName not found." 
            throw $ErrorMessage 
        } else{ 
            Write-Error -Message $_.Exception 
            throw $_.Exception 
        } 
    }
        if($Suspend -eq $true )
        {
            try
            {
                #Suspending the Service 
                "Suspending $PowerBIEmbeddedName started"
                $SuspendOperation = Suspend-AzureRmPowerBIEmbeddedCapacity -Name $PowerBIEmbeddedName -ResourceGroupName $AzureResourceGroup -PassThru
                "$PowerBIEmbeddedName is Suspended Successfully"
            }
            catch
            {
                    Write-Error -Message $_.Exception 
                    throw $_.Exception           
            }
            
        }
        else
        {
            try
            {  
                #Resuming the Service 
                "Resuming $PowerBIEmbeddedName"
                $ResumeOperation = Resume-AzureRmPowerBIEmbeddedCapacity -Name $PowerBIEmbeddedName -ResourceGroupName $AzureResourceGroup -PassThru
                "$PowerBIEmbeddedName Resumed Successfully "
            }
            catch
            {
                    Write-Error -Message $_.Exception 
                    throw $_.Exception 
            }
        }
}

O que pode ocorrer ao você tentar implementar pela primeira vez é o seguinte erro:

Suspend-AzureRmPowerBIEmbeddedCapacity’ is not recognized as the name of a cmdlet + automation

Outro erro comum:

Cannot find the ‘Test-AzureRmPowerBIEmbeddedCapacity’ command. If this command is defined as a workflow, ensure it is defined before the workflow that calls it. If it is a command intended to run directly within Windows PowerShell (or is not available on this system), place it in an InlineScript: ‘InlineScript { Test-AzureRmPowerBIEmbeddedCapacity }’
 

Para isto, basta você importar os seguintes módulos em sua conta do Automation:

  • AzureRM.profile
  • AzureRM.PowerBIEmbedded

Eles possibiltam a utilização do cmdlets que o script necessita.

Espero que ajude!

Até breve,

Vithor da Silva e Silva | Consultor e Instrutor | SQL Server e Power BI
vithor@vssti.com.br