Wdrożenia grup zasobów z szablonami usługi ARM
W tym artykule opisano sposób rozmieszczenia wdrożenia w grupie zasobów. Do wdrożenia użyjesz szablonu usługi Azure Resource Manager (szablonu usługi ARM). W tym artykule pokazano również, jak rozszerzyć zakres poza grupę zasobów w operacji wdrażania.
Napiwek
Zalecamy Bicep , ponieważ oferuje te same możliwości co szablony usługi ARM, a składnia jest łatwiejsza w użyciu. Aby dowiedzieć się więcej, zobacz Wdrożenia grup zasobów.
Obsługiwane zasoby
Większość zasobów można wdrożyć w grupie zasobów. Aby uzyskać listę dostępnych zasobów, zobacz Dokumentacja szablonu usługi ARM.
Schemat
W przypadku szablonów użyj następującego schematu:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
...
}
W przypadku plików parametrów użyj:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
...
}
Polecenia wdrażania
Aby wdrożyć w grupie zasobów, użyj poleceń wdrażania grupy zasobów.
W przypadku interfejsu wiersza polecenia platformy Azure użyj polecenia az deployment group create. Poniższy przykład umożliwia wdrożenie szablonu w celu utworzenia grupy zasobów. Grupa zasobów określona w parametrze --resource-group
jest docelową grupą zasobów.
az deployment group create \
--name demoRGDeployment \
--resource-group ExampleGroup \
--template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json" \
--parameters storageAccountType=Standard_GRS
Aby uzyskać bardziej szczegółowe informacje o poleceniach wdrażania i opcjach wdrażania szablonów usługi ARM, zobacz:
- Wdrażanie zasobów przy użyciu szablonów usługi ARM i witryny Azure Portal
- Wdrażanie zasobów przy użyciu szablonów usługi ARM i interfejsu wiersza polecenia platformy Azure
- Wdrażanie zasobów przy użyciu szablonów usługi ARM i programu Azure PowerShell
- Wdrażanie zasobów przy użyciu szablonów usługi ARM i interfejsu API REST usługi Azure Resource Manager
- Użyj przycisku wdrażania, aby wdrożyć szablony z repozytorium GitHub
- Wdrażanie szablonów usługi ARM z poziomu usługi Cloud Shell
Zakresy wdrażania
Podczas wdrażania w grupie zasobów można wdrożyć zasoby w:
- docelowa grupa zasobów z operacji
- inne grupy zasobów w tej samej subskrypcji lub innych subskrypcjach
- dowolna subskrypcja w dzierżawie
- dzierżawa dla grupy zasobów
Jedyne zabronione przejścia zakresu mają miejsce z grupy zasobów do grupy zarządzania lub z subskrypcji do grupy zarządzania.
Zasób rozszerzenia może być o określonym zakresie dla miejsca docelowego, który różni się od docelowego wdrożenia.
Użytkownik wdrażający szablon musi mieć dostęp do określonego zakresu.
W tej sekcji przedstawiono sposób określania różnych zakresów. Te różne zakresy można połączyć w jednym szablonie.
Zakres do docelowej grupy zasobów
Aby wdrożyć zasoby w zasobie docelowym, dodaj te zasoby do sekcji zasobów szablonu.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
resource-group-resources
],
"outputs": {}
}
Przykładowy szablon można znaleźć w temacie Deploy to target resource group (Wdrażanie w docelowej grupie zasobów).
Zakres do grupy zasobów w tej samej subskrypcji
Aby wdrożyć zasoby w innej grupie zasobów w tej samej subskrypcji, dodaj zagnieżdżone wdrożenie i uwzględnij resourceGroup
właściwość . Jeśli nie określisz identyfikatora subskrypcji lub grupy zasobów, zostanie użyta subskrypcja i grupa zasobów z szablonu nadrzędnego. Wszystkie grupy zasobów muszą istnieć przed uruchomieniem wdrożenia.
W poniższym przykładzie zagnieżdżone wdrożenie jest przeznaczone dla grupy zasobów o nazwie demoResourceGroup
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"resourceGroup": "demoResourceGroup",
"properties": {
"mode": "Incremental",
"template": {
resource-group-resources
}
}
}
],
"outputs": {}
}
Aby zapoznać się z przykładowym szablonem, zobacz Wdrażanie w wielu grupach zasobów.
Zakres do grupy zasobów w innej subskrypcji
Aby wdrożyć zasoby w grupie zasobów w innej subskrypcji, dodaj zagnieżdżone wdrożenie i uwzględnij subscriptionId
właściwości i resourceGroup
. W poniższym przykładzie zagnieżdżone wdrożenie jest przeznaczone dla grupy zasobów o nazwie demoResourceGroup
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"subscriptionId": "00000000-0000-0000-0000-000000000000",
"resourceGroup": "demoResourceGroup",
"properties": {
"mode": "Incremental",
"template": {
resource-group-resources
}
}
}
],
"outputs": {}
}
Aby zapoznać się z przykładowym szablonem, zobacz Wdrażanie w wielu grupach zasobów.
Zakres subskrypcji
Aby wdrożyć zasoby w subskrypcji, dodaj zagnieżdżone wdrożenie i dołącz subscriptionId
właściwość . Subskrypcja może być subskrypcją docelowej grupy zasobów lub innej subskrypcji w dzierżawie. Ponadto ustaw location
właściwość wdrożenia zagnieżdżonego.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"location": "centralus",
"subscriptionId": "0000000-0000-0000-0000-000000000000",
"properties": {
"mode": "Incremental",
"template": {
subscription-resources
}
}
}
],
"outputs": {}
}
Aby zapoznać się z przykładowym szablonem, zobacz Tworzenie grupy zasobów.
Zakres do dzierżawy
Aby utworzyć zasoby w dzierżawie, ustaw wartość scope
/
. Użytkownik wdrażający szablon musi mieć wymagany dostęp do wdrożenia w dzierżawie.
Aby użyć zagnieżdżonego wdrożenia, ustaw i scope
location
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"location": "centralus",
"scope": "/",
"properties": {
"mode": "Incremental",
"template": {
tenant-resources
}
}
}
],
"outputs": {}
}
Można też ustawić zakres na /
dla niektórych typów zasobów, takich jak grupy zarządzania.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"mgName": {
"type": "string",
"defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
}
},
"resources": [
{
"type": "Microsoft.Management/managementGroups",
"apiVersion": "2021-04-01",
"name": "[parameters('mgName')]",
"scope": "/",
"location": "eastus",
"properties": {}
}
],
"outputs": {
"output": {
"type": "string",
"value": "[parameters('mgName')]"
}
}
}
Aby uzyskać więcej informacji, zobacz Grupa zarządzania.
Wdrażanie w docelowej grupie zasobów
Aby wdrożyć zasoby w docelowej grupie zasobów, zdefiniuj te zasoby w resources
sekcji szablonu. Poniższy szablon tworzy konto magazynu w grupie zasobów określonej w operacji wdrażania.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"type": "string",
"minLength": 3,
"maxLength": 11
},
"storageSKU": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_RAGRS",
"Standard_ZRS",
"Premium_LRS",
"Premium_ZRS",
"Standard_GZRS",
"Standard_RAGZRS"
]
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-09-01",
"name": "[variables('uniqueStorageName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageSKU')]"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
}
],
"outputs": {
"storageEndpoint": {
"type": "object",
"value": "[reference(variables('uniqueStorageName')).primaryEndpoints]"
}
}
}
Wdrażanie w wielu grupach zasobów
Wdrożenie można wdrożyć w więcej niż jednej grupie zasobów w jednym szablonie usługi ARM. Aby zastosować grupę zasobów inną niż dla szablonu nadrzędnego, użyj szablonu zagnieżdżonego lub połączonego. W ramach typu zasobu wdrożenia określ wartości identyfikatora subskrypcji i grupy zasobów, do której ma zostać wdrożony szablon zagnieżdżony. Grupy zasobów mogą istnieć w różnych subskrypcjach.
Uwaga
W jednym wdrożeniu można wdrożyć 800 grup zasobów. Zazwyczaj to ograniczenie oznacza, że można wdrożyć w jednej grupie zasobów określonej dla szablonu nadrzędnego i maksymalnie 799 grup zasobów w zagnieżdżonych lub połączonych wdrożeniach. Jeśli jednak szablon nadrzędny zawiera tylko zagnieżdżone lub połączone szablony i nie wdraża żadnych zasobów, możesz uwzględnić maksymalnie 800 grup zasobów w zagnieżdżonych lub połączonych wdrożeniach.
W poniższym przykładzie wdrożono dwa konta magazynu. Pierwsze konto magazynu jest wdrażane w grupie zasobów określonej w operacji wdrażania. Drugie konto magazynu jest wdrażane w grupie zasobów określonej w parametrach secondResourceGroup
i secondSubscriptionID
:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"type": "string",
"maxLength": 11
},
"secondResourceGroup": {
"type": "string"
},
"secondSubscriptionID": {
"type": "string",
"defaultValue": ""
},
"secondStorageLocation": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"firstStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]",
"secondStorageName": "[concat(parameters('storagePrefix'), uniqueString(parameters('secondSubscriptionID'), parameters('secondResourceGroup')))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('firstStorageName')]",
"location": "[resourceGroup().location]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedTemplate",
"resourceGroup": "[parameters('secondResourceGroup')]",
"subscriptionId": "[parameters('secondSubscriptionID')]",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('secondStorageName')]",
"location": "[parameters('secondStorageLocation')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {
}
}
]
},
"parameters": {}
}
}
]
}
Jeśli ustawisz resourceGroup
nazwę grupy zasobów, która nie istnieje, wdrożenie zakończy się niepowodzeniem.
Aby przetestować poprzedni szablon i wyświetlić wyniki, użyj programu PowerShell lub interfejsu wiersza polecenia platformy Azure.
Aby wdrożyć dwa konta magazynu w dwóch grupach zasobów w tej samej subskrypcji, użyj:
firstRG="primarygroup"
secondRG="secondarygroup"
az group create --name $firstRG --location southcentralus
az group create --name $secondRG --location eastus
az deployment group create \
--name ExampleDeployment \
--resource-group $firstRG \
--template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/crosssubscription.json \
--parameters storagePrefix=tfstorage secondResourceGroup=$secondRG secondStorageLocation=eastus
Aby wdrożyć dwa konta magazynu w dwóch subskrypcjach, użyj:
firstRG="primarygroup"
secondRG="secondarygroup"
firstSub="<first-subscription-id>"
secondSub="<second-subscription-id>"
az account set --subscription $secondSub
az group create --name $secondRG --location eastus
az account set --subscription $firstSub
az group create --name $firstRG --location southcentralus
az deployment group create \
--name ExampleDeployment \
--resource-group $firstRG \
--template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/crosssubscription.json \
--parameters storagePrefix=storage secondResourceGroup=$secondRG secondStorageLocation=eastus secondSubscriptionID=$secondSub
Utwórz grupę zasobów
W ramach wdrożenia grupy zasobów można przełączyć się na poziom subskrypcji i utworzyć grupę zasobów. Poniższy szablon wdraża konto magazynu w docelowej grupie zasobów i tworzy nową grupę zasobów w określonej subskrypcji.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"type": "string",
"maxLength": 11
},
"newResourceGroupName": {
"type": "string"
},
"nestedSubscriptionID": {
"type": "string"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"storageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('storageName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "demoSubDeployment",
"location": "westus",
"subscriptionId": "[parameters('nestedSubscriptionID')]",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2021-04-01",
"name": "[parameters('newResourceGroupName')]",
"location": "[parameters('location')]",
"properties": {}
}
],
"outputs": {}
}
}
}
]
}
Następne kroki
- Aby zapoznać się z przykładem wdrażania ustawień obszaru roboczego dla Microsoft Defender dla Chmury, zobacz deployASCwithWorkspace Ustawienia.json.