PowerShell kullanarak Azure NetApp Files REST API için geliştirme
Azure NetApp Files hizmetinin REST API, NetApp hesabı, kapasite havuzu, birimler ve anlık görüntüler gibi kaynaklara karşı HTTP işlemlerini tanımlar. Bu makale, PowerShell'i kullanarak Azure NetApp Files REST API başlamanıza yardımcı olur.
Azure NetApp Files REST API belirtimi
REST API için Azure NetApp Files belirtimi, GitHub:
https://github.com/Azure/azure-rest-api-specs/tree/master/specification/netapp/resource-manager
Erişim Azure NetApp Files REST API
Henüz bunu yapmadıysanız Azure CLI'sini yükleyin.
Sanal ağ (Azure AD) Azure Active Directory hizmet sorumlusu oluşturun:
Yeterli izinlere sahip olduğunu doğrulayın.
Azure CLI'ye aşağıdaki komutu girin:
$RBAC_SP = az ad sp create-for-rbac --name <YOURSPNAMEGOESHERE> --role Contributor | ConvertFrom-JsonHizmet sorumlusu bilgilerini görüntülemek için yazın ve
$RBAC_SPEnter tuşuna basın.appId : appID displays here displayName : displayName name : http://SP_Name password : super secret password tenant : your tenant shows hereÇıktı değişken nesnesine
$RBAC_SPkaydedilir. , ve$RBAC_SP.appIddeğerlerini$RBAC_SP.password$RBAC_SP.tenantkullanacağız.
OAuth erişim belirteci isteği:
Bu makaledeki örneklerde PowerShell lanmıştır. Postman,Uyku moduna veya Paw gibi çeşitli API araçlarınıda kullanabilirsiniz.
değişkenlerini
$RBAC_SPkullanarak taşıyıcı belirteci alalız.$body = "grant_type=client_credentials&client_id=$($RBAC_SP.appId)&client_secret=$($RBAC_SP.password)&resource=https://management.azure.com/" $BearerToken = Invoke-RestMethod -Method Post -body $body -Uri https://login.microsoftonline.com/$($RBAC_SP.tenant)/oauth2/tokenÇıktı bir Taşıyıcı Belirteç nesnesi sağlar. yazarak erişim belirteci
$BearerToken.access_tokenabilirsiniz. Çıktı aşağıdaki örneğe benzer:eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Im5iQ3dXMTF3M1hrQi14VWFYd0tSU0xqTUhHUSIsImtpZCI6Im5iQ3dXMTF3M1hrQi14VWFYd0tSU0xqTUhHUSJ9Görüntülenen belirteç 3600 saniye geçerlidir. Bundan sonra, yeni bir belirteç isteğiniz gerekir. Belirteç değişkenine kaydedilir ve sonraki adımda kullanılacaktır.
Nesnesini
headersoluşturun:$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" $headers.Add("Authorization", "Bearer $($BearerToken.access_token)") $headers.Add("Content-Type", "application/json")Bir test çağrısı gönderin ve bu çağrıya erişiminizi doğrulamak için belirteci REST API:
$SubId = (Get-AzureRmContext).Subscription.Id Invoke-RestMethod -Method Get -Headers $headers -Uri https://management.azure.com/subscriptions/$SubId/providers/Microsoft.Web/sites?api-version=2019-11-01
API'yi kullanan örnekler
Bu makalede isteklerin temeli için aşağıdaki URL lanmıştır. Bu URL, Azure NetApp Files ad alanının kökünü gösterir.
https://management.azure.com/subscriptions/$SUBID/resourceGroups/$RESOURCEGROUP/providers/Microsoft.NetApp/netAppAccounts?api-version=2019-11-01
Aşağıdaki örnekleri kendi değerleriniz ile çalıştırmadan önce değişken değerleri atamanız gerekir. PowerShell değişkenlerine yazarak $variablename erişilir.
PowerShell değişkenleri kullanılarak $variablename = “value” atanır.
$Region = “westus2"
$ResourceGroup = “MYTest-RG-63"
$ANFvnetname = “NetAppFilesVnet-63"
$ANFvnetCIDR = “10.63.64.0/18"
$ANFsubnet = “NetAppFilesSubnet-63"
$ANFsubnetCIDR = “10.63.120.0/28"
$ANFsubnetID = “/subscriptions/$SubID/resourceGroups/$ResourceGroup/providers/Microsoft.Network/virtualNetworks/$ANFvnetname/subnets/$ANFSubnet"
$ANFAccount = “TestoftheAPI"
$ANFCapacityPool = “ANFTestPool"
$ANFServicelevel = “Standard"
$ANFVolume = “ANFTestVolume"
$ANFVolumeShareName = “Share-TEST"
$ANFVolumesize = 100GB
$ANFSnapshot = “ANFTestSnapshot"
PUT isteği örnekleri
Aşağıdaki örneklerde olduğu gibi, bir PUT isteği kullanarak Azure NetApp Files nesne oluşturabilirsiniz. PUT isteğinin gövdesi, değişiklikler için JSON biçimli verileri içerir. PowerShell komutuna metin olarak dahil edilecek veya dosya olarak başvurulyacaktır. Gövdeye dosya olarak başvuru yapmak için json örneğini bir dosyaya kaydedin ve -body (Get-Content @<filename>) PowerShell komutuna ekleyin.
#create a NetApp account
$body = "{
`"name`": `"$ANFAccount`",
`"type`": `"Microsoft.NetApp/netAppAccounts`",
`"location`": `"$Region`",
`"properties`": {
`"name`": `"$ANFAccount`"
}
} "
$api_version = "2020-02-01"
Invoke-RestMethod -Method 'PUT' -Headers $headers -Body $body "https://management.azure.com/subscriptions/$SubID/resourceGroups/$ResourceGroup/providers/Microsoft.NetApp/netAppAccounts/$ANFAccount`?api-version=$api_version"
#create a capacity pool
$body = "{
`"location`": `"$Region`",
`"properties`": {
`"size`": " + 4TB + ",
`"serviceLevel`": `"Standard`"
}
}"
$api_version = "2020-02-01"
Invoke-RestMethod -Method 'PUT' -Headers $headers -Body $body "https://management.azure.com/subscriptions/$SubID/resourceGroups/$ResourceGroup/providers/Microsoft.NetApp/netAppAccounts/$ANFAccount/capacityPools/$ANFCapacityPool`?api-version=$api_version"
#create a volume
$body = "{
`"name`": `"$ANFVolume`",
`"type`": `"Microsoft.NetApp/netAppAccounts/capacityPools/volumes`",
`"location`": `"$Region`",
`"properties`": {
`"serviceLevel`": `"$ANFServicelevel`",
`"usageThreshold`": `"$ANFVolumesize`",
`"creationToken`": `"$ANFVolumeShareName`",
`"snapshotId`": `"`",
`"subnetId`": `"$ANFSubnetID`"
}
}"
$api_version = "2020-02-01"
Invoke-RestMethod -Method 'PUT' -Headers $headers -Body $body "https://management.azure.com/subscriptions/$SubID/resourceGroups/$ResourceGroup/providers/Microsoft.NetApp/netAppAccounts/$ANFAccount/capacityPools/$ANFCapacityPool/volumes/$ANFVolume`?api-version=$api_version"
#create a volume snapshot
$body = "{
`"name`": `"$ANFAccount/$ANFCapacityPool/$ANFVolume/$ANFSnapshot`",
`"type`": `"Microsoft.NetApp/netAppAccounts/capacityPools/Volumes/Snapshots`",
`"location`": `"$Region`",
`"properties`": {
`"name`": `"$ANFSnapshot`",
`"fileSystemId`": `"$FileSystemID`"
}
}"
$api_version = '2020-02-01'
Invoke-RestMethod -Method 'PUT' -Headers $headers -Body $body "https://management.azure.com/subscriptions/$SubID/resourceGroups/$ResourceGroup/providers/Microsoft.NetApp/netAppAccounts/$ANFAccount/capacityPools/$ANFCapacityPool/volumes/$ANFVolume/Snapshots/$ANFSnapshot`?api-version=$api_version"
JSON örnekleri
Aşağıdaki örnekte NetApp hesabının nasıl oluşturularak ilgili bilgiler ve bilgiler yer alelade bir şekilde ve daha sonra 2. kez oluşturulabilecektir:
{
"name": "MYNETAPPACCOUNT",
"type": "Microsoft.NetApp/netAppAccounts",
"location": "westus2",
"properties": {
"name": "MYNETAPPACCOUNT"
}
}
Aşağıdaki örnekte kapasite havuzunun nasıl oluşturularak ilgili bilgiler ve bilgiler ve bilgiler yer almaktadır:
{
"name": "MYNETAPPACCOUNT/POOLNAME",
"type": "Microsoft.NetApp/netAppAccounts/capacityPools",
"location": "westus2",
"properties": {
"name": "POOLNAME",
"size": "4398046511104",
"serviceLevel": "Premium"
}
}
Aşağıdaki örnekte yeni birimin nasıl oluşturularak ilgili bilgiler ve bilgiler ve bilgiler yer alelade bir bire bir oluşturularak yeni bir birim oluşturul (Birim için varsayılan protokol NFSV3'dür.)
{
"name": "MYNEWVOLUME",
"type": "Microsoft.NetApp/netAppAccounts/capacityPools/volumes",
"location": "westus2",
"properties": {
"serviceLevel": "Premium",
"usageThreshold": "322122547200",
"creationToken": "MY-FILEPATH",
"snapshotId": "",
"subnetId": "/subscriptions/$SUBID/resourceGroups/$RESOURCEGROUP/providers/Microsoft.Network/virtualNetworks/VNETGOESHERE/subnets/MYDELEGATEDSUBNET.sn"
}
}
Aşağıdaki örnekte, bir birimin anlık görüntüsünün nasıl oluşturularak oluşturularak ilgili bilgiler ve bilgiler ve bilgiler yer alınarak hazır bilgiler ve bilgiler ve bilgiler
{
"name": "apitest2/apiPool01/apiVol01/snap02",
"type": "Microsoft.NetApp/netAppAccounts/capacityPools/Volumes/Snapshots",
"location": "westus2",
"properties": {
"name": "snap02",
"fileSystemId": "0168704a-bbec-da81-2c29-503825fe7420"
}
}
Not
Anlık görüntü oluşturmak fileSystemId için belirtmeniz gerekir. Değeri bir bir fileSystemId bire get isteğiyle elde edin.
GET isteği örnekleri
Kaynak yoksa bir hata oluşur. Aşağıdaki örneklerde de olduğu gibi bir abonelikteki Azure NetApp Files nesnelerini sorgulamak için BIR GET isteği kullanırsınız:
#get NetApp accounts
Invoke-RestMethod -Method Get -Headers $headers -Uri https://management.azure.com/subscriptions/$SUBID/resourceGroups/$ResourceGroup/providers/Microsoft.NetApp/netAppAccounts?api-version=2019-11-01 | ConvertTo-Json
#get capacity pools for NetApp account
Invoke-RestMethod -Method Get -Headers $headers -Uri https://management.azure.com/subscriptions/$SUBID/resourceGroups/$ResourceGroup/providers/Microsoft.NetApp/netAppAccounts/$ANFACCOUNT/capacityPools?api-version=2019-11-01 | ConvertTo-Json
#get volumes in NetApp account & capacity pool
Invoke-RestMethod -Method Get -Headers $headers -Uri https://management.azure.com/subscriptions/$SUBID/resourceGroups/$ResourceGroup/providers/Microsoft.NetApp/netAppAccounts/$ANFACCOUNT/capacityPools/$ANFCAPACITYPOOL/volumes?api-version=2019-11-01 | ConvertTo-Json
#get snapshots for a volume
Invoke-RestMethod -Method Get -Headers $headers -Uri https://management.azure.com/subscriptions/$SUBID/resourceGroups/$ResourceGroup/providers/Microsoft.NetApp/netAppAccounts/$ANFACCOUNT/capacityPools/$ANFCAPACITYPOOL/volumes/$ANFVOLUME/snapshots?api-version=2019-11-01 | ConvertTo-Json
PowerShell betiklerini tamamlama
Bu bölümde PowerShell için örnek betikler yer almaktadır.
<#
Disclaimer
The sample scripts are not supported under any Microsoft standard support program or service. The sample scripts are provided AS IS without warranty of any kind. Microsoft further disclaims all implied warranties including, without limitation, any implied warranties of merchantability or of fitness for a particular purpose. The entire risk arising out of the use or performance of the sample scripts and documentation remains with you. In no event shall Microsoft, its authors, or anyone else involved in the creation, production, or delivery of the scripts be liable for any damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or other pecuniary loss) arising out of the use of or inability to use the sample scripts or documentation, even if Microsoft has been advised of the possibility of such damages.
#>
$Region = "westus2"
$SubID = (Get-AzureRmContext).Subscription.Id
$MyRandomID = Get-Random -Minimum 100 -Maximum 999
$ResourceGroup = "MYTest-RG-" + $MyRandomID
$ANFAccount = "ANFTestAccount-$Region-" + $MyRandomID
$ANFCapacityPool = "ANFTestPool-$Region-" + $MyRandomID
$ANFVolume = "ANFTestVolume-$Region-" + $MyRandomID
$ANFVolumesize = 100GB
$ANFVolumeShareName = "Share-" + $MyRandomID
$ANFSnapshot = "ANFTestSnapshot-$Region-" + $MyRandomID
$ANFServicelevel = "Standard"
$Octet2 = Get-Random -Minimum 1 -Maximum 254
$ANFvnetname = "NetAppFilesVnet-$Octet2-$Region-" + $MyRandomID
$ANFvnetCIDR = "10.$Octet2.64.0/18"
$ANFsubnet = "NetAppFilesSubnet-$Octet2-$Region-" + $MyRandomID
$ANFsubnetCIDR = "10.$Octet2.120.0/28"
$vmsubnet = "VM-subnet-$Octet2-$Region-" + $MyRandomID
$vmsubnetCIDR = "10.$Octet2.121.0/24"
$BearerToken = (az account get-access-token | ConvertFrom-Json).accessToken
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Bearer $BearerToken")
$headers.Add("Content-Type", "application/json")
" ** Creating Resource Group $ResourceGroup *************"
$api_version = "2020-01-01"
$body = " {
`"location`": `"$Region`",
`"name`": `"$ResourceGroup`"
},"
$response = Invoke-RestMethod -Method 'PUT' -Headers $headers -Body $body -Uri "https://management.azure.com/subscriptions/$SubID/resourcegroups/$ResourceGroup`?api-version=$api_version"
While ($response.properties.provisioningState -notmatch "Succeeded") {
$response.properties.provisioningState
sleep 5
$response = Invoke-RestMethod -Method ‘GET’ -Headers $headers -Uri "https://management.azure.com/subscriptions/$SubID/resourceGroups/$ResourceGroup`?api-version=$api_version"
}
" ** Creating Virtual Network $ANFvnetname *************"
$body = "{
`"properties`": {
`"addressSpace`": {
`"addressPrefixes`": [
`"$ANFvnetCIDR`"
]
},
`"subnets`": [
{
`"name`": `"$ANFsubnet`",
`"properties`": {
`"addressPrefix`": `"$ANFsubnetCIDR`",
`"delegations`": [
{
`"name`": `"Microsoft.NetApp`",
`"properties`": {
`"serviceName`": `"Microsoft.NetApp/volumes`"
}
}
]
}
},
{
`"name`": `"$vmsubnet`",
`"properties`": {
`"addressPrefix`": `"$vmsubnetCIDR`"
}
}
]
},
`"location`": `"$Region`"
}"
$api_version = "2020-03-01"
$response = Invoke-RestMethod -Method 'PUT' -Headers $headers -Body $body -Uri "https://management.azure.com/subscriptions/$SubID/resourceGroups/$ResourceGroup/providers/Microsoft.Network/virtualNetworks/$ANFvnetname`?api-version=$api_version"
While ($response.properties.provisioningState -notmatch "Succeeded") {
sleep 5
$response = Invoke-RestMethod -Method ‘GET’ -Headers $headers -Uri "https://management.azure.com/subscriptions/$SubID/resourceGroups/$ResourceGroup/providers/Microsoft.Network/virtualNetworks/$ANFvnetname`?api-version=$api_version"
$response.properties.provisioningState
}
$ANFsubnetID = $response.properties.subnets.id[0]
" ** Creating ANF Account $ANFAccount *************"
$body = "{
`"name`": `"$ANFAccount`",
`"type`": `"Microsoft.NetApp/netAppAccounts`",
`"location`": `"$Region`",
`"properties`": {
`"name`": `"$ANFAccount`"
}
} "
$api_version = "2020-02-01"
$response = Invoke-RestMethod -Method 'PUT' -Headers $headers -Body $body -Uri "https://management.azure.com/subscriptions/$SubID/resourceGroups/$ResourceGroup/providers/Microsoft.NetApp/netAppAccounts/$ANFAccount`?api-version=$api_version"
$response.properties.provisioningState
While ($response.properties.provisioningState -notmatch "Succeeded") {
$response.properties.provisioningState
sleep 5
$response = Invoke-RestMethod -Method ‘GET’ -Headers $headers -Uri "https://management.azure.com/subscriptions/$SubID/resourceGroups/$ResourceGroup/providers/Microsoft.NetApp/netAppAccounts/$ANFAccount`?api-version=$api_version"
}
" ** Creating Capacity Pool $ANFCapacityPool *************"
$body = "{
`"location`": `"$Region`",
`"properties`": {
`"size`": " + 4TB + ",
`"serviceLevel`": `"Standard`"
}
}"
$api_version = "2020-02-01"
$response = Invoke-RestMethod -Method 'PUT' -Headers $headers -Body $body -Uri "https://management.azure.com/subscriptions/$SubID/resourceGroups/$ResourceGroup/providers/Microsoft.NetApp/netAppAccounts/$ANFAccount/capacityPools/$ANFCapacityPool`?api-version=$api_version"
$response.properties.provisioningState
While ($response.properties.provisioningState -notmatch "Succeeded") {
$response.properties.provisioningState
sleep 5
$response = Invoke-RestMethod -Method ‘GET’ -Headers $headers -Uri "https://management.azure.com/subscriptions/$SubID/resourceGroups/$ResourceGroup/providers/Microsoft.NetApp/netAppAccounts/$ANFAccount`?api-version=$api_version"
}
" ** Creating ANF Volume $ANFVolume *************"
$body = "{
`"name`": `"$ANFVolume`",
`"type`": `"Microsoft.NetApp/netAppAccounts/capacityPools/volumes`",
`"location`": `"$Region`",
`"properties`": {
`"serviceLevel`": `"$ANFServicelevel`",
`"usageThreshold`": `"$ANFVolumesize`",
`"creationToken`": `"$ANFVolumeShareName`",
`"snapshotId`": `"`",
`"subnetId`": `"$ANFSubnetID`"
}
}"
$api_version = "2020-02-01"
$response = Invoke-RestMethod -Method 'PUT' -Headers $headers -Body $body -Uri "https://management.azure.com/subscriptions/$SubID/resourceGroups/$ResourceGroup/providers/Microsoft.NetApp/netAppAccounts/$ANFAccount/capacityPools/$ANFCapacityPool/volumes/$ANFVolume`?api-version=$api_version"
While ($response.properties.provisioningState -notmatch "Succeeded") {
$response.properties.provisioningState
sleep 15
$response = Invoke-RestMethod -Method ‘GET’ -Headers $headers -Uri "https://management.azure.com/subscriptions/$SubID/resourceGroups/$ResourceGroup/providers/Microsoft.NetApp/netAppAccounts/$ANFAccount/capacityPools/$ANFCapacityPool/volumes/$ANFVolume`?api-version=$api_version"
}
$Volume = $response
$FileSystemID = $response.properties.fileSystemId
" ** Creating ANF Volume Snapshot $ANFSnapshot *************"
$body = "{
`"name`": `"$ANFAccount/$ANFCapacityPool/$ANFVolume/$ANFSnapshot`",
`"type`": `"Microsoft.NetApp/netAppAccounts/capacityPools/Volumes/Snapshots`",
`"location`": `"$Region`",
`"properties`": {
`"name`": `"$ANFSnapshot`",
`"fileSystemId`": `"$FileSystemID`"
}
}"
$api_version = '2020-02-01'
$response = Invoke-RestMethod -Method 'PUT' -Headers $headers -Body $body -Uri "https://management.azure.com/subscriptions/$SubID/resourceGroups/$ResourceGroup/providers/Microsoft.NetApp/netAppAccounts/$ANFAccount/capacityPools/$ANFCapacityPool/volumes/$ANFVolume/Snapshots/$ANFSnapshot`?api-version=$api_version"
While ($response.properties.provisioningState -notmatch "Succeeded") {
$response.properties.provisioningState
sleep 5
$response = Invoke-RestMethod -Method ‘GET’ -Headers $headers -Uri "https://management.azure.com/subscriptions/$SubID/resourceGroups/$ResourceGroup/providers/Microsoft.NetApp/netAppAccounts/$ANFAccount/capacityPools/$ANFCapacityPool/volumes/$ANFVolume/Snapshots/$ANFSnapshot`?api-version=$api_version"
}