Mulai cepat: Membawa penyimpanan Anda sendiri untuk membuat dan menerbitkan definisi Azure Managed Application

Mulai cepat ini menyediakan pengenalan untuk membawa penyimpanan Anda sendiri (BYOS) untuk Azure Managed Application. Anda membuat dan menerbitkan definisi aplikasi terkelola di katalog layanan untuk anggota organisasi Anda. Saat Anda menggunakan akun penyimpanan Anda sendiri, definisi aplikasi terkelola Anda dapat melebihi batas 120 MB katalog layanan.

Untuk menerbitkan definisi aplikasi terkelola ke katalog layanan Anda, lakukan tugas berikut:

  • Buat templat Azure Resource Manager (templat ARM) yang menentukan sumber daya Azure yang disebarkan oleh aplikasi terkelola.
  • Menentukan elemen antarmuka pengguna untuk portal saat menyebarkan aplikasi terkelola.
  • Buat paket .zip yang berisi file JSON yang diperlukan.
  • Buat akun penyimpanan tempat Anda menyimpan definisi aplikasi terkelola.
  • Sebarkan definisi aplikasi terkelola ke akun penyimpanan Anda sendiri sehingga tersedia di katalog layanan Anda.

Jika definisi aplikasi terkelola Anda kurang dari 120 MB dan Anda tidak ingin menggunakan akun penyimpanan Anda sendiri, buka Mulai Cepat: Membuat dan menerbitkan definisi Aplikasi Terkelola Azure.

Anda dapat menggunakan Bicep untuk mengembangkan definisi aplikasi terkelola tetapi harus dikonversi ke JSON templat ARM sebelum Anda dapat menerbitkan definisi di Azure. Untuk informasi selengkapnya, buka Mulai Cepat: Gunakan Bicep untuk membuat dan menerbitkan definisi Azure Managed Application.

Anda juga dapat menggunakan Bicep menyebarkan definisi aplikasi terkelola dari katalog layanan Anda. Untuk informasi selengkapnya, buka Mulai Cepat: Gunakan Bicep untuk menyebarkan definisi Azure Managed Application.

Prasyarat

Untuk menyelesaikan mulai cepat ini, Anda memerlukan prasyarat berikut:

Buat templat ARM

Setiap definisi aplikasi terkelola mencakup file bernama mainTemplate.json. Templat mendefinisikan sumber daya Azure untuk disebarkan dan tidak berbeda dari templat ARM biasa.

Buka Visual Studio Code, buat file dengan nama peka huruf besar/kecil mainTemplate.json dan simpan.

Tambahkan JSON berikut dan simpan file-nya. Ini mendefinisikan sumber daya aplikasi terkelola untuk menyebarkan App Service, paket App Service, dan akun penyimpanan.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "appServicePlanName": {
      "type": "string",
      "maxLength": 40,
      "metadata": {
        "description": "App Service plan name."
      }
    },
    "appServiceNamePrefix": {
      "type": "string",
      "maxLength": 47,
      "metadata": {
        "description": "App Service name prefix."
      }
    },
    "storageAccountNamePrefix": {
      "type": "string",
      "maxLength": 11,
      "metadata": {
        "description": "Storage account name prefix."
      }
    },
    "storageAccountType": {
      "type": "string",
      "allowedValues": [
        "Premium_LRS",
        "Standard_LRS",
        "Standard_GRS"
      ],
      "metadata": {
        "description": "Storage account type allowed values"
      }
    }
  },
  "variables": {
    "appServicePlanSku": "F1",
    "appServicePlanCapacity": 1,
    "appServiceName": "[format('{0}{1}', parameters('appServiceNamePrefix'), uniqueString(resourceGroup().id))]",
    "storageAccountName": "[format('{0}{1}', parameters('storageAccountNamePrefix'), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2022-03-01",
      "name": "[parameters('appServicePlanName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[variables('appServicePlanSku')]",
        "capacity": "[variables('appServicePlanCapacity')]"
      }
    },
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2022-03-01",
      "name": "[variables('appServiceName')]",
      "location": "[parameters('location')]",
      "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
        "httpsOnly": true,
        "siteConfig": {
          "appSettings": [
            {
              "name": "AppServiceStorageConnectionString",
              "value": "[format('DefaultEndpointsProtocol=https;AccountName={0};EndpointSuffix={1};Key={2}', variables('storageAccountName'), environment().suffixes.storage, listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2022-09-01').keys[0].value)]"
            }
          ]
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
      ]
    },
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    }
  ],
  "outputs": {
    "appServicePlan": {
      "type": "string",
      "value": "[parameters('appServicePlanName')]"
    },
    "appServiceApp": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.Web/sites', variables('appServiceName')), '2022-03-01').defaultHostName]"
    },
    "storageAccount": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2022-09-01').primaryEndpoints.blob]"
    }
  }
}

