Рубрики
Uncategorized

Как автоматически развернуть функцию вашего Azure (4 способа, с шаблоном руки)

Так приятно быть в состоянии добавить несколько бессвезвенных компонентов в нашем решении, чтобы сделать … Tagged с серверусным, Azure, Devops, CICD.

Настолько приятно иметь возможность добавлять несколько бессвезвенных компонентов в нашем решении, чтобы сделать их лучше в оснастке. Но как мы их справимся? В этом посте я объясню, как создать шаблон Azure Resource Manager (ARM), чтобы развернуть любую функцию Azure и показать, как я использовал эту структуру для развертывания проекта с открытым исходным кодом, который я работал в эти дни.

Часть 1 — Шаблон руки

Шаблон ARM — это файл JSON, который описывает нашу архитектуру. Чтобы развернуть функцию Azure, нам нужно как минимум три рекураса: функционал, план обслуживания и учетную запись хранилища.

Функциональная функция, конечно, наша функция. План обслуживания может быть установлен как динамический или описывает тип ресурса, который будет использоваться вашей функцией. Учетная запись хранения — это наш код.

На предыдущем изображении вы можете увидеть, как эти компоненты больше взаимодействуют друг с другом. Внутри функции у нас будет список свойств. Один из тех свойств будет Время выполнения Например, в Azunzipeverything Demo, это будет dotnet Отказ Другим свойством будет строка подключения к нашей учетной записи хранения, которая также является частью нашего шаблона ARM. Поскольку этот ресурс пока не существует, нам нужно будет использовать динамический код.

Узел функции будет содержать подсчет типа Storageaccount Отказ Именно здесь мы уточним, где наш код, так что он не может быть клоном для лазу.

Строительная рука для простой функции

Давайте посмотрим шаблон для простой функции Azure, которая не требует никакой зависимости, и мы рассмотрим ее после.

Вы можете использовать любой текстовый редактор для редактирования вашего шаблона руки. Тем не менее, пучок Vscode. с расширениями Инструменты менеджера ресурсов Azure Resource и Azure Resource Manager Snippets особенно эффективен.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2018-07-01",
            "name": "storageFunc",
            "location": "[resourceGroup().location]",
            "tags": {
                "displayName": "storageFunc"
            },
            "sku": {
                "name": "Standard_LRS"
            },
            "kind": "StorageV2"
        },
        {
            "type": "Microsoft.Web/serverfarms",
            "apiVersion": "2018-02-01",
            "name": "servicePlan",
            "location": "[resourceGroup().location]",
            "sku": {
                "name": "Y1",
                "tier": "Dynamic"
            },
            "properties": {
                "name": "servicePlan",
                "computeMode": "Dynamic"
            },
            "tags": {
                "displayName": "servicePlan"
            }
        },
         {
              "apiVersion": "2015-08-01",
              "type": "Microsoft.Web/sites",
              "name": "functionApp",
              "location": "[resourceGroup().location]",
              "kind": "functionapp",
              "dependsOn": [
                "[resourceId('Microsoft.Web/serverfarms', 'servicePlan')]",
                "[resourceId('Microsoft.Storage/storageAccounts', 'storageFunc')]"
              ],
              "properties": {
                "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', 'servicePlan')]",
                "siteConfig": {
                  "appSettings": [
                    {
                      "name": "AzureWebJobsDashboard",
                      "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', 'storageFunc', ';AccountKey=', listKeys('storageFunc','2015-05-01-preview').key1)]"
                    },
                    {
                      "name": "AzureWebJobsStorage",
                      "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', 'storageFunc', ';AccountKey=', listKeys('storageFunc','2015-05-01-preview').key1)]"
                    },
                    {
                      "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
                      "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', 'storageFunc', ';AccountKey=', listKeys('storageFunc','2015-05-01-preview').key1)]"
                    },
                    {
                      "name": "WEBSITE_CONTENTSHARE",
                      "value": "storageFunc"
                    },
                    {
                      "name": "FUNCTIONS_EXTENSION_VERSION",
                      "value": "~2"
                    },
                    {
                      "name": "FUNCTIONS_WORKER_RUNTIME",
                      "value": "dotnet"
                    }
                  ]
                }
              },
              "resources": [
                  {
                      "apiVersion": "2015-08-01",
                      "name": "web",
                      "type": "sourcecontrols",
                      "dependsOn": [
                        "[resourceId('Microsoft.Web/sites/', 'functionApp')]"
                      ],
                      "properties": {
                          "RepoUrl": "https://github.com/FBoucher/AzUnzipEverything.git",
                          "branch": "master",
                          "publishRunbook": true,
                          "IsManualIntegration": true
                      }
                 }
              ]
            }

    ],
    "outputs": {}
}

