Hızlı Başlangıç: Azure Yönetilen Uygulama tanımı oluşturmak ve yayımlamak için kendi depolama alanınızı getirme

Bu hızlı başlangıçta, Azure Yönetilen Uygulaması için kendi depolama alanınızı (BYOS) getirme konusuna giriş bilgileri sağlanmaktadır. Kuruluşunuzun üyeleri için hizmet kataloğunuzda yönetilen bir uygulama tanımı oluşturup yayımlarsınız. Kendi depolama hesabınızı kullandığınızda, yönetilen uygulama tanımınız hizmet kataloğunun 120 MB sınırını aşabilir.

Yönetilen uygulama tanımını hizmet kataloğunuzda yayımlamak için aşağıdaki görevleri gerçekleştirin:

  • Yönetilen uygulama tarafından dağıtılan Azure kaynaklarını tanımlayan bir Azure Resource Manager şablonu (ARM şablonu) oluşturun.
  • Yönetilen uygulamayı dağıtırken portal için kullanıcı arabirimi öğeleri tanımlayın.
  • Gerekli JSON dosyalarını içeren bir .zip paketi oluşturun.
  • Yönetilen uygulama tanımını depoladığınız bir depolama hesabı oluşturun.
  • Yönetilen uygulama tanımını kendi depolama hesabınıza dağıtarak hizmet kataloğunuzda kullanılabilir olmasını sağlayın.

Yönetilen uygulama tanımınız 120 MB'tan küçükse ve kendi depolama hesabınızı kullanmak istemiyorsanız Hızlı Başlangıç: Azure Yönetilen Uygulama tanımı oluşturma ve yayımlama bölümüne gidin.

Bicep'i kullanarak yönetilen uygulama tanımı geliştirebilirsiniz ancak tanımı Azure'da yayımlamadan önce arm şablonu JSON'a dönüştürülmesi gerekir. Daha fazla bilgi için Hızlı Başlangıç: Azure Yönetilen Uygulama tanımı oluşturmak ve yayımlamak için Bicep kullanma bölümüne gidin.

Bicep'i hizmet kataloğunuzdan yönetilen bir uygulama tanımı dağıtmak için de kullanabilirsiniz. Daha fazla bilgi için Hızlı Başlangıç: Azure Yönetilen Uygulama tanımını dağıtmak için Bicep kullanma bölümüne gidin.

Ön koşullar

Bu hızlı başlangıcı tamamlamak için aşağıdaki öğelere ihtiyacınız vardır:

ARM şablonunu oluşturma

Her yönetilen uygulama tanımı mainTemplate.json adlı bir dosya içerir. Şablon, dağıtılacak Azure kaynaklarını tanımlar ve normal ARM şablonundan farklı değildir.

Visual Studio Code'u açın, büyük/küçük harfe duyarlı mainTemplate.json adlı bir dosya oluşturun ve kaydedin.

Aşağıdaki JSON dosyasını ekleyin ve dosyayı kaydedin. App Service, App Service planı ve depolama hesabı dağıtmak için yönetilen uygulamanın kaynaklarını tanımlar.

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

Portal deneyiminizi tanımlama

Yayımcı olarak, yönetilen uygulamayı oluşturmak için portal deneyimini tanımlarsınız. createUiDefinition.json dosyası portalın kullanıcı arabirimini oluşturur. Açılan menüler ve metin kutuları gibi denetim öğelerini kullanarak kullanıcıların her parametre için nasıl giriş sağladığını tanımlarsınız.

Bu örnekte kullanıcı arabirimi Sizden App Service ad ön ekini, App Service planının adını, depolama hesabı ön ekini ve depolama hesabı türünü girmenizi ister. Dağıtım sırasında mainTemplate.json dosyasındaki değişkenler, ad ön eklerine 13 karakterlik bir dize ekleyerek adların Azure genelinde genel olarak benzersiz olmasını sağlamak için işlevini kullanıruniqueString.

Visual Studio Code'u açın, büyük/küçük harfe duyarlı createUiDefinition.json adlı bir dosya oluşturun ve kaydedin.

Aşağıdaki JSON kodunu dosyaya ekleyin ve kaydedin.

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

Daha fazla bilgi edinmek için CreateUiDefinition kullanmaya başlama konusuna gidin.

Dosyaları paketleme

İki dosyayı app.zip adlı bir paket dosyasına ekleyin. İki dosya .zip dosyasının kök düzeyinde olmalıdır. Dosyalar bir klasördeyse, yönetilen uygulama tanımını oluşturduğunuzda gerekli dosyaların mevcut olmadığını belirten bir hata alırsınız.

Yönetilen uygulamanın tanımını dağıtırken kullanabilmek için app.zip dosyasını bir Azure depolama hesabına yükleyin. Depolama hesabı adı Azure genelinde genel olarak benzersiz olmalı ve uzunluğu yalnızca küçük harf ve sayılarla 3-24 karakter olmalıdır. komutta köşeli ayraçlar ()<> içeren yer tutucuyu <demostorageaccount> benzersiz depolama hesabı adınızla değiştirin.

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

Paket dosyasının URI'sini adlı packageuribir değişkende depolamak için aşağıdaki komutu kullanın. Yönetilen uygulama tanımını dağıtırken değişkenin değerini kullanırsınız.

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

Yönetilen uygulama tanımı için kendi depolama alanınızı getirme

Yönetilen uygulama tanımınızı kendi depolama hesabınızda depolarsınız, böylece konumunuz ve erişimi kuruluşunuzun mevzuat gereksinimleri için sizin tarafınızdan yönetilebilir. Kendi depolama hesabınızı kullanmak, hizmet kataloğunun yönetilen uygulama tanımı için 120 MB sınırını aşan bir uygulamaya sahip olmanıza olanak tanır.

Dekont

Kendi depolama alanınızı getirin yalnızca yönetilen uygulama tanımının ARM şablonu veya REST API dağıtımlarıyla desteklenir.

Depolama hesabını oluşturma

Yönetilen uygulama tanımınız için depolama hesabı oluşturun. Depolama hesabı adı Azure genelinde genel olarak benzersiz olmalı ve uzunluğu yalnızca küçük harf ve sayılarla 3-24 karakter olmalıdır.

Bu örnek adlı byosDefinitionStorageGroupyeni bir kaynak grubu oluşturur. komutta köşeli ayraçlar ()<> içeren yer tutucuyu <definitionstorage> benzersiz depolama hesabı adınızla değiştirin.

New-AzResourceGroup -Name byosDefinitionStorageGroup -Location westus3

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

Depolama hesabının kaynak kimliğini adlı storageidbir değişkende depolamak için aşağıdaki komutu kullanın. Yönetilen uygulama tanımını dağıtırken değişkenin değerini kullanırsınız.

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

Depolama hesabınız için rol atamasını ayarlama

Yönetilen uygulama tanımınızı depolama hesabınıza dağıtmadan önce depolama hesabı kapsamındaki Alet Kaynak Sağlayıcısı kullanıcısına Katkıda Bulunan rolünü atayın. Bu atama, kimliğin tanım dosyalarını depolama hesabınızın kapsayıcısına yazmasına olanak tanır.

Rol atamasını ayarlamak için değişkenleri kullanabilirsiniz. Bu örnek, önceki adımda oluşturduğunuz değişkeni kullanır $storageid ve değişkeni oluşturur $arpid .

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

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

Alet Kaynak Sağlayıcısı, Microsoft Entra kiracınızdaki bir hizmet sorumlusudur. Azure portalından Microsoft Entra ID>Enterprise uygulamaları'na gidip arama filtresini Microsoft Uygulamaları olarak değiştirerek kaydın kaydedilip kaydedilmediğini doğrulayabilirsiniz. Alet Kaynak Sağlayıcısı'yı arayın. Bulunamazsa kaynak sağlayıcısını Microsoft.Solutions kaydedin.

Grup kimliğini ve rol tanımı kimliğini alma

Sonraki adım, müşterinin kaynaklarını yönetmek için bir kullanıcı, güvenlik grubu veya uygulama seçmektir. Bu kimlik, atanan role göre yönetilen kaynak grubunda izinlere sahiptir. Rol, Sahip veya Katkıda Bulunan gibi herhangi bir Azure yerleşik rolü olabilir.

Bu örnekte bir güvenlik grubu kullanılır ve Microsoft Entra hesabınız grubun bir üyesi olmalıdır. Grubun nesne kimliğini almak için köşeli ayraçlar ()<> içeren yer tutucuyu <managedAppDemo> grubunuzun adıyla değiştirin. Yönetilen uygulama tanımını dağıtırken değişkenin değerini kullanırsınız.

Yeni bir Microsoft Entra grubu oluşturmak için Microsoft Entra gruplarını ve grup üyeliğini yönetme bölümüne gidin.

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

Ardından, kullanıcıya, gruba veya uygulamaya erişim vermek istediğiniz Azure yerleşik rolünün rol tanımı kimliğini alın. Yönetilen uygulama tanımını dağıtırken değişkenin değerini kullanırsınız.

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

Tanım dağıtım şablonunu oluşturma

Hizmet kataloğunuzda yönetilen uygulama tanımını dağıtmak için bir Bicep dosyası kullanın. Dağıtımdan sonra tanım dosyaları kendi depolama hesabınızda depolanır.

Visual Studio Code'u açın, deployDefinition.bicep adlı bir dosya oluşturun ve kaydedin.

Aşağıdaki Bicep kodunu ekleyin ve dosyayı kaydedin.

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
      }
    ]
  }
}

Şablonun özellikleri hakkında daha fazla bilgi için Microsoft.Solutions/applicationDefinitions adresine gidin.

lockLevel yönetilen kaynak grubundaki, müşterinin bu kaynak grubunda istenmeyen işlemler gerçekleştirmesini engeller. ReadOnly Şu anda desteklenen tek kilit düzeyidir. ReadOnly müşterinin yalnızca yönetilen kaynak grubunda bulunan kaynakları okuyabileceğini belirtir. Yönetilen kaynak grubuna erişim verilen yayımcı kimlikleri kilit düzeyinden muaf tutulur.