Tentukan pengalaman portal Anda

Sebagai penerbit, Anda menentukan pengalaman portal untuk membuat aplikasi terkelola. File createUiDefinition.json menghasilkan antarmuka pengguna portal. Anda menentukan bagaimana pengguna menyediakan input untuk setiap parameter menggunakan elemen kontrol seperti drop-down dan kotak teks.

Dalam contoh ini, antarmuka pengguna meminta Anda untuk memasukkan awalan nama App Service, nama paket App Service, awalan akun penyimpanan, dan jenis akun penyimpanan. Selama penyebaran, variabel di mainTemplate.json menggunakan uniqueString fungsi untuk menambahkan string 13 karakter ke awalan nama sehingga nama unik secara global di seluruh Azure.

Buka Visual Studio Code, buat file dengan nama peka huruf besar/kecil createUiDefinition.json dan simpan.

Tambahkan kode JSON berikut ke file dan simpan.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {}
    ],
    "steps": [
      {
        "name": "webAppSettings",
        "label": "Web App settings",
        "subLabel": {
          "preValidation": "Configure the web app settings",
          "postValidation": "Completed"
        },
        "elements": [
          {
            "name": "appServicePlanName",
            "type": "Microsoft.Common.TextBox",
            "label": "App Service plan name",
            "placeholder": "App Service plan name",
            "defaultValue": "",
            "toolTip": "Use alphanumeric characters or hyphens with a maximum of 40 characters.",
            "constraints": {
              "required": true,
              "regex": "^[a-z0-9A-Z-]{1,40}$",
              "validationMessage": "Only alphanumeric characters or hyphens are allowed, with a maximum of 40 characters."
            },
            "visible": true
          },
          {
            "name": "appServiceName",
            "type": "Microsoft.Common.TextBox",
            "label": "App Service name prefix",
            "placeholder": "App Service name prefix",
            "defaultValue": "",
            "toolTip": "Use alphanumeric characters or hyphens with minimum of 2 characters and maximum of 47 characters.",
            "constraints": {
              "required": true,
              "regex": "^[a-z0-9A-Z-]{2,47}$",
              "validationMessage": "Only alphanumeric characters or hyphens are allowed, with a minimum of 2 characters and maximum of 47 characters."
            },
            "visible": true
          }
        ]
      },
      {
        "name": "storageConfig",
        "label": "Storage settings",
        "subLabel": {
          "preValidation": "Configure the storage settings",
          "postValidation": "Completed"
        },
        "elements": [
          {
            "name": "storageAccounts",
            "type": "Microsoft.Storage.MultiStorageAccountCombo",
            "label": {
              "prefix": "Storage account name prefix",
              "type": "Storage account type"
            },
            "toolTip": {
              "prefix": "Enter maximum of 11 lowercase letters or numbers.",
              "type": "Available choices are Standard_LRS, Standard_GRS, and Premium_LRS."
            },
            "defaultValue": {
              "type": "Standard_LRS"
            },
            "constraints": {
              "allowedTypes": [
                "Premium_LRS",
                "Standard_LRS",
                "Standard_GRS"
              ]
            },
            "visible": true
          }
        ]
      }
    ],
    "outputs": {
      "location": "[location()]",
      "appServicePlanName": "[steps('webAppSettings').appServicePlanName]",
      "appServiceNamePrefix": "[steps('webAppSettings').appServiceName]",
      "storageAccountNamePrefix": "[steps('storageConfig').storageAccounts.prefix]",
      "storageAccountType": "[steps('storageConfig').storageAccounts.type]"
    }
  }
}

Untuk mempelajari lebih lanjut, buka Mulai menggunakan CreateUiDefinition.

Membuat paket file

Tambahkan dua file ke file paket bernama app.zip. Kedua file tersebut harus berada di tingkat akar file .zip. Jika file berada dalam folder, saat Anda membuat definisi aplikasi terkelola, Anda menerima kesalahan yang menyatakan file yang diperlukan tidak ada.

