DEV Community

Ewerton Jordão
Ewerton Jordão

Posted on • Originally published at Medium on

PowerShell Core | API Azure |Azure Database for MySQL

Provisionando recursos de banco de dados MySQL consumindo a API do Azure.

PowerShell Core Azure Rest API e MySQL

E ae, beleza pessoal? falando mais uma vez de como criar um recurso no Azure através do PowerShell, em outro artigo provisionei um recurso utilizando o provider listado do PostgreSQL que no final das contas bate na API REST do Azure e cria o(s) recurso(s). Neste artigo vamos provisionar o Azure Database for MySQL enviando uma requisição web. Veremos como recuperar as informações de assinatura, em qual contexto estamos, etc. É uma ótima opção para escapar de ter que logar inúmeras vezes para provisionar o recurso na “mão” 🙌.

Obs: Para esta demo utilizo um grupo de recursos chamado testeGratuitoAzure se você não possui o mesmo grupo de recursos será necessário alterar alguns trechos do script ou criar o ResourceGroup. Outro ponto importante é o custo, acesse o link e verifique https://azure.microsoft.com/en-us/pricing/calculator/?service=mysql .

Feita as considerações vamos a 😈 DEMO😈 ✊ ✌️.

function Get-AzToken {
$az = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
if (-not $az.Accounts.count ) {
Write-Host "Voce deve logar primeiro no Azure atravez do Cmdlet Connect-AzAccount"
}
$contextoAzure = Get-AzContext
$perfilCliente = New-Object Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient($az)
$token = $perfilCliente.AcquireAccessToken($contextoAzure.Tenant.TenantId)
$token.AccessToken
}
function Get-TokenBearer {
$token = Get-AzToken
("Bearer {0}" -f $token)
}
$assinaturaAz = (Get-AzContext).Subscription.Id
$parametrosHeader = @{
Authorization = Get-TokenBearer
}
$bodyRequestAv = @{
name = "mysqldbonazure"
type = "Microsoft.DBforMySQL"
} | ConvertTo-Json
$urlbase = "https://management.azure.com/subscriptions/{0}/providers/Microsoft.DBforMySQL/checkNameAvailability?api-version=2017-12-01" -f $assinaturaAz
$nameAvailable = Invoke-RestMethod -Method Post -Uri $urlbase -Headers $parametrosHeader -Body $bodyRequestAv -ContentType application/json
if ($nameAvailable.nameAvailable -eq "True") {
Write-Host "nome diponivel criando recurso no Azure" -ForegroundColor Green
$convertFromJson = $bodyRequestAv | ConvertFrom-Json -AsHashtable
$grupoDeRecurso = (Get-AzResourceGroup | select -Property ResourceGroupName | ? { $_.ResourceGroupName -like "testeGratuito*" }).ResourceGroupName
$urlbaseDB = "https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.DBforMySQL/servers/{2}?api-version=2017-12-01" -f $assinaturaAz, $grupoDeRecurso, $convertFromJson.name
$id = $urlbaseDB.Substring(28,127)
$bodyRequestDB = @{
id = $id
name =$convertFromJson.name
type ="Microsoft.DBforMySQL/servers"
location = "westus"
properties = @{
administratorLogin = "rootcloudney"
administratorLoginPassword = "teste@123456"
storageProfile = @{
storageMB = 128000
backupRetentionDays = 7
# geoRedundantBackup = "Enabled"
}
version = "5.7"
sslEnforcement = "Enabled"
userVisibleState = "Ready"
fullyQualifiedDomainName = $convertFromJson.name+".mysql.database.azure.com"
# earliestRestoreDate = "2018-03-14T18:02:41.577+00:00"
}
sku = @{
name = "B_Gen5_2"
tier = "Basic"
capacity = 2
family = "Gen5"
}
} | ConvertTo-Json
Invoke-WebRequest -Method Put -Uri $urlbaseDB -Headers $parametrosHeader -Body $bodyRequestDB -ContentType application/json
}
else {
Write-Host "nome escolhido não esta disponivel" -ForegroundColor DarkRed
}
#Verificar o log do azure
# Get-AzLog -ResourceProvider "Microsoft.DBforMySQL" -StartTime 2019-05-17T23:59 #alterar o parametro StartTime
#Remove recurso criado
#Get-AzResource | ? {$_.ResourceName -eq $convertFromJson.name}| Select-Object -Property ResourceId | Remove-AzResource

Resultado após executar o script.

Visualizando o log do Azure (Get-Azlog)

Se tudo estiver ok, após as validações da API a criação dos recursos será concluída com sucesso ou falha 😅, com o cmdlet Get-AzLog você pode consultar o log de execução da criação dos recursos no Azure, para saber se obteve sucesso na criação do recurso ou se deve corrigir algum parâmetro na requisição. Informando o parâmetro ResourceProvider você filtra o resultado da consulta do log.

resultado da execução do Get-AzResource

Utilizando o Get-AzResource ele vai retornar todos os recursos provisionados no Azure.

Recurso criado no Azure.

Servidor de Banco de dados MySQL visão portal Azure

É isso pessoal, demonstrei como o PowerShell facilita o provisionamento de recursos consumindo a API REST do Azure ☁️ .

Não se esqueça, PS é vida 😍.

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay