34. Практические скрипты Microsoft Azure
Содержание
Практические скрипты Microsoft Azure
Последние 6 дней были сосредоточены на Microsoft Azure и общедоступном облаке в целом, большая часть этой основы должна была содержать много теории, чтобы понять строительные блоки Azure, но также это будет хорошо перенесено на других крупных облачных провайдеров. .
В самом начале я упомянул о базовых знаний об общедоступном облаке и выборе одного провайдера, по крайней мере, для начала. Если вы танцуете между разными облаками, я считаю, что вы можете довольно легко заблудиться, тогда как выбрав одно, вы поймете основы. и когда они у вас есть, довольно легко прыгнуть в другие облака и ускорить свое обучение.
На этом заключительном занятии я буду выбирать свои практические скрипты с этой страницы, которая является справочной информацией, созданной Microsoft и используемой для подготовки к AZ-104 Администратор Microsoft Azure
Здесь есть некоторые из них, такие как контейнеры и Kubernetes, которые мы еще не рассмотрели подробно, поэтому я не хочу пока вдаваться в них.
В предыдущих постах мы создали большинство модулей 1,2 и 3.
Виртуальная сеть
Мы пройдем пройти модуль 04:
Я прошел по инструкции и изменил несколько названий на #90DaysOfDevOps. Я также вместо использования Cloud Shell вошел в систему с моим новым пользователем, созданным в предыдущие дни с помощью Azure CLI на моем компьютере с Windows.
Вы можете сделать это, используя az login
, который откроет браузер и позволит вам аутентифицировать свою учетную запись.
Затем я создал сценарий PowerShell и несколько ссылок из модуля, чтобы использовать их для выполнения некоторых из приведенных ниже задач. Вы можете найти связанные файлы в этой папке. (Облако\01Виртуальная сеть)
Mod04_90DaysOfDevOps-vms-loop-parameters.json
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmSize": {
"value": "Standard_D2s_v3"
},
"adminUsername": {
"value": "Student"
},
"adminPassword": {
"value": "Pa55w.rd1234"
}
}
}
Mod04_90DaysOfDevOps-vms-loop-template.json
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmSize": {
"type": "string",
"defaultValue": "Standard_D2s_v3",
"metadata": {
"description": "VM size"
}
},
"vmName": {
"type": "string",
"defaultValue": "90day-vm",
"metadata": {
"description": "VM name Prefix"
}
},
"vmCount": {
"type": "int",
"defaultValue": 2,
"metadata": {
"description": "Number of VMs"
}
},
"adminUsername": {
"type": "string",
"metadata": {
"description": "Admin username"
}
},
"adminPassword": {
"type": "securestring",
"metadata": {
"description": "Admin password"
}
},
"virtualNetworkName": {
"type": "string",
"defaultValue": "90daysofdevops",
"metadata": {
"description": "Virtual network name"
}
}
},
"variables": {
"nic": "90daysofdevops",
"virtualNetworkName": "[parameters('virtualNetworkName')]",
"subnetName": "subnet",
"subnet0Name": "subnet0",
"subnet1Name": "subnet1",
"computeApiVersion": "2018-06-01",
"networkApiVersion": "2018-08-01"
},
"resources": [
{
"name": "[concat(parameters('vmName'),copyIndex())]",
"copy": {
"name": "VMcopy",
"count": "[parameters('vmCount')]"
},
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "[variables('computeApiVersion')]",
"location": "[resourceGroup().location]",
"comments": "Creating VMs",
"dependsOn": [
"[concat(variables('nic'),copyIndex())]"
],
"properties": {
"osProfile": {
"computerName": "[concat(parameters('vmName'),copyIndex())]",
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]",
"windowsConfiguration": {
"provisionVmAgent": "true"
}
},
"hardwareProfile": {
"vmSize": "[parameters('vmSize')]"
},
"storageProfile": {
"imageReference": {
"publisher": "MicrosoftWindowsServer",
"offer": "WindowsServer",
"sku": "2019-Datacenter",
"version": "latest"
},
"osDisk": {
"createOption": "fromImage"
},
"dataDisks": []
},
"networkProfile": {
"networkInterfaces": [
{
"properties": {
"primary": true
},
"id": "[resourceId('Microsoft.Network/networkInterfaces', concat(variables('nic'),copyIndex()))]"
}
]
}
}
},
{
"type": "Microsoft.Network/virtualNetworks",
"name": "[variables('virtualNetworkName')]",
"apiVersion": "[variables('networkApiVersion')]",
"location": "[resourceGroup().location]",
"comments": "Virtual Network",
"properties": {
"addressSpace": {
"addressPrefixes": [
"10.40.0.0/22"
]
},
"subnets": [
{
"name": "[variables('subnet0Name')]",
"properties": {
"addressPrefix": "10.40.0.0/24"
}
},
{
"name": "[variables('subnet1Name')]",
"properties": {
"addressPrefix": "10.40.1.0/24"
}
}
]
}
},
{
"name": "[concat(variables('nic'),copyIndex())]",
"copy":{
"name": "nicCopy",
"count": "[parameters('vmCount')]"
},
"type": "Microsoft.Network/networkInterfaces",
"apiVersion": "[variables('networkApiVersion')]",
"location": "[resourceGroup().location]",
"comments": "Primary NIC",
"dependsOn": [
"[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]"
],
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"subnet": {
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('virtualNetworkName'), concat(variables('subnetName'),copyIndex()))]"
},
"privateIPAllocationMethod": "Dynamic"
}
}
]
}
}
],
"outputs": {}
}
Module4_90DaysOfDevOps.ps1
$rgName = '90DaysOfDevOps'
New-AzResourceGroupDeployment `
-ResourceGroupName $rgName `
-TemplateFile C:\Users\micha\demo\90DaysOfDevOps\Days\Cloud\01VirtualNetworking\Mod04_90DaysOfDevOps-vms-loop-template.json `
-TemplateParameterFile C:\Users\micha\demo\90DaysOfDevOps\Days\Cloud\01VirtualNetworking\Mod04_90DaysOfDevOps-vms-loop-parameters.json
Убедитесь, что вы изменили расположение файла в скрипте в соответствии с вашей средой.
На этом первом этапе у нас нет виртуальной сети или виртуальных машин, созданных в нашей среде, у меня есть только место хранения облачной оболочки, настроенное в моей группе ресурсов.
Сначала я запускаю свой скрипт в PowerShell
$rgName = '90DaysOfDevOps'
New-AzResourceGroupDeployment `
-ResourceGroupName $rgName `
-TemplateFile C:\Users\micha\demo\90DaysOfDevOps\Days\Cloud\01VirtualNetworking\Mod04_90DaysOfDevOps-vms-loop-template.json `
-TemplateParameterFile C:\Users\micha\demo\90DaysOfDevOps\Days\Cloud\01VirtualNetworking\Mod04_90DaysOfDevOps-vms-loop-parameters.json
Задача 1: Создать и настроить виртуальную сеть
Задача 2. Развернуть виртуальные машины в виртуальной сети.
Задача 3. Настройка частных и общедоступных IP-адресов виртуальных машин Azure.
Задача 4: Настройка групп безопасности сети
- Задача 5. Настройка Azure DNS для внутреннего разрешения имен.
Управление сетевым трафиком
Переходим к модулю 06:
Для этого практического занятия я создал сценарий PowerShell и несколько ссылок из модуля, чтобы использовать их для создания некоторых из приведенных ниже задач.
- Задача 1: Обеспечение лабораторной среды
Запустим PowerShell скрипт
$rgName = '90DaysOfDevOps'
New-AzResourceGroupDeployment `
-ResourceGroupName $rgName `
-TemplateFile C:\Users\micha\demo\90DaysOfDevOps\Days\Cloud\02TrafficManagement\Mod06_90DaysOfDevOps-vms-loop-template.json `
-TemplateParameterFile C:\Users\micha\demo\90DaysOfDevOps\Days\Cloud\02TrafficManagement\Mod06_90DaysOfDevOps-vms-loop-parameters.json
$location = (Get-AzResourceGroup -ResourceGroupName $rgName).location
$vmNames = (Get-AzVM -ResourceGroupName $rgName).Name
foreach ($vmName in $vmNames) {
Set-AzVMExtension `
-ResourceGroupName $rgName `
-Location $location `
-VMName $vmName `
-Name 'networkWatcherAgent' `
-Publisher 'Microsoft.Azure.NetworkWatcher' `
-Type 'NetworkWatcherAgentWindows' `
-TypeHandlerVersion '1.4'
}
Задача 2. Настройка топологии узловой сети
Задача 3. Проверка транзитивности пиринга виртуальной сети.
Для этого моя группа 90DaysOfDevOps не имела доступа к Network Watcher из-за разрешений, я ожидаю, что это связано с тем, что Network Watcher — это один из тех ресурсов, которые не привязаны к группе ресурсов, где наш RBAC был покрыт для этого пользователя. Я добавил в группу 90DaysOfDevOps роль участника Network Watcher из восточной части США.
Это ожидаемо, поскольку виртуальные сети с двумя лучами не связаны друг с другом (пиринг виртуальных сетей не является транзитивным).
- Задача 4. Настройка маршрутизации в топологии «концентратор-луч».
У меня была еще одна проблема: моя учетная запись не могла запустить скрипт от имени моего пользователя в группе 90DaysOfDevOps, в чем я не уверен, поэтому я вернулся в свою основную учетную запись администратора. Группа 90DaysOfDevOps является владельцем всего в группе ресурсов 90DaysOfDevOps, поэтому хотелось бы понять, почему я не могу запустить команду внутри виртуальной машины?
- Task 5: Подключаем Azure Load Balancer
- Task 6: Подключаем Azure Application Gateway
Хранищиле Azure
Переходим к модулю 07:
Для этого практического занятия я также создал сценарий PowerShell и несколько ссылок из модуля, чтобы использовать их для создания некоторых из приведенных ниже задач.
- Задача 1: Обеспечение лабораторной среды
Сначала запускаем PowerShell script
$rgName = '90DaysOfDevOps'
New-AzResourceGroupDeployment `
-ResourceGroupName $rgName `
-TemplateFile C:\Users\micha\demo\90DaysOfDevOps\Days\Cloud\03Storage\Mod07_90DaysOfDevOps-vm-template.json `
-TemplateParameterFile C:\Users\micha\demo\90DaysOfDevOps\Days\Cloud\03Storage\Mod07_90DaysOfDevOps-vm-parameters.json `
-AsJob
Файл `Mod07_90DaysOfDevOps-vm-template.json`
``` { "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "vmSize": { "type": "string", "defaultValue": "Standard_D2s_v3", "metadata": { "description": "Virtual machine size" } }, "adminUsername": { "type": "string", "metadata": { "description": "Admin username" } }, "adminPassword": { "type": "securestring", "metadata": { "description": "Admin password" } } }, "variables": { "vmName": "90Days-vm0", "nicName": "90Days-nic0", "virtualNetworkName": "90Days-vnet0", "publicIPAddressName": "90Days-pip0", "nsgName": "90Days-nsg0", "vnetIpPrefix": "10.70.0.0/22", "subnetIpPrefix": "10.70.0.0/24", "subnetName": "subnet0", "subnetRef": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('virtualNetworkName'), variables('subnetName'))]", "computeApiVersion": "2018-06-01", "networkApiVersion": "2018-08-01" }, "resources": [ { "name": "[variables('vmName')]", "type": "Microsoft.Compute/virtualMachines", "apiVersion": "[variables('computeApiVersion')]", "location": "[resourceGroup().location]", "dependsOn": [ "[variables('nicName')]" ], "properties": { "osProfile": { "computerName": "[variables('vmName')]", "adminUsername": "[parameters('adminUsername')]", "adminPassword": "[parameters('adminPassword')]", "windowsConfiguration": { "provisionVmAgent": "true" } }, "hardwareProfile": { "vmSize": "[parameters('vmSize')]" }, "storageProfile": { "imageReference": { "publisher": "MicrosoftWindowsServer", "offer": "WindowsServer", "sku": "2019-Datacenter", "version": "latest" }, "osDisk": { "createOption": "fromImage" }, "dataDisks": [] }, "networkProfile": { "networkInterfaces": [ { "properties": { "primary": true }, "id": "[resourceId('Microsoft.Network/networkInterfaces', variables('nicName'))]" } ] } } }, { "type": "Microsoft.Network/virtualNetworks", "name": "[variables('virtualNetworkName')]", "apiVersion": "[variables('networkApiVersion')]", "location": "[resourceGroup().location]", "comments": "Virtual Network", "properties": { "addressSpace": { "addressPrefixes": [ "[variables('vnetIpPrefix')]" ] }, "subnets": [ { "name": "[variables('subnetName')]", "properties": { "addressPrefix": "[variables('subnetIpPrefix')]" } } ] } }, { "name": "[variables('nicName')]", "type": "Microsoft.Network/networkInterfaces", "apiVersion": "[variables('networkApiVersion')]", "location": "[resourceGroup().location]", "comments": "Primary NIC", "dependsOn": [ "[variables('publicIpAddressName')]", "[variables('nsgName')]", "[variables('virtualNetworkName')]" ], "properties": { "ipConfigurations": [ { "name": "ipconfig1", "properties": { "subnet": { "id": "[variables('subnetRef')]" }, "privateIPAllocationMethod": "Dynamic", "publicIpAddress": { "id": "[resourceId('Microsoft.Network/publicIpAddresses', variables('publicIpAddressName'))]" } } } ], "networkSecurityGroup": { "id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('nsgName'))]" } } }, { "name": "[variables('publicIpAddressName')]", "type": "Microsoft.Network/publicIpAddresses", "apiVersion": "[variables('networkApiVersion')]", "location": "[resourceGroup().location]", "comments": "Public IP for Primary NIC", "properties": { "publicIpAllocationMethod": "Dynamic" } }, { "name": "[variables('nsgName')]", "type": "Microsoft.Network/networkSecurityGroups", "apiVersion": "[variables('networkApiVersion')]", "location": "[resourceGroup().location]", "comments": "Network Security Group (NSG) for Primary NIC", "properties": { "securityRules": [ { "name": "default-allow-rdp", "properties": { "priority": 1000, "sourceAddressPrefix": "*", "protocol": "Tcp", "destinationPortRange": "3389", "access": "Allow", "direction": "Inbound", "sourcePortRange": "*", "destinationAddressPrefix": "*" } } ] } } ], "outputs": {} } ```Файл `Mod07_90DaysOfDevOps-vm-parameters.json`
``` { "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "vmSize": { "value": "Standard_D2s_v3" }, "adminUsername": { "value": "Student" }, "adminPassword": { "value": "Pa55w.rd1234" } } } ```- Задача 2. Создание и настройка учетных записей хранения Azure.
- Задача 3. Управление хранилищем BLOB-объектов
- Задача 4. Управление проверкой подлинности и авторизацией для службы хранилища Azure.
Я был немного нетерпелив, ожидая, что это все сработает, но в конце концов это сработало.
- Задача 5. Создание и настройка общих папок Azure Files.
В команде запуска это не сработает с michael.cade@90DaysOfDevOps.com, поэтому я использовал свою учетную запись с повышенными правами.
- Задача 6. Управление сетевым доступом для службы хранилища Azure.
Serverless (внедрение веб-приложений)
Переходим к модулю 09a:
- Задача 1. Создание веб-приложения Azure.
- Задача 2. Создание промежуточного слота развертывания.
- Задача 3. Настройка параметров развертывания веб-приложений.
- Задача 4. Развертывание кода в промежуточном слоте развертывания.
- Задача 5: Поменять промежуточные слоты местами
- Задача 6. Настройка и тестирование автоматического масштабирования веб-приложения Azure.
$rgName = '90DaysOfDevOps'
$webapp = Get-AzWebApp -ResourceGroupName $rgName
#The following following will start an infinite loop that sends the HTTP requests to the web app
while ($true) { Invoke-WebRequest -Uri $webapp.DefaultHostName }
На этом мы завершаем раздел о Microsoft Azure и public cloud в целом.
Ресурсы
- Hybrid Cloud and MultiCloud
- Microsoft Azure Fundamentals
- Google Cloud Digital Leader Certification Course
Далее мы углубимся в системы контроля версий, особенно в git, а затем также рассмотрим обзоры репозиториев кода, и мы выберем GitHub, так как это мой предпочтительный вариант.