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
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