Hızlı Başlangıç: PowerShell ile Azure Blueprint tanımlama ve atama

Learning oluşturma ve atama ile şema oluşturma, Azure Resource Manager şablonları (ARM şablonları), ilke, güvenlik ve daha fazlasını temel alan yeniden kullanılabilir ve hızlı bir şekilde dağıtılabilir yapılandırmalar geliştirmek için ortak desenlerin tanımına olanak sağlar. Bu öğreticide kuruluşunuzda aşağıdakiler gibi şema oluşturma, yayımlama ve atama konusundaki yaygın görevlerin bazılarını yerine getirmek için Azure Blueprints'i kullanmayı öğreneceksiniz:

Ön koşullar

  • Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
  • Henüz yüklenmemişse Az.Blueprint modülünü yükleme ve test modülünden Az.Blueprint modülünü yükleme ve doğrulama yönergelerini PowerShell Galerisi.
  • Kaynak sağlayıcısını daha önce Azure Blueprints, kaynak sağlayıcısını ile Register-AzResourceProvider -ProviderNamespace Microsoft.Blueprint Azure PowerShell.

Azure Cloud Shell kullanma

Azure, tarayıcınız aracılığıyla kullanabileceğiniz etkileşimli bir kabuk ortamı olan Azure Cloud Shell’i barındırır. Azure hizmetleriyle çalışmak için Cloud Shell ile Bash veya PowerShell kullanabilirsiniz. Bu makaledeki kodu, yerel ortamınıza herhangi bir şey yüklemeye gerek kalmadan çalıştırmak için Cloud Shell’in önceden yüklenmiş komutlarını kullanabilirsiniz.

Azure Cloud Shell’i başlatmak için:

Seçenek Örnek/Bağlantı
Kod bloğunun sağ üst köşesindeki Deneyin’i seçin. Deneyin seçeneği belirlendiğinde, kod otomatik olarak Cloud Shell’e kopyalanmaz. Azure Cloud Shell için Deneyin örneği
Cloud Shell’i tarayıcınızda açmak için https://shell.azure.com bölümüne gidin veya Cloud Shell’i Başlat düğmesini seçin. Cloud Shell’i yeni bir pencerede başlatma
Azure portalın sağ üst köşesindeki menü çubuğunda yer alan Cloud Shell düğmesini seçin. Azure portaldaki Cloud Shell düğmesi

Azure Cloud Shell’de bu makaledeki kodu çalıştırmak için:

  1. Cloud Shell’i başlatın.

  2. Kodu kopyalamak için kod bloğunda Kopyala düğmesini seçin.

  3. Windows ve Linux sisteminde Ctrl+Shift+V tuşlarını kullanarak veya macOS’de Cmd+Shift+V tuşlarını kullanarak kodu Cloud Shell oturumuna yapıştırın.

  4. Kodu çalıştırmak için Enter tuşuna basın.

Şema oluşturma

Uyumluluk için standart desen tanımlamanın ilk adımı kullanılabilir durumdaki kaynaklardan bir şema oluşturmaktır. Abonelik için rol ve ilke atamalarını yapılandırmak üzere 'MyBlueprint' adlı bir şema oluşturacağız. Ardından kaynak grubuna bir kaynak grubu, ARM şablonu ve rol ataması ekleyebilirsiniz.

Not

