Programové nasazení produktů Marketplace
Tento článek vysvětluje, jak pomocí Azure CLI, Azure PowerShellu a Terraformu nasadit prostředky produktů Marketplace do Azure.
Požadavky
Musíte nainstalovat Azure PowerShell a připojit se k Azure:
Nainstalujte rutiny Azure PowerShellu do místního počítače. Další informace najdete v tématu Začínáme s azure PowerShellem.
Připojit k Azure pomocíConnect-AZAccount.
Pokud máte více předplatných Azure, možná budete muset spustit Set-AzContext.
Další informace najdete v tématu Použití více předplatných Azure.
Příkazy nasazení se změnily v Azure CLI verze 2.2.0. Příklady v tomto článku vyžadují Azure CLI verze 2.20.0 nebo novější.
Pokud chcete spustit tuto ukázku, nainstalujte nejnovější verzi Azure CLI. Pro spuštění spusťte
az login
vytvořit připojení k Azure.
Jak najít identifikátory produktů Marketplace pro vydavatele, nabídku a plán
Pokud chcete produkt Marketplace nasadit prostřednictvím kódu programu, musíte nejprve získat jedinečné identifikátory produktu Marketplace.
Vyhledání jedinečných identifikátorů:
Otevřete Azure Portal a přejděte do prostředí Marketplace.
Vyhledejte produkt Marketplace, který chcete nasadit.
Výběrem názvu produktu otevřete stránku s podrobnostmi o produktu.
Přejděte na kartu Informace o využití a podpora. V informacích o využití se zobrazí ID vydavatele, ID produktu a ID plánu.
Poznámka
V některých rozhraních API se ID produktu označuje také jako ID nabídky a ID plánu se také označuje jako ID skladové položky.
Virtuální počítač z Azure Marketplace
Pokud chcete nasadit virtuální počítače třetích stran z Azure Marketplace, musíte nejprve přijmout licenční smlouvu s koncovým uživatelem (EULA) pro nasazenou image virtuálního počítače. Po přijetí smlouvy EULA v rámci předplatného Azure byste měli být schopni znovu nasadit stejnou nabídku virtuálního počítače, aniž byste museli podmínky znovu přijmout. Pokud nasazujete virtuální počítač z webu Azure Portal, jsou tam přijaty podmínky. Pokud ale nasadíte programově, musíte podmínky přijmout pomocí az vm image terms accept --publisher X --offer Y --plan Z
nebo pomocí ARM.
Pokud termíny ještě nejsou přijaty, zobrazí se následující chyba:
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.
Nasazení virtuálního počítače z Azure Marketplace pomocí Azure CLI
Po přijetí podmínek můžete virtuální počítač nasadit pomocí běžných metod, jako je šablona ARM/Bicep, Azure CLI, Terraform atd.
Další informace o vyhledávání imagí virtuálních počítačů, přijímání podmínek a nasazení virtuálních počítačů pomocí rozhraní příkazového řádku naleznete v části Vyhledání a použití informací o nákupním plánu marketplace pomocí rozhraní příkazového řádku.
Nasazení virtuálního počítače z Azure Marketplace pomocí Terraformu
Pokyny k nasazení virtuálních počítačů pomocí Terraformu pro virtuální počítač s Windows nebo virtuálního počítače s Linuxem.
Pokud chcete k nasazení virtuálních počítačů Marketplace použít Terraform, musíte provést následující akce:
Přijměte právní podmínky produktu VM pomocí azurerm_marketplace_agreement
Zadejte blok
plan
v poskytovateli azurerm_virtual_machine.
Poznámka
Pokud není zadaný blok plánu, nasazení selže s následující chybou:
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
Poznámka
azurerm_marketplace_agreement se považuje za zdroj Terraformu, proto při prvním vytvoření konkrétního produktu virtuálního počítače z Marketplace se vytvoří jedinečný zdroj, který dokládá přijetí právních podmínek. Při příštím pokusu o nasazení jiného virtuálního počítače (se stejným ID vydavatele a ID nabídky) ve stejném předplatném Azure se ale zobrazí chyba:
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
Musíte spustit Terraform state list
, abyste zjistili, jestli máte stav prostředku azurerm_marketplace_agreement, a pokud ne, musíte ho importovat do stavu Terraformu.
terraform import azurerm_marketplace_agreement.<TerraformResourceName> /subscriptions/<AzureSubscriptionId>/providers/Microsoft.MarketplaceOrdering/agreements/<Publisher ID>/offers/<Product ID>/plans/<Plan ID>
Nabídka SaaS z Azure Marketplace
Nabídky SaaS obvykle nasazují zákazníci prostřednictvím webu Azure Portal. Jakmile se nabídka SaaS nasadí pomocí webu Azure Portal, zákazník pomocí tlačítka Konfigurovat účet teď navštíví cílovou stránku isV SaaS a dokončí konfiguraci nabídky SaaS. Po nakonfigurování nabídky ji ISV SaaS aktivuje pomocí rozhraní API pro plnění SaaS.
Když nasadíte nabídku SaaS prostřednictvím webu Azure Portal, vytvoří šablonu ARM a přiřadí konkrétní hodnoty parametrů pro nasazení. Jedním z parametrů je termId, který identifikuje období předplatného nabídky. Hodnota termId není statická, ale závisí na konfiguraci nabídky a době nasazení. Proto v šabloně ARM nemůžete použít pevnou hodnotu pro termId. Místo toho je potřeba zjistit aktuální hodnotu termId pomocí následujícího postupu:
- Nabídku nasaďte ručně prostřednictvím webu Azure Portal.
- Přejděte do skupiny prostředků, ve které je nabídka nasazená.
- V části Nasazení vyberte název nasazení.
- Prohlédněte si vstupní parametry a zkopírujte hodnotu termId.
Pokud se daná nabídka SaaS nikdy nenasadila v předplatném Azure, programové nasazení selže s chybou podobná této:
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
Nasazení nabídky SaaS pomocí šablony ARM a Azure CLI
Podívejte se na ukázku šablony 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"
}
}
]
}
- Uložte to jako
SaaS-ARM.json
- Spusťte následující příkazy:
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 zřízení prostředku nabídky SaaS můžete vyvolat následující rozhraní API ARM a zobrazit jeho vlastnosti:
az rest --method get --uri /subscriptions/<AzureSubscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.SaaS/resources/<SaaS Resource Name>?api-version=2018-03-01-beta -o json
Nyní můžete provést volání na POST
, abyste získali token pro marketplace a URL adresu cílové stránky. Tuto URL adresu můžete použít k prohlížení vstupní stránky SaaS ISV a dokončení konfigurace a aktivace nabídky 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
Další informace najdete zde – specifikace poskytovatele služeb Microsoft.SaaS.
Nasazení nabídky SaaS z Azure Marketplace pomocí Terraformu
Projděte si výše uvedenou část popisující, jak nasadit nabídku SaaS pomocí ARM, protože k nasazení Terraformu se použije stejný postup jako při použití šablony ARM.
Aplikace Azure z Azure Marketplace
Typ produktu aplikace Azure je jedinečná nabídka, která vydavateli umožňuje vytvořit šablonu ARM, která obsahuje sadu prostředků Azure a produktů Marketplace, které jsou sbalené a nakonfigurované tak, aby poskytovaly plně funkční aplikace s více prostředky, má aplikace Azure tři typy plánu:
- Šablona řešení – bezplatná nabídka, nasazení šablony ARM
- Spravované aplikace – bezplatná nebo placená nabídka, vytvoří prostředek typu Microsoft.Solutions/applications
Azure Portal vygeneruje šablonu ARM pro nasazení aplikace Azure (spravovaná aplikace). Tato šablona ARM vytvoří prostředek typu Microsoft.Solutions/applications
, který odkazuje na konkrétní plán a předává parametry specifické pro aplikaci z polí uživatelského rozhraní, která zákazník vyplní na webu Azure Portal.
Přijetí podmínek spravovaných aplikací Azure
Podobně jako v nabídce virtuálních počítačů, k programovému nasazení aplikace Azure (spravované aplikace) pomocí šablony ARM do předplatného Azure, musí předplatné přijmout podmínky plánu pro tuto spravovanou aplikaci Azure. Při nasazení prostřednictvím Azure portálu dochází k implicitnímu přijetí podmínek a následná programová nasazení stejného plánu ve stejném předplatném Azure probíhají bez problémů.
Podmínky nabídky aplikace Azure (spravované aplikace) je také možné přijmout pomocí stejného az vm image terms accept
, jak je popsáno výše v části virtuálních počítačů.
Pokud je produkt aplikace Azure (spravovaná aplikace) placeným produktem (například používá měsíční nebo účtovanou fakturaci), musí být předplatné Azure, které používáte k nasazení, přidružené k platnému způsobu platby (například nejde o bezplatné nebo sponzorované předplatné).
Nasazení aplikace Azure (spravovaná aplikace) pomocí šablony ARM a Azure CLI
Níže je příklad šablony ARM pro nasazení spravované aplikace.
{
"$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
}
}
]
}
Pak spusťte následující příkazy:
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>
Nasazení spravované aplikace Azure z Azure Marketplace pomocí Terraformu
Projděte si výše uvedenou část s popisem nasazení nabídky spravované aplikace Azure pomocí ARM, protože nasazení Terraformu by používalo stejnou šablonu ARM.
Šablona řešení z Azure Marketplace
Při nasazování nabídek šablony řešení (ne spravovaná aplikace Azure) z Azure Marketplace je nasazení jednoduše šablona ARM, kterou ISV publikoval a odpovídající pole uživatelského rozhraní jsou předána jako parametry. Pokud chcete nasadit nabídku šablon řešení prostřednictvím kódu programu, pomocí webu Azure Portal proveďte nasazení, zkopírujte šablonu ARM a použijte ji v následných nasazeních. Vzhledem k tomu, že šablony řešení nejsou placené nabídky, nejsou k dispozici žádné zvláštní podmínky, které je potřeba přijmout. Pokud však ARM šablona řešení odkazuje na image virtuálního počítače z Azure Marketplace, musíte nejprve přijmout podmínky nabídky virtuálního počítače , jak je popsáno pro nabídku virtuálního počítače.