Programowe wdrażanie produktów z witryny Marketplace
W tym artykule wyjaśniono, jak używać interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell i programu Terraform do wdrażania zasobów produktów z witryny Marketplace na platformie Azure.
Warunki wstępne
Musisz zainstalować program Azure PowerShell i nawiązać połączenie z platformą Azure:
Zainstaluj polecenia cmdlet programu Azure PowerShell na komputerze lokalnym. Aby uzyskać więcej informacji, zobacz Rozpoczynanie pracy z programem Azure PowerShell.
Połącz z Azure za pomocąConnect-AZAccount.
Jeśli masz wiele subskrypcji platformy Azure, może być również konieczne uruchomienie Set-AzContext.
Aby uzyskać więcej informacji, zobacz Użyj wielu subskrypcji Azure.
Polecenia wdrażania zostały zmienione w interfejsie wiersza polecenia platformy Azure w wersji 2.2.0. Przykłady w tym artykule wymagają Azure CLI w wersji 2.20.0 lub nowszej.
Aby uruchomić ten przykład, zainstaluj najnowszą wersję Azure CLI . Aby zacząć, uruchom
az login
aby utworzyć połączenie z platformą Azure.
Jak znaleźć identyfikatory produktów platformy Marketplace dla wydawcy, oferty i planu
Aby programowo wdrożyć produkt marketplace, należy najpierw uzyskać unikatowe identyfikatory produktu Marketplace.
Aby znaleźć unikatowe identyfikatory:
Otwórz Azure Portal i przejdź do sekcji Marketplace.
Wyszukaj produkt Marketplace, który chcesz wdrożyć
Otwórz stronę szczegółów produktu, wybierając nazwę produktu.
Przejdź do karty Informacje o użyciu i obsługa techniczna. W obszarze Informacje o użyciu zostanie wyświetlony identyfikator wydawcy, identyfikator produktu i identyfikator planu.
Notatka
W niektórych interfejsach API identyfikator produktu jest również nazywany identyfikatorem oferty, a identyfikator planu jest również nazywany identyfikatorem jednostki SKU.
Maszyna wirtualna z witryny Azure Marketplace
Aby wdrożyć maszyny wirtualne innych firm z witryny Azure Marketplace, musisz najpierw zaakceptować umowę licencyjną użytkownika końcowego (EULA) dla wdrażanego obrazu maszyny wirtualnej. Po zaakceptowaniu umowy LICENCYJNEj raz w subskrypcji platformy Azure powinno być możliwe ponowne wdrożenie tej samej oferty maszyny wirtualnej bez konieczności ponownego akceptowania warunków. Jeśli wdrażasz maszynę wirtualną z witryny Azure Portal, warunki zostaną tam zaakceptowane. Jednak kiedy wdrażasz programistycznie, musisz zaakceptować warunki przy użyciu az vm image terms accept --publisher X --offer Y --plan Z
lub ARM.
Jeśli warunki nie zostały jeszcze zaakceptowane, zostanie wyświetlony następujący błąd:
Code : MarketplacePurchaseEligibilityFailed
Message: Marketplace purchase eligibility check returned errors. See inner errors for details
Details: Offer with PublisherId: '<PublisherId>', OfferId: '<OfferId>' cannot be purchased due to validation errors. For more information see details. Correlation Id: 'aaaa0000-bb11-2222-33cc-444444dddddd' You have not accepted the legal terms on this subscription: 'aaaa0000-bb11-2222-33cc-444444dddddd' for this plan. Before the subscription can be used, you need to accept the legal terms of the image. To read and accept legal terms, use the Azure CLI commands described at https://go.microsoft.com/fwlink/?linkid=2110637 or the PowerShell commands available at https://go.microsoft.com/fwlink/?linkid=862451. Alternatively, deploying via the Azure portal provides a UI experience for reading and accepting the legal terms.
Wdrażanie maszyny wirtualnej z witryny Azure Marketplace przy użyciu interfejsu wiersza polecenia platformy Azure
Po zaakceptowaniu warunków możesz wdrożyć VM przy użyciu standardowych metod, takich jak szablon ARM/Bicep, Azure CLI, Terraform itp.
Aby dowiedzieć się więcej na temat znajdowania obrazów maszyn wirtualnych, akceptowania warunków i wdrażania maszyny wirtualnej przy użyciu interfejsu wiersza polecenia, zobacz Znajdź i użyj informacji o planie zakupu z platformy handlowej przy użyciu interfejsu wiersza polecenia.
Wdrażanie maszyny wirtualnej z witryny Azure Marketplace przy użyciu programu Terraform
Instrukcje dotyczące wdrażania maszyn wirtualnych przy użyciu programu Terraform dla maszyn wirtualnych z systemem z systemem Windows lub maszyny wirtualnej z systemem Linux.
Aby użyć Terraform do wdrożenia maszyn wirtualnych Marketplace, należy wykonać następujące czynności:
Zaakceptuj prawne warunki dotyczące produktu wirtualnej maszyny, używając azurerm_marketplace_agreement
Określ blok
plan
w dostawcy azurerm_virtual_machine
Notatka
Jeśli blok planu nie zostanie określony, wdrożenie zakończy się niepowodzeniem z powodu następującego błędu:
Code: VMMarketplaceInvalidInput
Message: Creating a virtual machine from Marketplace image or a custom image sourced from a Marketplace image requires Plan information in the request. VM: '/subscriptions/<Subscription ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM
Notatka
azurerm_marketplace_agreement jest traktowany jako zasób programu Terraform, dlatego przy pierwszym utworzeniu określonego produktu maszyny wirtualnej w Marketplace tworzony jest unikatowy zasób, aby pokazać, że warunki prawne zostały zaakceptowane. Jednak przy następnej próbie wdrożenia innej maszyny wirtualnej (z tym samym identyfikatorem wydawcy i identyfikatorem oferty) w ramach tej samej subskrypcji platformy Azure wystąpi błąd:
A resource with the ID "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e /providers/Microsoft.MarketplaceOrdering/agreements/<Publisher ID>/offers/<Product ID>/plans/<Plan ID>" already exists - to be managed via Terraform this resource needs to be imported into the State. Please see the resource documentation for "azurerm_marketplace_agreement" for more information
Należy uruchomić Terraform state list
, aby sprawdzić, czy masz stan zasobu azurerm_marketplace_agreement, a jeśli nie, musisz importować stan zasobu do stanu narzędzia Terraform.
terraform import azurerm_marketplace_agreement.<TerraformResourceName> /subscriptions/<AzureSubscriptionId>/providers/Microsoft.MarketplaceOrdering/agreements/<Publisher ID>/offers/<Product ID>/plans/<Plan ID>
Oferta SaaS w witrynie Azure Marketplace
Oferty SaaS są zwykle wdrażane przez klientów za pośrednictwem witryny Azure Portal. Po wdrożeniu oferty SaaS przy użyciu witryny Azure Portal klient używa przycisku "Konfiguruj konto teraz", aby odwiedzić stronę docelową niezależnego dostawcy oprogramowania SaaS i zakończyć konfigurowanie oferty SaaS. Po skonfigurowaniu oferty, niezależny dostawca oprogramowania SaaS aktywuje ją za pomocą interfejsu API SaaS Fulfillment.
Podczas wdrażania oferty SaaS za pośrednictwem portalu Azure tworzy się szablon ARM i przypisuje określone wartości parametrów dla wdrożenia. Jednym z parametrów jest termId, który identyfikuje termin subskrypcji oferty. Wartość termId nie jest statyczna, ale zależy od konfiguracji oferty i czasu wdrożenia. W związku z tym nie można użyć stałej wartości dla identyfikatora termId w szablonie usługi ARM. Zamiast tego należy znaleźć bieżącą wartość termId, wykonując następujące kroki:
- Ręczne wdrażanie oferty za pośrednictwem witryny Azure Portal.
- Przejdź do grupy zasobów, w której jest wdrażana oferta.
- Wybierz nazwę wdrożenia w sekcji Wdrożenia.
- Wyświetl parametry wejściowe i skopiuj wartość termId.
Jeśli dana oferta SaaS nigdy nie została wdrożona w subskrypcji platformy Azure, wdrożenie programowe kończy się niepowodzeniem z powodu błędu podobnego do następującego:
code: DeploymentFailed
message: At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage
Details: Failed to process eligibility check with error Purchase has failed due to signature verification on Marketplace legal agreement. Please retry. If error persists use different Azure subscription, or contact support with correlation-id 'aaaa0000-bb11-2222-33cc-444444dddddd' and this error message
Wdrażanie oferty SaaS przy użyciu szablonu usługi ARM i interfejsu wiersza polecenia platformy Azure
Zobacz przykładowy szablon ARM.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"name": {
"type": "string"
},
"planId": {
"type": "string"
},
"offerId": {
"type": "string"
},
"publisherId": {
"type": "string"
},
"quantity": {
"type": "int"
},
"termId": {
"type": "string"
},
"azureSubscriptionId": {
"type": "string"
},
"publisherTestEnvironment": {
"type": "string",
"defaultValue": ""
},
"autoRenew": {
"type": "bool"
}
},
"resources": [
{
"type": "Microsoft.SaaS/resources",
"apiVersion": "2018-03-01-beta",
"name": "[parameters('name')]",
"location": "global",
"properties": {
"saasResourceName": "[parameters('name')]",
"publisherId": "[parameters('publisherId')]",
"SKUId": "[parameters('planId')]",
"offerId": "[parameters('offerId')]",
"quantity": "[parameters('quantity')]",
"termId": "[parameters('termId')]",
"autoRenew": "[parameters('autoRenew')]",
"paymentChannelType": "SubscriptionDelegated",
"paymentChannelMetadata": {
"AzureSubscriptionId": "[parameters('azureSubscriptionId')]"
},
"publisherTestEnvironment": "[parameters('publisherTestEnvironment')]",
"storeFront": "AzurePortal"
}
}
]
}
- Zapisz powyższe jako
SaaS-ARM.json
- Uruchom następujące polecenia:
az group create --resource-group <ResourceGroupName> --location <Location>
az deployment group create --resource-group <Resource Group Name> --template-file ./SaaS-ARM.json --parameters name=<SaaS Resource Name> publisherId=<Publisher ID> offerId=<Product ID> planId=<Plan ID> termId=<termId> quantity=1 azureSubscriptionId=11111111-1111-1111-1111-11111111 autoRenew=true
Po udostępnieniu zasobu oferty SaaS można wywołać następujący interfejs API ARM, aby wyświetlić jego właściwości.
az rest --method get --uri /subscriptions/<AzureSubscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.SaaS/resources/<SaaS Resource Name>?api-version=2018-03-01-beta -o json
Teraz możesz wykonać wywołanie POST
, aby uzyskać token witryny Marketplace i adres URL strony docelowej. Ten adres URL może służyć do przeglądania strony docelowej niezależnego dostawcy oprogramowania SaaS w celu zakończenia konfigurowania i aktywowania oferty SaaS.
az rest --method post --uri /subscriptions/<AzureSubscriptionId>/resourceGroups/<ResourceGroupName> /providers/Microsoft.SaaS/resources/<SaaS Resource Name>/listAccessToken?api-version=2018-03-01-beta -o json
Więcej informacji można znaleźć tutaj - specyfikacja dostawcy zasobów Microsoft.SaaS .
Wdrażanie oferty SaaS z witryny Azure Marketplace przy użyciu programu Terraform
Zapoznaj się z sekcją powyżej opisującą sposób wdrażania oferty SaaS przy użyciu usługi ARM, ponieważ wdrożenie narzędzia Terraform będzie używać tego samego, co przy użyciu szablonu usługi ARM.
Aplikacja platformy Azure z witryny Azure Marketplace
Typ produktu aplikacji Azure to wyjątkowa oferta, która umożliwia wydawcy utworzenie szablonu ARM zawierającego zestaw zasobów Azure oraz produktów Marketplace, które są połączone i skonfigurowane w celu zapewnienia w pełni funkcjonalnych aplikacji wielozasobowych. Aplikacja Azure ma trzy typy planu.
- Szablon rozwiązania — darmowe rozwiązanie, wdrożenie szablonu ARM.
- Aplikacje zarządzane — oferta bezpłatna lub płatna, która tworzy typ zasobu Microsoft.Solutions/applications
Portal Azure generuje szablon ARM dla wdrożenia aplikacji Azure (aplikacji zarządzanej). Ten szablon usługi ARM tworzy zasób typu Microsoft.Solutions/applications
, który wskazuje określony plan i przekazuje parametry specyficzne dla aplikacji z pól interfejsu użytkownika wypełnianych przez klienta w witrynie Azure Portal.
Akceptowanie terminów aplikacji zarządzanej platformy Azure
Podobnie jak w przypadku oferty maszyny wirtualnej, aby programowo wdrożyć aplikację platformy Azure (aplikację zarządzaną) przy użyciu szablonu ARM w subskrypcji platformy Azure, subskrypcja musi zaakceptować warunki planu aplikacji zarządzanej platformy Azure. Po wdrożeniu za pośrednictwem portalu Azure akceptacja warunków następuje niejawnie, a późniejsze programowe wdrożenia tego samego planu w tej samej subskrypcji platformy Azure przebiegają bez problemów.
Istnieje również możliwość zaakceptowania warunków oferty aplikacji platformy Azure (aplikacji zarządzanej) przy użyciu tej samej az vm image terms accept
, jak opisano powyżej w sekcji maszyny wirtualnej.
Jeśli produkt aplikacji platformy Azure (aplikacja zarządzana) jest płatnym produktem (na przykład korzysta z rozliczeń miesięcznych lub mierzonych), subskrypcja platformy Azure używana do jej wdrożenia musi być skojarzona z prawidłową formą płatności (na przykład nie może być bezpłatną lub sponsorowaną subskrypcją).
Wdrażanie aplikacji platformy Azure (aplikacji zarządzanej) przy użyciu szablonu usługi ARM i interfejsu wiersza polecenia platformy Azure
Poniżej znajduje się przykład szablonu ARM na potrzeby wdrażania zarządzanej aplikacji.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"allowedValues": [
"westus2",
"westeurope",
"eastus",
"northeurope",
"centralus",
"eastus2",
"francecentral",
"uksouth"
]
},
"applicationResourceName": {
"type": "string"
},
"managedResourceGroupId": {
"type": "string",
"defaultValue": ""
},
"managedIdentity": {
"type": "object",
"defaultValue": {}
},
"initialConsulVersion": {
"type": "string",
"defaultValue": "v1.11.2"
},
"storageAccountName": {
"type": "string",
"defaultValue": "[concat('storage', uniqueString(resourceGroup().id, deployment().name))]"
},
"blobContainerName": {
"type": "string",
"defaultValue": "[concat('blob', uniqueString(resourceGroup().id, deployment().name))]"
},
"identityName": {
"type": "string",
"defaultValue": "[concat(parameters('clusterName'), '-identity')]"
},
"clusterMode": {
"type": "string",
"defaultValue": "PRODUCTION",
"allowedValues": [
"PRODUCTION",
"DEVELOPMENT"
]
},
"clusterName": {
"type": "string",
"defaultValue": "cluster"
},
"consulDataCenter": {
"type": "string",
"defaultValue": "dc1"
},
"numServers": {
"type": "string",
"defaultValue": "3"
},
"numServersDevelopment": {
"type": "string",
"defaultValue": "1"
},
"automaticUpgrades": {
"type": "string",
"defaultValue": "disabled"
},
"consulConnect": {
"type": "string",
"defaultValue": "enabled"
},
"externalEndpoint": {
"type": "string",
"defaultValue": "enabled"
},
"snapshotInterval": {
"type": "string",
"defaultValue": "1d"
},
"snapshotRetention": {
"type": "string",
"defaultValue": "1m"
},
"consulVnetCidr": {
"type": "string",
"defaultValue": "172.25.16.0/24"
},
"providerBaseURL": {
"defaultValue": "https://ama-api.hashicorp.cloud/consulama/2021-04-23",
"type": "String",
"metadata": {
"description": "The URI of the custom provider API"
}
},
"email": {
"type": "string"
},
"federationToken": {
"type": "string",
"defaultValue": ""
},
"sourceChannel": {
"type": "string",
"defaultValue": "azure-portal"
},
"auditLoggingEnabled": {
"type": "string",
"defaultValue": "disabled",
"allowedValues": [
"enabled",
"disabled"
]
},
"auditLogStorageContainerURL": {
"type": "string",
"defaultValue": ""
}
},
"variables": {
},
"resources": [
{
"type": "Microsoft.Solutions/applications",
"apiVersion": "2017-09-01",
"name": "[parameters('applicationResourceName')]",
"location": "[parameters('location')]",
"kind": "MarketPlace",
"identity": "[if(empty(parameters('managedIdentity')),json('null'),parameters('managedIdentity'))]",
"plan": {
"name": "<Plan ID>",
"product": "<Product ID>",
"publisher": "<Publisher ID>",
"version": "<Version>"
},
"properties": {
"managedResourceGroupId": "[parameters('managedResourceGroupId')]",
"parameters": {
"initialConsulVersion": {
"value": "[parameters('initialConsulVersion')]"
},
"storageAccountName": {
"value": "[parameters('storageAccountName')]"
},
"blobContainerName": {
"value": "[parameters('blobContainerName')]"
},
"identityName": {
"value": "[parameters('identityName')]"
},
"clusterMode": {
"value": "[parameters('clusterMode')]"
},
"clusterName": {
"value": "[parameters('clusterName')]"
},
"consulDataCenter": {
"value": "[parameters('consulDataCenter')]"
},
"numServers": {
"value": "[parameters('numServers')]"
},
"numServersDevelopment": {
"value": "[parameters('numServersDevelopment')]"
},
"automaticUpgrades": {
"value": "[parameters('automaticUpgrades')]"
},
"consulConnect": {
"value": "[parameters('consulConnect')]"
},
"externalEndpoint": {
"value": "[parameters('externalEndpoint')]"
},
"snapshotInterval": {
"value": "[parameters('snapshotInterval')]"
},
"snapshotRetention": {
"value": "[parameters('snapshotRetention')]"
},
"consulVnetCidr": {
"value": "[parameters('consulVnetCidr')]"
},
"location": {
"value": "[parameters('location')]"
},
"providerBaseURL": {
"value": "[parameters('providerBaseURL')]"
},
"email": {
"value": "[parameters('email')]"
},
"federationToken": {
"value": "[parameters('federationToken')]"
},
"sourceChannel": {
"value": "[parameters('sourceChannel')]"
},
"auditLoggingEnabled": {
"value": "[parameters('auditLoggingEnabled')]"
},
"auditLogStorageContainerURL": {
"value": "[parameters('auditLogStorageContainerURL')]"
}
},
"jitAccessPolicy": null
}
}
]
}
Następnie uruchom następujące polecenia:
az group create --resource-group <Resource Group Name> --location <location>
az deployment group create --resource-group avmanagedapp100 --template-file <ARM Template JSON file> --parameters location=<location> applicationResourceName=<Resource Group Name> managedResourceGroupId=/subscriptions/<Subscription ID>/resourceGroups/<Resource Group Name> email=<email address>
Wdrażanie aplikacji zarządzanej platformy Azure z witryny Azure Marketplace przy użyciu narzędzia Terraform
Zapoznaj się z sekcją powyżej opisującą sposób wdrażania oferty aplikacji zarządzanej platformy Azure przy użyciu usługi ARM, ponieważ wdrożenie narzędzia Terraform będzie używać tego samego szablonu usługi ARM.
Szablon rozwiązania z witryny Azure Marketplace
Podczas wdrażania szablonu rozwiązania (a nie aplikacji zarządzanej platformy Azure) z witryny Azure Marketplace, wdrożenie to po prostu szablon ARM opublikowany przez niezależnego dostawcę oprogramowania, z odpowiednimi polami interfejsu użytkownika przekazanymi jako parametry. Aby programowo wdrożyć ofertę szablonu rozwiązania, użyj witryny Azure Portal, aby wykonać wdrożenie, skopiować szablon usługi ARM i użyć go w kolejnych wdrożeniach. Ponieważ szablony rozwiązań nie są ofertami "płatnymi", nie ma specjalnych warunków, które należy zaakceptować. Jeśli jednak szablon ARM rozwiązania odwołuje się do obrazu maszyny wirtualnej z Azure Marketplace, musisz najpierw zaakceptować warunki oferty maszyny wirtualnej zgodnie z opisem dla oferty maszyny wirtualnej.