PowerShell kullanılırken önce şema nesnesi oluşturulur. Eklenecek ve parametreye sahip olan her yapıt için parametrelerin önceden ilk şema içinde tanımlanması gerekir.

  1. İlk şema nesnesini oluşturun. BlueprintFile parametresi şemayla ilgili özellikleri, oluşturulmayacak tüm kaynak gruplarını ve tüm şema düzeyi parametrelerini içeren bir JSON dosyası alır. Parametreler atama sırasında ayarlanır ve sonraki adımlarda eklenecek yapıtlar tarafından kullanılır.

    • JSON dosyası - blueprint.json

      {
          "properties": {
              "description": "This blueprint sets tag policy and role assignment on the subscription, creates a ResourceGroup, and deploys a resource template and role assignment to that ResourceGroup.",
              "targetScope": "subscription",
              "parameters": {
                  "storageAccountType": {
                      "type": "string",
                      "defaultValue": "Standard_LRS",
                      "allowedValues": [
                          "Standard_LRS",
                          "Standard_GRS",
                          "Standard_ZRS",
                          "Premium_LRS"
                      ],
                      "metadata": {
                          "displayName": "storage account type.",
                          "description": null
                      }
                  },
                  "tagName": {
                      "type": "string",
                      "metadata": {
                          "displayName": "The name of the tag to provide the policy assignment.",
                          "description": null
                      }
                  },
                  "tagValue": {
                      "type": "string",
                      "metadata": {
                          "displayName": "The value of the tag to provide the policy assignment.",
                          "description": null
                      }
                  },
                  "contributors": {
                      "type": "array",
                      "metadata": {
                          "description": "List of AAD object IDs that is assigned Contributor role at the subscription",
                          "strongType": "PrincipalId"
                      }
                  },
                  "owners": {
                      "type": "array",
                      "metadata": {
                          "description": "List of AAD object IDs that is assigned Owner role at the resource group",
                          "strongType": "PrincipalId"
                      }
                  }
              },
              "resourceGroups": {
                  "storageRG": {
                      "description": "Contains the resource template deployment and a role assignment."
                  }
              }
          }
      }
      
    • PowerShell komutu

      # Login first with Connect-AzAccount if not using Cloud Shell
      
      # Get a reference to the new blueprint object, we'll use it in subsequent steps
      $blueprint = New-AzBlueprint -Name 'MyBlueprint' -BlueprintFile .\blueprint.json
      

      Not

      Şema tanımlarınızı program aracılığıyla oluştururken filename blueprint.json dosyasını kullanın. Bu dosya adı Import-AzBlueprintWithArtifact çağrılırken kullanılır.

      Şema nesnesi varsayılan olarak varsayılan abonelikte oluşturulur. Yönetim grubunu belirtmek için ManagementGroupId parametresini kullanın. Aboneliği belirtmek için SubscriptionId parametresini kullanın.

  2. Abonelikte rol ataması ekleyin. ArtifactFile yapıt türü tanımlar, özellikler rol tanımı tanımlayıcısıyla hizalanır ve asıl kimlikler bir değer dizisi olarak geçir kullanılır. Aşağıdaki örnekte, belirtilen role verilen asıl kimlikler şema ataması sırasında ayarlanmış bir parametreye yapılandırılır. Bu örnek, GUID'si ile Katkıda Bulunan yerleşik rolünü b24988ac-6180-42a0-ab88-20f7382dd24c kullanır.

    • JSON dosyası - \artifacts\roleContributor.json

      {
          "kind": "roleAssignment",
          "properties": {
              "roleDefinitionId": "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c",
              "principalIds": "[parameters('contributors')]"
          }
      }
      
    • PowerShell komutu

      # Use the reference to the new blueprint object from the previous steps
      New-AzBlueprintArtifact -Blueprint $blueprint -Name 'roleContributor' -ArtifactFile .\artifacts\roleContributor.json
      
  3. Abonelikte ilke ataması ekleyin. ArtifactFile yapıt türü, bir ilke veya girişim tanımıyla uyumlu özellikleri tanımlar ve ilke ataması şema ataması sırasında yapılandırılan tanımlı şema parametrelerini kullanmak üzere yapılandırılır. Bu örnekte, Etiket uygula etiketi ve varsayılan değeri GUID değerine sahip yerleşik kaynak gruplarına 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71 kullanılır.

    • JSON dosyası - \artifacts\policyTags.json

      {
          "kind": "policyAssignment",
          "properties": {
              "displayName": "Apply tag and its default value to resource groups",
              "description": "Apply tag and its default value to resource groups",
              "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71",
              "parameters": {
                  "tagName": {
                      "value": "[parameters('tagName')]"
                  },
                  "tagValue": {
                      "value": "[parameters('tagValue')]"
                  }
              }
          }
      }
      
    • PowerShell komutu

      # Use the reference to the new blueprint object from the previous steps
      New-AzBlueprintArtifact -Blueprint $blueprint -Name 'policyTags' -ArtifactFile .\artifacts\policyTags.json
      
  4. Abonelikte Depolama etiketi için (storageAccountType parametresini yeniden kullanarak) başka bir ilke ataması ekleyin. Bu ek ilke ataması yapıtı, şemada tanımlanan bir parametrenin birden fazla yapıt tarafından kullanılabileceğini gösterir. Örnekte kaynak grubunda etiket ayarlamak için storageAccountType kullanılmıştır. Bu değer, bir sonraki adımda oluşturulan depolama hesabıyla ilgili bilgi sağlar. Bu örnekte, Etiket uygula etiketi ve varsayılan değeri GUID değerine sahip yerleşik kaynak gruplarına 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71 kullanılır.

    • JSON dosyası - \artifacts\policyStorageTags.json

      {
          "kind": "policyAssignment",
          "properties": {
              "displayName": "Apply storage tag to resource group",
              "description": "Apply storage tag and the parameter also used by the template to resource groups",
              "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71",
              "parameters": {
                  "tagName": {
                      "value": "StorageType"
                  },
                  "tagValue": {
                      "value": "[parameters('storageAccountType')]"
                  }
              }
          }
      }
      
    • PowerShell komutu

      # Use the reference to the new blueprint object from the previous steps
      New-AzBlueprintArtifact -Blueprint $blueprint -Name 'policyStorageTags' -ArtifactFile .\artifacts\policyStorageTags.json
      
  5. Kaynak grubuna şablon ekleyin. ARM şablonunun TemplateFile dosyası, şablonun normal JSON bileşenini içerir. Şablon aynı zamanda storageAccountType, tagName ve tagValue şema parametrelerini şablona geçirerek hepsini yeniden kullanır. Şema parametreleri ŞablonParameterFile parametresi kullanılarak şablon için kullanılabilir ve şablon JSON içinde değerin ek için anahtar-değer çifti kullanılır. Şema ve şablon parametre adları aynı olabilir.

    • JSON ARM şablon dosyası - \artifacts\templateStorage.json

      {
          "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
              "storageAccountTypeFromBP": {
                  "type": "string",
                  "metadata": {
                      "description": "Storage Account type"
                  }
              },
              "tagNameFromBP": {
                  "type": "string",
                  "defaultValue": "NotSet",
                  "metadata": {
                      "description": "Tag name from blueprint"
                  }
              },
              "tagValueFromBP": {
                  "type": "string",
                  "defaultValue": "NotSet",
                  "metadata": {
                      "description": "Tag value from blueprint"
                  }
              }
          },
          "variables": {
              "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'standardsa')]"
          },
          "resources": [{
              "type": "Microsoft.Storage/storageAccounts",
              "name": "[variables('storageAccountName')]",
              "apiVersion": "2016-01-01",
              "tags": {
                  "[parameters('tagNameFromBP')]": "[parameters('tagValueFromBP')]"
              },
              "location": "[resourceGroup().location]",
              "sku": {
                  "name": "[parameters('storageAccountTypeFromBP')]"
              },
              "kind": "Storage",
              "properties": {}
          }],
          "outputs": {
              "storageAccountSku": {
                  "type": "string",
                  "value": "[variables('storageAccountName')]"
              }
          }
      }
      
    • JSON ARM şablonu parametre dosyası - \artifacts\templateStorageParams.json

      {
          "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
              "storageAccountTypeFromBP": {
                  "value": "[parameters('storageAccountType')]"
              },
              "tagNameFromBP": {
                  "value": "[parameters('tagName')]"
              },
              "tagValueFromBP": {
                  "value": "[parameters('tagValue')]"
              }
          }
      }
      
    • PowerShell komutu

      # Use the reference to the new blueprint object from the previous steps
      New-AzBlueprintArtifact -Blueprint $blueprint -Type TemplateArtifact -Name 'templateStorage' -TemplateFile .\artifacts\templateStorage.json -TemplateParameterFile .\artifacts\templateStorageParams.json -ResourceGroupName storageRG
      
  6. Rol atamasını kaynak grubuna ekleyin. Yukarıdaki rol ataması girişine benzer şekilde aşağıdaki örnekte de Sahip rolü için tanımlayıcı kullanılır ve şemadan farklı bir parametre sunulur. Bu örnek, GUID'si ile Sahip yerleşik rolünü 8e3af657-a8ff-443c-a75c-2fe8c4bcb635 kullanır.

    • JSON dosyası - \artifacts\roleOwner.json

      {
          "kind": "roleAssignment",
          "properties": {
              "resourceGroup": "storageRG",
              "roleDefinitionId": "/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635",
              "principalIds": "[parameters('owners')]"
          }
      }
      
    • PowerShell komutu

      # Use the reference to the new blueprint object from the previous steps
      New-AzBlueprintArtifact -Blueprint $blueprint -Name 'roleOwner' -ArtifactFile .\artifacts\roleOwner.json
      