Учетная запись хранилища

Первые ресурсы, перечисленные в шаблоне, это хранение учетной записи. Там ничего конкретно об этом.

План обслуживания

План обслуживания является вторым ресурсом в списке. Важно отметить, что иметь возможность использовать SKU Динамический Вам понадобится хотя бы версия API авивение быть «2018-02-01». Затем вы указываете SKU.

    "sku": {
        "name": "Y1",
        "tier": "Dynamic"
    }

Конечно, вы можете использовать другой SKU, если вы предпочитаете.

Приложение функции

Окончательные ресурсы, добавленные в смеси, и именно здесь все части собираются вместе. Важно отметить, что другой, в котором перечислены ресурсы, не считаются Azure при развертывании (это только для нас;)). Чтобы отпустить Azure, вам нужно добавить зависимости.

"dependsOn": [
    "[resourceId('Microsoft.Web/serverfarms', 'servicePlan')]",
    "[resourceId('Microsoft.Storage/storageAccounts', 'storageFunc')]"
]

Таким образом, функция Azure будет создана после плана обслуживания и учетной записи хранения доступна. Тогда в характеристики Мы сможем построить ConnectionString для хранения BLOB с использованием ссылки.

{
    "name": "AzureWebJobsDashboard",
    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', 'storageFunc', ';AccountKey=', listKeys('storageFunc','2015-05-01-preview').key1)]"
}

Последний кусок головоломки — это подзагодный ресурс Sourcecontrol внутри функционала. Это определит, где Azure должен клонировать код из и в каком ветке.

"resources": [
    {
        "apiVersion": "2015-08-01",
        "name": "web",
        "type": "sourcecontrols",
        "dependsOn": [
        "[resourceId('Microsoft.Web/sites/', 'functionApp')]"
        ],
        "properties": {
            "RepoUrl": "https://github.com/FBoucher/AzUnzipEverything.git",
            "branch": "master",
            "publishRunbook": true,
            "IsManualIntegration": true
        }
    }
]

Чтобы быть уверенным, что все полностью автоматическое автоматическое свойства publishrunbook и Ismanualistegratation должен быть установлен как правда Отказ В противном случае вам нужно будет сделать синхронизацию между вашим git (в этом случае на github), и git в лазуре.

Существует отличная документация, которая объясняет множество дел сценариев для Автоматизация развертывания ресурсов для вашего функционального приложения в функциях Azure

Реальный образец: Azure Unzip Все

Развернуть проект AzunzipeverDyth доступен на GitHub Мне нужна еще одна лазурная память с предварительно определенными контейнерами (папкими).

Конечно, весь исходный код как функции Azure, так и шаблона ARM, доступны на GitHub, но позволяют мне выделить, как контейнеры определены из шаблона руки.

"resources": [
    {
        "type": "blobServices/containers",
        "apiVersion": "2018-07-01",
        "name": "[concat('default/', 'input-files')]",
        "dependsOn": [
            "storageFiles"
        ],
        "properties": {
            "publicAccess": "Blob"
        }
    }
]

Как и с Sourcecontrol Нам нужно будет добавить список подрешенных ресурсов на нашу учетную запись для хранения. Имя должно начнется с 'По умолчанию/' Отказ

Часть 2 — четыре варианта развертывания

Теперь, когда у нас есть шаблон, который описывает наши потребности, нам просто нужно развернуть его. Есть несколько способов можно сделать, но посмотрим на четырех из них.

Развертывание с портала Azure

Перейдите к порталу Azure ( https://azure.portal.com ), из вашего любимого браузера и ищите «Развернуть пользовательский шаблон» непосредственно в панели поиска, расположенную в верхней части экрана (посередине ). Или пойти на https://portal.azure.com/#crate/microsoft.template Отказ Один на странице пользовательских развертываний, нажмите на ссылку Создайте свой собственный шаблон в редакторе Отказ Оттуда вы можете скопировать — вставить или загрузить свой шаблон ARM. Вам нужно сохранить его, чтобы увидеть реальную форму развертывания.

Развернуть с помощью скрипта

Будет ли это в PowerShell или в Azure CLI, вы можете легко развернуть ваш шаблон с этими двумя командами.

В Azure Cli.

    # create resource group
    az group create -n AzUnzipEverything -l eastus

    # deploy it
    az group deployment create -n cloud5mins -g AzUnzipEverything --template-file "deployment\deployAzure.json" --parameters "deployment\deployAzure.parameters.json"  

В PowerShell

    # create resource group
    New-AzResourceGroup -Name AzUnzipEverything -Location eastus

    # deploy it
    New-AzResourceGroupDeployment -ResourceGroupName  AzUnzipEverything -TemplateFile deployment\deployAzure.json

Развертывание на кнопку Azure

Один из лучших способов помочь людям развернуть ваше решение в своей азазубежной подписке — это развертывание кнопки Azure.

Вам необходимо создать ссылку изображения (в HTML или Markdown) к этому в специальный сборнический сбор в двух частях.

Первый — это ссылка на портал Azure:

https://portal.azure.com/#create/Microsoft.Template/uri/

А второй — это местоположение вашего шаблона руки:

https%3A%2F%2Fraw.githubusercontent.com%2FFBoucher%2FAzUnzipEverything%2Fmaster%2Fdeployment%2FdeployAzure.json

Однако этот URL должен быть закодирован. Есть много энкодер в Интернете, но вы также можете сделать это из терминала со следующей командой (большим благодаря @Brettmiller_it , который показал мне этот трюк во время одного из моих живых ручьев).

[System.Web.HttpUtility]::UrlEncode("https://raw.githubusercontent.com/FBoucher/Not-a-Dog-Workshop/master/deployment/deployAzure.json")

Нажатие на кнопку приведет пользователь на той же странице на портале Azure, но в пользовательской подписке.

Azure DevOps трубопровод

От портала Azure DevOps ( https://dev.azure.com ), выберите свой проект и создайте новый выпускной трубопровод. Нажмите на + Добавить артефакт Кнопка для подключения вашего репозитория GIT.

Как только он добавлен, вам нужно добавить задачу текущую работу. Нажмите на ссылку 1 работа, 0 задач (4). Теперь вам просто нужно указать свою подписку Azure, имя группы ресурсов и выберите местонахождение шаблона вашего руку внутри вашего репозитория. Чтобы сделать развертывание автоматическим с каждым толчком в репозитории, нажмите на этот маленький болт молнии и включите Непрерывный триггер развертывания .

Упаковка

Вуаля, вы знаете, имеют четыре разных способа развертывать функцию вашего Azure автоматически. Но не берите мое слово для этого, попробуйте сами! Если вам нужно больше деталей, вы можете посетить Проект на Github Или посмотрите это видео, где я демонстрирую содержание этого поста.

Оригинал: «https://dev.to/fboucheros/4-ways-to-deploy-your-azure-function-automatically-44jj»