Unggah app.zip ke akun penyimpanan Azure sehingga Anda dapat menggunakannya saat menyebarkan definisi aplikasi terkelola. Nama akun penyimpanan harus unik secara global di Azure dan panjangnya harus 3-24 karakter dengan hanya huruf kecil dan angka. Dalam perintah, ganti tempat penampung <demostorageaccount> termasuk tanda kurung sudut (<>), dengan nama akun penyimpanan unik Anda.

New-AzResourceGroup -Name packageStorageGroup -Location westus3

$storageAccount = New-AzStorageAccount `
  -ResourceGroupName packageStorageGroup `
  -Name "<demostorageaccount>" `
  -Location westus3 `
  -SkuName Standard_LRS `
  -Kind StorageV2

$ctx = $storageAccount.Context

New-AzStorageContainer -Name appcontainer -Context $ctx -Permission blob

Set-AzStorageBlobContent `
  -File "app.zip" `
  -Container appcontainer `
  -Blob "app.zip" `
  -Context $ctx

Gunakan perintah berikut untuk menyimpan URI file paket dalam variabel bernama packageuri. Anda menggunakan nilai variabel saat menyebarkan definisi aplikasi terkelola.

$packageuri=(Get-AzStorageBlob -Container appcontainer -Blob app.zip -Context $ctx).ICloudBlob.StorageUri.PrimaryUri.AbsoluteUri

Membawa penyimpanan Anda sendiri untuk definisi aplikasi terkelola

Anda menyimpan definisi aplikasi terkelola di akun penyimpanan Anda sendiri sehingga lokasi dan aksesnya dapat dikelola oleh Anda untuk kebutuhan peraturan organisasi Anda. Menggunakan akun penyimpanan Anda sendiri memungkinkan Anda memiliki aplikasi yang melebihi batas 120 MB untuk definisi aplikasi terkelola katalog layanan.

Catatan

Bawa penyimpanan Anda sendiri hanya didukung dengan templat ARM atau penyebaran REST API dari definisi aplikasi terkelola.

Buat akun penyimpanan

Buat akun penyimpanan untuk definisi aplikasi terkelola Anda. Nama akun penyimpanan harus unik secara global di Azure dan panjangnya harus 3-24 karakter dengan hanya huruf kecil dan angka.

Contoh ini membuat grup sumber daya baru bernama byosDefinitionStorageGroup. Dalam perintah, ganti tempat penampung <definitionstorage> termasuk tanda kurung sudut (<>), dengan nama akun penyimpanan unik Anda.

New-AzResourceGroup -Name byosDefinitionStorageGroup -Location westus3

New-AzStorageAccount `
  -ResourceGroupName byosDefinitionStorageGroup `
  -Name "<definitionstorage>" `
  -Location westus3 `
  -SkuName Standard_LRS `
  -Kind StorageV2

Gunakan perintah berikut untuk menyimpan ID sumber daya akun penyimpanan dalam variabel bernama storageid. Anda menggunakan nilai variabel saat menyebarkan definisi aplikasi terkelola.

$storageid = (Get-AzStorageAccount -ResourceGroupName byosDefinitionStorageGroup -Name <definitionstorage>).Id

Tetapkan penetapan peran untuk akun penyimpanan Anda

Sebelum Anda menyebarkan definisi aplikasi terkelola ke akun penyimpanan Anda, tetapkan peran Kontributor ke pengguna Penyedia Sumber Daya Appliance di cakupan akun penyimpanan. Tugas ini memungkinkan identitas menulis file definisi ke kontainer akun penyimpanan Anda.

Anda dapat menggunakan variabel untuk menyiapkan penetapan peran. Contoh ini menggunakan variabel yang $storageid Anda buat di langkah sebelumnya dan membuat $arpid variabel.

$arpid = (Get-AzADServicePrincipal -SearchString "Appliance Resource Provider").Id

New-AzRoleAssignment -ObjectId $arpid `
-RoleDefinitionName Contributor `
-Scope $storageid

Penyedia Sumber Daya Appliance adalah perwakilan layanan di penyewa Microsoft Entra Anda. Dari portal Azure, Anda dapat memverifikasi apakah terdaftar dengan masuk ke aplikasi Microsoft Entra ID>Enterprise dan mengubah filter pencarian ke Aplikasi Microsoft. Telusuri Penyedia Sumber Daya Appliance. Jika tidak ditemukan, daftarkanMicrosoft.Solutions penyedia sumber daya.

Mendapatkan ID grup dan ID definisi peran

