Penyebaran terprogram produk Marketplace
Artikel ini menjelaskan cara menggunakan Azure CLI, Azure PowerShell, dan Terraform untuk menyebarkan sumber daya produk Marketplace ke Azure.
Prasyarat
Anda perlu menginstal Azure PowerShell dan menyambungkan ke Azure:
Instal cmdlet Azure PowerShell di komputer lokal Anda. Untuk informasi selengkapnya, lihat Mulai menggunakan Azure PowerShell.
Sambungkan ke Azure dengan menggunakan Connect-AZAccount.
Jika Anda memiliki beberapa langganan Azure, Anda mungkin juga perlu menjalankan Set-AzContext.
Untuk informasi selengkapnya, lihat Menggunakan beberapa langganan Azure.
Perintah penyebaran berubah di Azure CLI versi 2.2.0. Contoh dalam artikel ini memerlukan Azure CLI versi 2.20.0 atau yang lebih baru.
Untuk menjalankan sampel ini, instal versi terbaru Azure CLI. Untuk memulai, jalankan az sign-in untuk membuat koneksi dengan Azure.
Cara menemukan pengidentifikasi produk Marketplace untuk penerbit, penawaran, dan paket
Untuk menyebarkan produk Marketplace secara terprogram, Anda harus terlebih dahulu mendapatkan pengidentifikasi unik produk Marketplace.
Untuk menemukan pengidentifikasi unik:
- Buka portal Azure dan navigasikan ke pengalaman Marketplace.
- Cari produk Marketplace yang ingin Anda sebarkan
- Buka halaman detail produk dengan memilih nama produk.
- Navigasi ke tab Informasi Penggunaan + Dukungan . Di Informasi Penggunaan, ID Penerbit, ID Produk, dan ID Paket muncul.
Catatan
Di beberapa API, ID Produk juga dikenal sebagai ID Penawaran, dan ID Paket juga dikenal sebagai ID SKU.
Komputer Virtual dari Marketplace Azure
Untuk menyebarkan VM pihak ketiga dari Marketplace Azure, Anda harus terlebih dahulu menerima Perjanjian Lisensi Pengguna Akhir (EULA) untuk gambar VM yang sedang disebarkan. Setelah EULA diterima satu kali dalam langganan Azure, Anda harus dapat menyebarkan penawaran VM yang sama lagi tanpa perlu menerima persyaratan lagi. Jika Anda menyebarkan VM dari portal Azure, persyaratan akan diterima di sana. Namun, ketika Anda melakukan penyebaran secara terprogram, Anda perlu menerima persyaratan menggunakan az vm image terms accept --publisher X --offer Y --plan Z
atau dengan menggunakan ARM.
Jika persyaratan belum diterima, kesalahan berikut ditampilkan:
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.
Menyebarkan VM dari Marketplace Azure menggunakan Azure CLI
Setelah persyaratan diterima, Anda dapat menyebarkan VM menggunakan metode reguler seperti templat ARM/Bicep, Azure CLI, Terraform, dll.
Untuk mempelajari selengkapnya tentang menemukan gambar VM, Menerima persyaratan dan menyebarkan VM menggunakan CLI, lihat Menemukan dan menggunakan informasi paket pembelian marketplace menggunakan CLI.
Menyebarkan VM dari Marketplace Azure menggunakan Terraform
Petunjuk tentang cara menyebarkan Komputer Virtual menggunakan Terraform untuk VM Windows atau VM Linux.
Untuk menggunakan Terraform untuk menyebarkan VM Marketplace, Anda harus melakukan tindakan berikut:
Terima ketentuan hukum produk VM menggunakan azurerm_marketplace_agreement
Tentukan
plan
blok di penyedia azurerm_virtual_machine
Catatan
Jika blok paket tidak ditentukan, penyebaran akan gagal dengan kesalahan berikut:
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
Catatan
azurerm_marketplace_agreement diperlakukan sebagai sumber daya Terraform, oleh karena itu, pertama kali Anda membuat produk VM Marketplace tertentu, sumber daya unik dibuat untuk mewakili fakta bahwa persyaratan hukum diterima. Namun, saat berikutnya Anda mencoba menyebarkan VM lain (dengan ID Penerbit dan ID Penawaran yang sama) di bawah Langganan Azure yang sama, Anda akan mendapatkan kesalahan:
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
Anda perlu menjalankan Terraform state list
untuk melihat apakah Anda memiliki status sumber daya azurerm_marketplace_agreement , dan jika tidak, Anda perlu mengimpor status sumber daya ke status Terraform Anda.
terraform import azurerm_marketplace_agreement.<TerraformResourceName> /subscriptions/<AzureSubscriptionId>/providers/Microsoft.MarketplaceOrdering/agreements/<Publisher ID>/offers/<Product ID>/plans/<Plan ID>
Penawaran SaaS dari Marketplace Azure
Penawaran SaaS biasanya disebarkan oleh pelanggan melalui portal Azure. Setelah penawaran SaaS disebarkan menggunakan portal Azure, pelanggan menggunakan tombol "Konfigurasikan akun sekarang" untuk mengunjungi halaman arahan SaaS ISV dan selesai mengonfigurasi penawaran SaaS. Setelah penawaran dikonfigurasi, SAAS ISV mengaktifkannya menggunakan SaaS Fulfillment API.
Saat Anda menyebarkan penawaran SaaS melalui portal Azure, ia membuat templat ARM dan menetapkan nilai parameter tertentu untuk penyebaran. Salah satu parameternya adalah termId, yang mengidentifikasi istilah langganan untuk penawaran tersebut. Nilai termId tidak statis, tetapi tergantung pada konfigurasi penawaran dan waktu penyebaran. Oleh karena itu, Anda tidak dapat menggunakan nilai tetap untuk termId di templat ARM Anda. Sebagai gantinya, Anda perlu mencari tahu nilai termId saat ini dengan mengikuti langkah-langkah berikut:
- Sebarkan penawaran secara manual melalui portal Azure.
- Buka grup sumber daya tempat penawaran disebarkan.
- Pilih nama penyebaran di bawah bagian Penyebaran.
- Lihat parameter input dan salin nilai termId.
Jika penawaran SaaS tertentu tidak pernah disebarkan dalam langganan Azure, penyebaran terprogram gagal dengan kesalahan seperti berikut ini:
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
Menyebarkan penawaran SaaS menggunakan templat ARM dan Azure CLI
Lihat templat contoh 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"
}
}
]
}
- Simpan yang di atas sebagai
SaaS-ARM.json
- Jalankan perintah berikut:
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
Setelah sumber daya penawaran SaaS disediakan, Anda dapat memanggil ARM API berikut untuk melihat propertinya:
az rest --method get --uri /subscriptions/<AzureSubscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.SaaS/resources/<SaaS Resource Name>?api-version=2018-03-01-beta -o json
Sekarang Anda dapat melakukan POST
panggilan untuk mendapatkan token marketplace dan URL halaman arahan. URL ini dapat digunakan untuk menelusuri halaman arahan SaaS ISV untuk menyelesaikan konfigurasi dan mengaktifkan penawaran 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
Informasi selengkapnya dapat ditemukan di sini - spesifikasi penyedia sumber daya Microsoft.SaaS.
Menyebarkan penawaran SaaS dari Marketplace Azure menggunakan Terraform
Tinjau bagian di atas yang menjelaskan cara menyebarkan penawaran SaaS menggunakan ARM karena penyebaran Terraform akan menggunakan hal yang sama seperti menggunakan templat ARM.
Aplikasi Azure dari Marketplace Azure
Jenis produk Aplikasi Azure adalah penawaran unik yang memungkinkan penerbit membuat templat ARM yang mencakup sekumpulan sumber daya Azure dan produk Marketplace yang dibundel dan dikonfigurasi untuk menyediakan aplikasi multi sumber daya yang berfungsi penuh, Aplikasi Azure memiliki tiga jenis paket:
- Templat Solusi - penawaran gratis, penyebaran templat ARM
- Aplikasi Terkelola - penawaran gratis atau berbayar, membuat jenis sumber daya Microsoft.Solutions/applications
portal Azure menghasilkan templat ARM untuk penyebaran Aplikasi Azure (Aplikasi Terkelola). Templat ARM ini membuat sumber daya jenis Microsoft.Solutions/applications
yang menunjuk ke paket tertentu dan meneruskan parameter khusus aplikasi dari bidang UI yang diisi pelanggan dalam portal Azure.
Terima istilah Aplikasi Terkelola Azure
Seperti penawaran Komputer Virtual, untuk menyebarkan Aplikasi Azure (Aplikasi Terkelola) secara terprogram menggunakan templat ARM ke langganan Azure, langganan perlu menerima persyaratan untuk paket Azure Managed App. Saat disebarkan melalui portal Azure, penerimaan persyaratan terjadi secara implisit dan kemudian penyebaran terprogram dari paket yang sama dalam pekerjaan langganan Azure yang sama tanpa masalah.
Anda juga dapat menerima ketentuan penawaran Aplikasi Azure (Aplikasi Terkelola) menggunakan hal yang sama seperti yang az vm image terms accept
dijelaskan di atas di bagian VM.
Jika produk Aplikasi Azure (Aplikasi Terkelola) adalah produk berbayar (misalnya, produk tersebut menggunakan tagihan bulanan atau terukur), langganan Azure yang Anda gunakan untuk menyebarkannya harus dikaitkan dengan metode pembayaran yang valid (misalnya, itu tidak dapat menjadi langganan gratis atau bersponsor).
Menyebarkan Aplikasi Azure (Aplikasi Terkelola) menggunakan templat ARM dan Azure CLI
Di bawah ini adalah contoh templat ARM untuk menyebarkan Aplikasi Terkelola.
{
"$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
}
}
]
}
Kemudian jalankan perintah berikut:
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>
Menyebarkan Azure Managed App dari Marketplace Azure menggunakan Terraform
Tinjau bagian di atas yang menjelaskan cara menyebarkan penawaran Azure Managed App menggunakan ARM karena penyebaran Terraform akan menggunakan templat ARM yang sama.
Templat Solusi dari Marketplace Azure
Saat menyebarkan penawaran Templat Solusi (bukan Azure Managed App) dari Marketplace Azure, penyebarannya hanyalah templat ARM yang diterbitkan ISV dengan bidang UI terkait yang diteruskan sebagai parameter. Untuk menyebarkan penawaran templat solusi secara terprogram, gunakan portal Azure untuk melakukan penyebaran, menyalin templat ARM, dan menggunakannya dalam penyebaran berikutnya. Karena Templat Solusi bukan penawaran "berbayar", tidak ada istilah khusus yang perlu diterima. Namun, jika templat ARM Templat Solusi mengacu pada gambar VM dari Marketplace Azure, Anda harus terlebih dahulu menerima ketentuan penawaran VM seperti yang dijelaskan untuk penawaran VM.