Marketplace-termékek programozott üzembe helyezése

Ez a cikk bemutatja, hogyan helyezhet üzembe Marketplace-termékek erőforrásait az Azure-ban az Azure CLI, az Azure PowerShell és a Terraform használatával.

Előfeltételek

Telepítenie kell az Azure PowerShellt, és csatlakoznia kell az Azure-hoz:

Az üzembehelyezési parancsok módosultak az Azure CLI 2.2.0-s verziójában. A cikkben szereplő példákhoz az Azure CLI 2.20.0-s vagy újabb verziója szükséges.

A minta futtatásához telepítse az Azure CLI legújabb verzióját. Első lépésként futtassa az az-bejelentkezést az Azure-ral való kapcsolat létrehozásához.

Marketplace-termékazonosítók keresése közzétevőhöz, ajánlathoz és csomaghoz

A Marketplace-termék programozott üzembe helyezéséhez először be kell szereznie egy Marketplace-termék egyedi azonosítóit.

Az egyedi azonosítók megkeresése:

  1. Nyissa meg az Azure Portalt, és lépjen a Marketplace felületére.
  2. Keresse meg az üzembe helyezni kívánt Marketplace-terméket
  3. Nyissa meg a termék részletei oldalt a terméknév kiválasztásával.
  4. Lépjen a Használati adatok + Támogatás lapra. A Használati adatok területen megjelenik a Közzétevő azonosítója, a Termékazonosító és a Csomagazonosító.

Képernyőkép a termékazonosító oldaláról.

Feljegyzés

Egyes API-kban a termékazonosítót ajánlatazonosítónak is nevezik, a csomagazonosítót pedig termékváltozat-azonosítónak is nevezik.

Virtuális gép az Azure Marketplace-ről

Ha harmadik féltől származó virtuális gépeket szeretne üzembe helyezni az Azure Marketplace-en, először el kell fogadnia a végfelhasználói licencszerződést (EULA) az üzembe helyezett virtuálisgép-rendszerképhez. Miután egyszer elfogadta az EULA-t egy Azure-előfizetésben, újra üzembe helyezheti ugyanazt a virtuálisgép-ajánlatot anélkül, hogy újra el kellene fogadnia a feltételeket. Ha a virtuális gépet az Azure Portalról telepíti, a feltételek ott lesznek elfogadva. Ha azonban programozott módon végzi el az üzembe helyezést, el kell fogadnia a feltételeket az az vm image terms accept --publisher X --offer Y --plan Z ARM használatával vagy használatával.

Ha a feltételek még nem fogadhatók el, a következő hiba jelenik meg:

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: '11111111-1111-1111-1111-111111111111' You have not accepted the legal terms on this subscription: '11111111-1111-1111-1111-111111111111' 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.

Virtuális gép üzembe helyezése az Azure Marketplace-ről az Azure CLI használatával

A feltételek elfogadása után üzembe helyezheti a virtuális gépet olyan szokásos módszerekkel, mint az ARM/Bicep-sablon, az Azure CLI, a Terraform stb.

Ha többet szeretne megtudni a virtuálisgép-rendszerképek kereséséről, a feltételek elfogadásáról és a virtuális gép parancssori felülettel való üzembe helyezéséről, olvassa el a Piactér vásárlási tervének megkeresése és használata a parancssori felület használatával című témakört.

Virtuális gép üzembe helyezése az Azure Marketplace-ről a Terraform használatával

Útmutató a Virtuális gépek Terraform for Windows vagy Linux rendszerű virtuális gépekhez való üzembe helyezéséhez.

A Terraform marketplace-beli virtuális gépek üzembe helyezéséhez a következő műveleteket kell végrehajtania:

  1. A virtuálisgép-termék jogi feltételeinek elfogadása azurerm_marketplace_agreement

  2. A blokk megadása a planazurerm_virtual_machine szolgáltatóban

Feljegyzés

Ha a tervblokk nincs megadva, az üzembe helyezés a következő hibával hiúsul meg:

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

Feljegyzés

