Azure API: W jakich regionach jest dostępna usługa?

29-kwi-2022

Ta metoda zadziała, jeśli np. chcesz systematycznie sprawdzać dostępność wybranej usługi w różnych regionach. Można też wykorzystywać API do tworzenia obiektów, ale akurat w tym przypadku, powiedziałbym że są inne wygodniejsze metody.

  • Trzeba mieć utworzone konto, dobrym wyborem jest service principal. Powinno wystarczyć polecenie w postaci
az ad sp create-for-rbac --scopes /subscriptions/mySubscriptionID

W zwróconym wyniku można odnaleźć: clientId, clientSecret, Będą one potrzebne w kolejnych krokach. Proces tworzenia service principal jest opisany dokładniej tutaj: Create an Azure service principal – Azure CLI | Microsoft Docs

  • Trzeba  uzyskać tzw. Authorization Bareer. Można to zrobić dowolnym narzędziem do pracy z web service. Tu korzystam z curl, ale postman jest też ok. Zamaksowany identyfikator w adresie url, to tenantId:
curl -d 'grant_type=client_credentials&client_id=6*****6&client_secret=y******6&
resource=https://management.azure.com' 
https://login.microsoftonline.com/6*****a/oauth2/token
  • Ta czynność odpowiada logowaniu do Azure. W odpowiedzi zostanie zwrócony dluuugi klucz, który należy wykorzystywać w kolejnych zapytaniach API wysylanych do Azure:
curl -X GET -H "Authorization: Bearer e*****A" 
https://management.azure.com/subscriptions/8*****9//providers/Microsoft.DBForPostgreSql?api-version=2020-06-01 
> availability.json

Tym razem w URL pojawia się już adres wskazujący na usługę, o której chcemy się dowiedzieć pownych rzeczy. Tutaj tą usługą jest baza danych PostgreSQL

Z dużym prawdopodobieństwem pobrany plik JSON nie będzie miał ładnego formatu, ale można nad tym popracować:

cat availability.json |  python3 -m json.tool > availability-format.json

A jesli np. chesz dowiedzieć się w którym regionie, jakie availability grupy są dostępne to możesz to zrobić tak:

import json
f = open('availability-format.json', 'r')
data = json.load(f)

l1 = data['resourceTypes']
fs = [i for i in l1 if i["resourceType"] == "flexibleServers"]
f0 = fs[0]
zm = f0['zoneMappings']
loczone = [ [m['location'], m['zones']] for m in zm]
for i in loczone:
   print(f'{i[0]} : {i[1]}')

Linki:

Azure REST API reference documentation | Microsoft Docs

Operations – List – REST API (Azure PostgreSQL) | Microsoft Docs

Need Rest API to get the availability zones information on the basis of Object selected in a particular region · Issue #3594 · Azure/azure-rest-api-specs (github.com)

Test a REST API with curl | Baeldung

Access Azure API with a bearer token for impersonation – Sander van de Velde (wordpress.com)

Calling Azure REST API via curl. A straightforward post to invoke Azure… | by Davide Mauri | Medium

Check Name Availability – Execute – REST API (Azure PostgreSQL) | Microsoft Docs

 

 

 

 

 

Komentarze są wyłączone

Autor: Rafał Kraik