Langkah selanjutnya adalah memilih pengguna, grup keamanan, atau aplikasi untuk mengelola sumber daya untuk pelanggan. Identitas ini memiliki izin pada grup sumber daya terkelola sesuai dengan peran yang ditetapkan. Perannya bisa berupa peran bawaan Azure seperti Pemilik atau Kontributor.

Contoh ini menggunakan grup keamanan, dan akun Microsoft Entra Anda harus menjadi anggota grup. Untuk mendapatkan ID objek grup, ganti tempat penampung <managedAppDemo> termasuk tanda kurung sudut (<>), dengan nama grup Anda. Anda menggunakan nilai variabel saat menyebarkan definisi aplikasi terkelola.

Untuk membuat grup Microsoft Entra baru, buka Mengelola grup Microsoft Entra dan keanggotaan grup.

$principalid=(Get-AzADGroup -DisplayName <managedAppDemo>).Id

Selanjutnya, dapatkan ID definisi peran peran bawaan Azure yang ingin Anda berikan akses ke pengguna, grup, atau aplikasi. Anda menggunakan nilai variabel saat menyebarkan definisi aplikasi terkelola.

$roleid=(Get-AzRoleDefinition -Name Owner).Id

Membuat templat penyebaran definisi

Gunakan file Bicep untuk menyebarkan definisi aplikasi terkelola di katalog layanan Anda. Setelah penyebaran, file definisi disimpan di akun penyimpanan Anda sendiri.

Buka Visual Studio Code, buat file dengan nama deployDefinition.bicep dan simpan.

Tambahkan kode Bicep berikut dan simpan file.

param location string = resourceGroup().location

@description('Name of the managed application definition.')
param managedApplicationDefinitionName string

@description('Resource ID for the bring your own storage account where the definition is stored.')
param definitionStorageResourceID string

@description('The URI of the .zip package file.')
param packageFileUri string

@description('Publishers Principal ID that needs permissions to manage resources in the managed resource group.')
param principalId string

@description('Role ID for permissions to the managed resource group.')
param roleId string

var definitionLockLevel = 'ReadOnly'
var definitionDisplayName = 'Sample BYOS managed application'
var definitionDescription = 'Sample BYOS managed application that deploys web resources'

resource managedApplicationDefinition 'Microsoft.Solutions/applicationDefinitions@2021-07-01' = {
  name: managedApplicationDefinitionName
  location: location
  properties: {
    lockLevel: definitionLockLevel
    description: definitionDescription
    displayName: definitionDisplayName
    packageFileUri: packageFileUri
    storageAccountId: definitionStorageResourceID
    authorizations: [
      {
        principalId: principalId
        roleDefinitionId: roleId
      }
    ]
  }
}

Untuk informasi selengkapnya tentang properti templat, buka Microsoft.Solutions/applicationDefinitions.

Pada lockLevel grup sumber daya terkelola mencegah pelanggan melakukan operasi yang tidak diinginkan pada grup sumber daya ini. Saat ini, ReadOnly adalah satu-satunya level kunci yang didukung. ReadOnly menentukan bahwa pelanggan hanya dapat membaca sumber daya yang ada di grup sumber daya terkelola. Identitas penerbit yang diberikan akses ke grup sumber daya terkelola dikecualikan dari tingkat kunci.

Buat file parameter

Templat penyebaran definisi aplikasi terkelola memerlukan input untuk beberapa parameter. Perintah penyebaran meminta nilai atau Anda dapat membuat file parameter untuk nilai tersebut. Dalam contoh ini, kita menggunakan file parameter untuk meneruskan nilai parameter ke perintah penyebaran.

Di Visual Studio Code, buat file baru bernama deployDefinition.parameters.json dan simpan.

Tambahkan yang berikut ini ke file parameter Anda dan simpan. Kemudian, ganti <placeholder values> termasuk tanda kurung sudut (<>), dengan nilai Anda.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "managedApplicationDefinitionName": {
      "value": "<placeholder for managed application name>"
    },
    "definitionStorageResourceID": {
      "value": "<placeholder for you storage account ID>"
    },
    "packageFileUri": {
      "value": "<placeholder for the packageFileUri>"
    },
    "principalId": {
      "value": "<placeholder for principalid value>"
    },
    "roleId": {
      "value": "<placeholder for roleid value>"
    }
  }
}

Tabel berikut menjelaskan nilai parameter untuk definisi aplikasi terkelola.

