Mulai cepat: Membuat dan menerbitkan definisi Aplikasi Terkelola Azure

Mulai cepat ini memberikan pengantar untuk bekerja dengan Aplikasi Terkelola Azure. Anda membuat dan menerbitkan definisi aplikasi terkelola yang disimpan di katalog layanan Anda dan ditujukan untuk anggota organisasi Anda.

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

  • Buat templat Azure Resource Manager (templat ARM) yang menentukan sumber daya yang akan disebarkan dengan aplikasi terkelola.
  • Menentukan elemen antarmuka pengguna untuk portal saat menyebarkan aplikasi terkelola.
  • Buat paket .zip yang berisi file JSON yang diperlukan. File paket .zip memiliki batas 120 MB untuk definisi aplikasi terkelola katalog layanan.
  • Terbitkan definisi aplikasi terkelola sehingga tersedia di katalog layanan Anda.

Jika definisi aplikasi terkelola Anda lebih dari 120 MB atau jika Anda ingin menggunakan akun penyimpanan Anda sendiri untuk alasan kepatuhan organisasi Anda, buka Mulai Cepat: Bawa penyimpanan Anda sendiri untuk membuat dan menerbitkan definisi Azure Managed Application.

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 untuk menyebarkan App Service, paket App Service, dan akun penyimpanan untuk aplikasi. Akun penyimpanan ini tidak digunakan untuk menyimpan definisi aplikasi terkelola.

{
  "$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 selengkapnya, lihat Memulai dengan 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.

Di Visual Studio Code, buka terminal PowerShell baru dan masuk ke langganan Azure Anda.

Connect-AzAccount

Perintah membuka browser default Anda dan meminta Anda untuk masuk ke Azure. Untuk informasi selengkapnya, buka Masuk dengan Azure PowerShell.

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

Membuat definisi aplikasi terkelola

Di bagian ini, Anda mendapatkan informasi identitas dari ID Microsoft Entra, membuat grup sumber daya, dan menyebarkan definisi aplikasi terkelola.

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 ini 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 ini saat menyebarkan definisi aplikasi terkelola.

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

Menerbitkan definisi aplikasi terkelola

Buat grup sumber daya untuk definisi aplikasi terkelola Anda.

New-AzResourceGroup -Name appDefinitionGroup -Location westus3

Perintah blob membuat variabel untuk menyimpan URL untuk file .zip paket. Variabel tersebut digunakan dalam perintah yang membuat definisi aplikasi terkelola.

$blob = Get-AzStorageBlob -Container appcontainer -Blob app.zip -Context $ctx

New-AzManagedApplicationDefinition `
  -Name "sampleManagedApplication" `
  -Location "westus3" `
  -ResourceGroupName appDefinitionGroup `
  -LockLevel ReadOnly `
  -DisplayName "Sample managed application" `
  -Description "Sample managed application that deploys web resources" `
  -Authorization "${principalid}:$roleid" `
  -PackageFileUri $blob.ICloudBlob.StorageUri.PrimaryUri.AbsoluteUri

Ketika perintah selesai, Anda memiliki definisi aplikasi terkelola di grup sumber daya Anda.

Beberapa parameter yang digunakan dalam contoh sebelumnya adalah:

  • ResourceGroupName: Nama grup sumber daya tempat definisi aplikasi terkelola dibuat.
  • LockLevel: 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.
  • Authorization: Menjelaskan ID utama dan ID definisi peran yang digunakan untuk memberikan izin ke grup sumber daya terkelola.
    • "${principalid}:$roleid" atau Anda dapat menggunakan kurung kurawal untuk setiap variabel "${principalid}:${roleid}".
    • Gunakan koma untuk memisahkan beberapa nilai: "${principalid1}:$roleid1", "${principalid2}:$roleid2".
  • PackageFileUri: Lokasi file paket .zip yang berisi file yang diperlukan.

Pastikan pengguna dapat melihat 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, lihat Menetapkan peran Azure menggunakan portal Microsot Azure.

Membersihkan sumber daya

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

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

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

Remove-AzResourceGroup -Name packageStorageGroup

Remove-AzResourceGroup -Name appDefinitionGroup

Langkah berikutnya

Anda telah menerbitkan definisi aplikasi terkelola. Langkah selanjutnya adalah mempelajari cara menyebarkan instans definisi tersebut.