Şemayı yayımlama

Yapıtları ekledikten sonra şemayı yayımlayabilirsiniz. Yayımladığınızda şema bir aboneliğe atanmaya hazır hale gelir.

# Use the reference to the new blueprint object from the previous steps
Publish-AzBlueprint -Blueprint $blueprint -Version '{BlueprintVersion}'

{BlueprintVersion} değeri en fazla 20 karakter olmak üzere harf, rakam ve kısa çizgilerden oluşan bir dizedir (boşluk veya özel karakter kullanılamaz). v20180622-135541 gibi benzersiz ve bilgilendirici bir değer kullanın.

Şema atama

Şema PowerShell kullanılarak yayımlandıktan sonra aboneliğe atanabilir. Oluşturduğunuz şemayı yönetim grubu hiyerarşinizdeki aboneliklerden birine atayın. Şema bir aboneliğe kaydedilirse yalnızca o aboneliğe atanabilir. Blueprint parametresi atanma şemasını belirtir. Ad, konum, kimlik, kilit ve şema parametreleri sağlamak için cmdlet'inde eşleşen PowerShell parametrelerini kullanın veya New-AzBlueprintAssignment bunları AssignmentFile parametresi JSON dosyasında girin.

  1. Bir aboneliğe atayarak şema dağıtımını çalıştırın. Katkıda bulunanlar ve sahipler parametreleri rol ataması için sorumluların objectId dizisini gerektirse de, kendi kullanıcılarınız, gruplarınız veya hizmet sorumluları için AssignmentFile içinde kullanmak üzere objectId'leri toplamak üzere Azure Active Directory Graph API'sini kullanın.

    • JSON dosyası - blueprintAssignment.json

      {
          "properties": {
              "blueprintId": "/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint",
              "resourceGroups": {
                  "storageRG": {
                      "name": "StorageAccount",
                      "location": "eastus2"
                  }
              },
              "parameters": {
                  "storageAccountType": {
                      "value": "Standard_GRS"
                  },
                  "tagName": {
                      "value": "CostCenter"
                  },
                  "tagValue": {
                      "value": "ContosoIT"
                  },
                  "contributors": {
                      "value": [
                          "7be2f100-3af5-4c15-bcb7-27ee43784a1f",
                          "38833b56-194d-420b-90ce-cff578296714"
                      ]
                  },
                  "owners": {
                      "value": [
                          "44254d2b-a0c7-405f-959c-f829ee31c2e7",
                          "316deb5f-7187-4512-9dd4-21e7798b0ef9"
                      ]
                  }
              }
          },
          "identity": {
              "type": "systemAssigned"
          },
          "location": "westus"
      }
      
    • PowerShell komutu

      # Use the reference to the new blueprint object from the previous steps
      New-AzBlueprintAssignment -Blueprint $blueprint -Name 'assignMyBlueprint' -AssignmentFile .\blueprintAssignment.json
      
    • Kullanıcı tarafından atanan yönetilen kimlik

      Şema ataması, kullanıcı tarafından atanan yönetilen kimliği de kullanabilir. Bu durumda, JSON atama dosyasının kimlik bölümü aşağıdaki gibi değişir. {tenantId}, {subscriptionId} , ve yerine {yourRG} tenantId, subscriptionId, kaynak grubu adı ve kullanıcı tarafından atanan yönetilen {userIdentity} kimliğinizin adını yazın.

      "identity": {
          "type": "userAssigned",
          "tenantId": "{tenantId}",
          "userAssignedIdentities": {
              "/subscriptions/{subscriptionId}/resourceGroups/{yourRG}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{userIdentity}": {}
          }
      },
      

      Kullanıcı tarafından atanan yönetilen kimlik, şemayı atadığı kullanıcının izinleri olan herhangi bir abonelikte ve kaynak grubunda olabilir.

      Önemli

      Azure Blueprints kullanıcı tarafından atanan yönetilen kimliği yönetmez. Kullanıcılar yeterli rolleri ve izinleri atamakla sorumludur, yoksa şema ataması başarısız olur.

Kaynakları temizleme

Şema atamasını kaldırma

Bir şemayı abonelikten kaldırabilirsiniz. Kaldırma işlemi genellikle yapıt kaynaklarına ihtiyaç duyulmadığında gerçekleştirilir. Bir şema kaldırıldığında o şemanın bir parçası olarak atanan yapıtlar geride kalır. Şema atamalarını kaldırmak için Remove-AzBlueprintAssignment cmdlet'ini kullanın:

assignMyBlueprint

Remove-AzBlueprintAssignment -Name 'assignMyBlueprint'

Sonraki adımlar

Bu hızlı başlangıçta, PowerShell ile bir şema oluşturdunız, atadınız ve kaldırdınız. Daha fazla bilgi Azure Blueprints şema yaşam döngüsü makalesine devam edin.