azurerm_marketplace_agreement Terraform-erőforrásként kezelik, ezért amikor először hoz létre egy adott Marketplace virtuálisgép-terméket, egy egyedi erőforrás jön létre, amely a jogi feltételek elfogadását jelzi. Amikor azonban legközelebb megpróbál üzembe helyezni egy másik virtuális gépet (ugyanazzal a Publisher-azonosítóval és ajánlatazonosítóval) ugyanabban az Azure-előfizetésben, hibaüzenet jelenik meg:

A resource with the ID "/subscriptions/11111111-1111-1111-1111-111111111111 /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

Futtatnia Terraform state list kell annak megtekintéséhez, hogy azurerm_marketplace_agreement-e az erőforrás állapota, és ha nem, akkor importálnia kell az erőforrás állapotát a Terraform-állapotba.

terraform import azurerm_marketplace_agreement.<TerraformResourceName> /subscriptions/<AzureSubscriptionId>/providers/Microsoft.MarketplaceOrdering/agreements/<Publisher ID>/offers/<Product ID>/plans/<Plan ID>

SaaS-ajánlat az Azure Marketplace-ről

Az SaaS-ajánlatokat általában az ügyfelek az Azure Portalon keresztül helyezik üzembe. Miután az SaaS-ajánlatot üzembe helyezte az Azure Portalon, az ügyfél a "Fiók konfigurálása most" gombbal felkeresi az SaaS ISV kezdőlapját, és befejezi az SaaS-ajánlat konfigurálását. Az ajánlat konfigurálása után az SaaS ISV az SaaS Fulfillment API használatával aktiválja azt.

Amikor egy SaaS-ajánlatot az Azure Portalon keresztül helyez üzembe, az létrehoz egy ARM-sablont, és hozzárendeli az üzembe helyezéshez megadott paraméterértékeket. Az egyik paraméter a termId, amely azonosítja az ajánlat előfizetési időtartamát. A kifejezésazonosító értéke nem statikus, de az ajánlat konfigurációjától és az üzembe helyezés időpontjától függ. Ezért az ARM-sablonban nem használhat rögzített értéket a kifejezésazonosítóhoz. Ehelyett az alábbi lépések végrehajtásával kell megtudnia a kifejezésazonosító aktuális értékét:

  1. Az ajánlat manuális üzembe helyezése az Azure Portalon keresztül.
  2. Nyissa meg azt az erőforráscsoportot, amelyben az ajánlat telepítve van.
  3. Válassza ki az üzembe helyezés nevét az Üzembe helyezések szakaszban.
  4. Tekintse meg a bemeneti paramétereket, és másolja ki a termId értékét.

Ha egy adott SaaS-ajánlat soha nem lett üzembe helyezve az Azure-előfizetésben, a programozott üzembe helyezés az alábbihoz hasonló hibával meghiúsul:

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 '11111111-1111-1111-1111-111111111111' and this error message

SaaS-ajánlat üzembe helyezése ARM-sablonnal és Azure CLI-vel

Tekintse meg az ARM-példasablont.

{
    "$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"
            }
        }
    ]
}

  • Mentse a fentieket SaaS-ARM.json
  • Futtassa az alábbi parancsot:
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

Az SaaS-ajánlati erőforrás kiépítése után meghívhatja a következő ARM API-t annak tulajdonságainak megtekintéséhez:

az rest --method get --uri /subscriptions/<AzureSubscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.SaaS/resources/<SaaS Resource Name>?api-version=2018-03-01-beta -o json

Most már kezdeményezhet egy POST hívást a marketplace-jogkivonat és a kezdőlap URL-címének lekéréséhez. Ezzel az URL-címel tallózhat az SaaS ISV kezdőlapján az SaaS-ajánlat konfigurálásának és aktiválásának befejezéséhez.

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

További információk itt találhatók – a Microsoft.SaaS erőforrás-szolgáltató specifikációja.

SaaS-ajánlat üzembe helyezése az Azure Marketplace-ről a Terraform használatával