Parameter Nilai
managedApplicationDefinitionName Nama definisi aplikasi terkelola. Untuk contoh ini, gunakan sampleByosManagedApplication.
definitionStorageResourceID ID sumber daya untuk akun penyimpanan tempat definisi disimpan. Gunakan nilai variabel Anda storageid .
packageFileUri Masukkan URI untuk file paket .zip Anda. Gunakan nilai variabel Anda packageuri . Formatnya adalah https://yourStorageAccountName.blob.core.windows.net/appcontainer/app.zip.
principalId ID Utama penerbit yang memerlukan izin untuk mengelola sumber daya di grup sumber daya terkelola. Gunakan nilai variabel Anda principalid .
roleId ID Peran untuk izin ke grup sumber daya terkelola. Misalnya Pemilik, Kontributor, Pembaca. Gunakan nilai variabel Anda roleid .

Untuk mendapatkan nilai variabel Anda:

  • Azure PowerShell: Di PowerShell, ketik $variableName untuk menampilkan nilai variabel.
  • Azure CLI: Di Bash, ketik echo $variableName untuk menampilkan nilai variabel.

Menyebarkan definisi

Saat Anda menyebarkan definisi aplikasi terkelola, definisi tersebut akan tersedia di katalog layanan Anda. Proses ini tidak menyebarkan sumber daya aplikasi terkelola.

Buat grup sumber daya bernama byosAppDefinitionGroup dan sebarkan definisi aplikasi terkelola ke akun penyimpanan Anda.

New-AzResourceGroup -Name byosAppDefinitionGroup -Location westus3

New-AzResourceGroupDeployment `
  -ResourceGroupName byosAppDefinitionGroup `
  -TemplateFile deployDefinition.bicep `
  -TemplateParameterFile deployDefinition.parameters.json

Memverifikasi penyimpanan file definisi

Selama penyebaran, properti storageAccountId templat menggunakan ID sumber daya akun penyimpanan Anda dan membuat kontainer baru dengan nama applicationdefinitions peka huruf besar/kecil. File dari paket .zip yang Anda tentukan selama penyebaran disimpan dalam kontainer baru.

Anda dapat menggunakan perintah berikut untuk memverifikasi bahwa file definisi aplikasi terkelola disimpan di kontainer akun penyimpanan Anda. Dalam perintah, ganti tempat penampung <definitionstorage> termasuk tanda kurung sudut (<>), dengan nama akun penyimpanan unik Anda.

Get-AzStorageAccount -ResourceGroupName byosDefinitionStorageGroup -Name <definitionstorage> |
Get-AzStorageContainer -Name applicationdefinitions |
Get-AzStorageBlob | Select-Object -Property Name | Format-List

Catatan

Untuk keamanan tambahan, Anda dapat membuat definisi aplikasi terkelola menyimpannya di Blob akun penyimpanan Azure tempat enkripsi diaktifkan. Konten definisi dienkripsi melalui opsi enkripsi akun penyimpanan. Hanya pengguna dengan izin ke file yang dapat mengakses definisi di katalog layanan Anda.

Pastikan pengguna dapat mengakses definisi Anda

Anda memiliki akses ke definisi aplikasi terkelola, tetapi Anda ingin memastikan pengguna lain di organisasi Anda dapat mengaksesnya. Beri mereka setidaknya peran Pembaca pada definisi. Mereka mungkin telah mewarisi tingkat akses ini dari grup langganan atau sumber daya. Untuk memeriksa siapa yang memiliki akses ke definisi dan menambahkan pengguna atau grup, buka Menetapkan peran Azure menggunakan portal Azure.

Membersihkan sumber daya

Jika Anda akan menyebarkan definisi, lanjutkan dengan bagian Langkah berikutnya yang menautkan ke artikel untuk menyebarkan definisi.

Jika Anda selesai dengan definisi aplikasi terkelola, Anda dapat menghapus grup sumber daya yang Anda buat bernama packageStorageGroup, byosDefinitionStorageGroup, dan byosAppDefinitionGroup.

Perintah meminta Anda untuk mengonfirmasi bahwa Anda ingin menghapus grup sumber daya.

Remove-AzResourceGroup -Name packageStorageGroup

Remove-AzResourceGroup -Name byosAppDefinitionGroup

Remove-AzResourceGroup -Name byosDefinitionStorageGroup

Langkah berikutnya

Anda telah menerbitkan definisi aplikasi terkelola. Sekarang, pelajari cara menyebarkan instans definisi tersebut.