Parametre dosyasını oluşturma

Yönetilen uygulama tanımının dağıtım şablonunun birkaç parametre için giriş yapması gerekir. Dağıtım komutu sizden değerleri ister veya değerler için bir parametre dosyası oluşturabilirsiniz. Bu örnekte, parametre değerlerini dağıtım komutuna geçirmek için bir parametre dosyası kullanırız.

Visual Studio Code'da deployDefinition.parameters.json adlı yeni bir dosya oluşturun ve kaydedin.

Parametre dosyanıza aşağıdakileri ekleyin ve kaydedin. Ardından, köşeli ayraçları ()<> dahil eden değerini değerlerinizle değiştirin<placeholder values>.

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

Aşağıdaki tabloda yönetilen uygulama tanımı için parametre değerleri açıklanmaktadır.

Parametre Değer
managedApplicationDefinitionName Yönetilen uygulama tanımının adı. Bu örnek için sampleByosManagedApplication komutunu kullanın.
definitionStorageResourceID Tanımın depolandığı depolama hesabının kaynak kimliği. Değişkeninizin storageid değerini kullanın.
packageFileUri .zip paket dosyanızın URI'sini girin. Değişkeninizin packageuri değerini kullanın. Biçim şöyledir: https://yourStorageAccountName.blob.core.windows.net/appcontainer/app.zip.
principalId Yönetilen kaynak grubundaki kaynakları yönetmek için izinlere ihtiyaç duyan yayımcı asıl kimliği. Değişkeninizin principalid değerini kullanın.
roleId Yönetilen kaynak grubuna yönelik izinler için rol kimliği. Örneğin Sahip, Katkıda Bulunan, Okuyucu. Değişkeninizin roleid değerini kullanın.

Değişken değerlerinizi almak için:

  • Azure PowerShell: PowerShell'de bir değişkenin değerini görüntülemek için yazın $variableName .
  • Azure CLI: Bash'te bir değişkenin değerini görüntülemek için yazın echo $variableName .

Tanımı dağıtma

Yönetilen uygulamanın tanımını dağıttığınızda, hizmet kataloğunuzda kullanılabilir hale gelir. Bu işlem yönetilen uygulamanın kaynaklarını dağıtmaz.

byosAppDefinitionGroup adlı bir kaynak grubu oluşturun ve yönetilen uygulama tanımını depolama hesabınıza dağıtın.

New-AzResourceGroup -Name byosAppDefinitionGroup -Location westus3

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

Tanım dosyaları depolama alanını doğrulama

Dağıtım sırasında, şablonun storageAccountId özelliği depolama hesabınızın kaynak kimliğini kullanır ve büyük/küçük harfe duyarlı adlı applicationdefinitionsyeni bir kapsayıcı oluşturur. Dağıtım sırasında belirttiğiniz .zip paketindeki dosyalar yeni kapsayıcıda depolanır.

Yönetilen uygulama tanım dosyalarının depolama hesabınızın kapsayıcısına kaydedildiğini doğrulamak için aşağıdaki komutları kullanabilirsiniz. komutta köşeli ayraçlar ()<> içeren yer tutucuyu <definitionstorage> benzersiz depolama hesabı adınızla değiştirin.

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

Dekont

Daha fazla güvenlik için yönetilen uygulamalar tanımı oluşturabilir ve bunu şifrelemenin etkinleştirildiği bir Azure depolama hesabı blobunda depolayabilirsiniz. Tanım içeriği, depolama hesabının şifreleme seçenekleri aracılığıyla şifrelenir. Yalnızca dosya izinleri olan kullanıcılar hizmet kataloğunuzdaki tanıma erişebilir.

Kullanıcıların tanımınıza erişebildiğinden emin olun

Yönetilen uygulama tanımına eriştiniz ama kuruluşunuzdaki diğer kullanıcıların da erişebildiğinden emin olmak istiyorsunuz. Onlara tanım üzerinde en azından Okuyucu rolü verin. Bu erişim düzeyini abonelikten veya kaynak grubunda devralmış olabilirler. Kimlerin tanıma erişimi olduğunu denetlemek ve kullanıcı veya grup eklemek için Azure portalını kullanarak Azure rolleri atama bölümüne gidin.

Kaynakları temizleme

Tanımı dağıtacaksanız, tanımı dağıtmak için makaleye bağlanan Sonraki adımlar bölümüyle devam edin.

Yönetilen uygulama tanımıyla işiniz bittiyse package Depolama Group, byosDefinition Depolama Group ve byosAppDefinitionGroup adlı kaynak gruplarını silebilirsiniz.

Komut, kaynak grubunu kaldırmak istediğinizi onaylamanızı ister.

Remove-AzResourceGroup -Name packageStorageGroup

Remove-AzResourceGroup -Name byosAppDefinitionGroup

Remove-AzResourceGroup -Name byosDefinitionStorageGroup

Sonraki adımlar

Yönetilen uygulama tanımını yayımladınız. Şimdi bu tanımın bir örneğini nasıl dağıtacağınızı öğrenin.