Tekintse át a fenti szakaszt, amely leírja, hogyan helyezhet üzembe SaaS-ajánlatot arm használatával, mivel a Terraform üzembe helyezése ugyanazt használná, mint az ARM-sablont.

Azure-alkalmazás az Azure Marketplace-ről

Azure-alkalmazás terméktípus egyedi ajánlat, amely lehetővé teszi a közzétevő számára, hogy hozzon létre egy ARM-sablont, amely magában foglalja az Azure-erőforrások és a Marketplace-termékek csomagban és konfigurálva, hogy teljes mértékben működőképes több erőforrás-alkalmazásokat biztosítson, Azure-alkalmazás három csomagtípussal rendelkezik:

  • Megoldássablon – ingyenes ajánlat, ARM-sablon üzembe helyezése
  • Felügyelt alkalmazások – ingyenes vagy fizetős ajánlat, létrehoz egy Microsoft.Solutions/applications erőforrástípust

Az Azure Portal létrehoz egy ARM-sablont Azure-alkalmazás (felügyelt alkalmazás) üzembe helyezéséhez. Ez az ARM-sablon létrehoz egy olyan típusú Microsoft.Solutions/applications erőforrást, amely egy adott tervre mutat, és az ügyfél által az Azure Portalon kitöltött felhasználói felületi mezők alkalmazásspecifikus paramétereit adja át.

Az Azure Managed App feltételeinek elfogadása

A virtuálisgép-ajánlathoz hasonlóan ahhoz, hogy az ARM-sablont használó Azure-alkalmazás (felügyelt alkalmazás) programozott módon üzembe helyezhesse egy Azure-előfizetésben, az előfizetésnek el kell fogadnia az Azure Managed App csomagjának feltételeit. Az Azure Portalon keresztül történő üzembe helyezés esetén a feltételek elfogadása implicit módon történik, és ugyanazon csomag későbbi programozott üzembe helyezései ugyanabban az Azure-előfizetésben problémamentesen működnek.

Egy Azure-alkalmazás (felügyelt alkalmazás) ajánlat feltételeit is elfogadhatja a az vm image terms accept virtuálisgép-szakaszban leírtak szerint.

Ha a Azure-alkalmazás (felügyelt alkalmazás) termék fizetős termék (például havi vagy forgalmi díjas számlázást használ), az üzembe helyezéshez használt Azure-előfizetést érvényes fizetési móddal kell társítani (például nem lehet ingyenes vagy szponzorált előfizetés).

Azure-alkalmazás (felügyelt alkalmazás) üzembe helyezése ARM-sablonnal és Azure CLI-vel

Az alábbiakban egy ARM-sablont láthat a felügyelt alkalmazás üzembe helyezéséhez.

{
    "$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
            }
        }
    ]
}

Ezután futtassa le a következő parancsokat:

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>

Azure Managed App üzembe helyezése az Azure Marketplace-ről a Terraform használatával

Tekintse át a fenti szakaszt, amely leírja, hogyan helyezhet üzembe Azure Managed App-ajánlatot ARM használatával, mivel a Terraform üzembe helyezése ugyanazt az ARM-sablont használná.

Megoldássablon az Azure Marketplace-ről

A megoldássablonok (nem az Azure Managed App) Azure Marketplace-ről való üzembe helyezésekor az üzembe helyezés egyszerűen az ARM-sablon, amelyet az ISV a megfelelő, paraméterekként átadott felhasználói felületi mezőkkel tett közzé. A megoldássablon-ajánlat programozott üzembe helyezéséhez használja az Azure Portalt az üzembe helyezéshez, másolja ki az ARM-sablont, és használja azt a későbbi üzembe helyezések során. Mivel a megoldássablonok nem "fizetős" ajánlatok, nincsenek olyan speciális feltételek, amelyeket el kell fogadni. Ha azonban a megoldássablon ARM-sablonja az Azure Marketplace-ről származó virtuálisgép-rendszerképre hivatkozik, először el kell fogadnia a virtuálisgép-ajánlat feltételeit a virtuálisgép-ajánlatban leírtak szerint.

Következő lépések