Используйте экземпляры контейнеров Azure через ARM, чтобы создать неопределенное количество контейнеров.

Я пытаюсь развернуть учетную запись хранилища Azure вместе с неопределенным количеством таблиц с помощью шаблона ARM.

Поскольку MS еще не предоставила тип ресурса таблиц для ARM, я вместо этого использую экземпляры контейнера Azure, чтобы развернуть контейнер, на котором запущен azure-cli, а затем таким образом создать таблицу.

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

Обновления группы контейнеров your-aci-instance недействительны. Если вы собираетесь обновить тип операционной системы, политику перезапуска, сетевой профиль, ресурсы ЦП, памяти или графического процессора для группы контейнеров, вы должны сначала удалить ее, а затем создать новую.

Я понимаю, о чем идет речь, но мне кажется странным, что вы можете создать группу контейнеров, но не изменять группу контейнеров внутри.

Поскольку ARM не позволяет удалять ресурсы, мне пришлось бы добавить ручной шаг к моему процессу развертывания, чтобы убедиться, что ACI не существует, что на самом деле нежелательно.

Также нежелательно использовать итерация ресурсов для создания нескольких ACI - существует вероятность того, что многие ACI будут разбросаны по группе ресурсов, которые больше никогда не будут использоваться.

Есть ли какая-то магия ARM, о которой я еще не знаю, которая может помочь мне создать таблицы, отвечающие следующим критериям?

  • Создается только один ACI.
  • Количество создаваемых таблиц может меняться.

Примечания

Я пробовал использовать итерация переменных для создания единого массива «команд» для одного контейнера, но кажется, что ACI рассматривает все команды как один лайнер, поэтому это вызвало ошибку.

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

Как запустить несколько команд при развертывании контейнера группа?

Текущая попытка

Вот фрагмент из моего шаблона ARM, показывающий, как я использовал итерация свойства, чтобы попытаться достичь моей цели.

{
    "condition": "[not(empty(variables('tables')))]",
    "type": "Microsoft.ContainerInstance/containerGroups",
    "name": "[parameters('containerInstanceName')]",
    "apiVersion": "2018-10-01",
    "location": "[resourceGroup().location]",
    "properties": {
        "copy": [
            {
                "name": "containers",
                "count": "[max(length(variables('tables')), 1)]",
                "input": {
                    "name": "[toLower(variables('tables')[copyIndex('containers')])]",
                    "properties": {
                        "image": "microsoft/azure-cli",
                        "command": [
                            "az",
                            "storage",
                            "table",
                            "create",
                            "--name",
                            "[variables('tables')[copyIndex('containers')]]"
                        ],
                        "environmentVariables": [
                            {
                                "name": "AZURE_STORAGE_KEY",
                                "value": "[listkeys(parameters('storageAccount_Application_Name'), '2019-04-01').keys[0].value]"
                            },
                            {
                                "name": "AZURE_STORAGE_ACCOUNT",
                                "value": "[parameters('storageAccount_Application_Name')]"
                            },
                            {
                                "name": "DATETIME",
                                "value": "[parameters('dateTime')]"
                            }
                        ],
                        "resources": {
                            "requests": {
                                "cpu": "1",
                                "memoryInGb": "1.5"
                            }
                        }
                    }
                }
            }
        ],
        "restartPolicy": "OnFailure",
        "osType": "Linux"
    },
    "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccount_Application_Name'))]"
    ],
    "tags": {
        "displayName": "Application Storage Account - Tables",
        "Application": "[parameters('tagApplication')]",
        "environment": "[parameters('tagEnvironment')]",
        "version": "[parameters('tagVersion')]"
    }
}

person David Gard    schedule 24.06.2019    source источник
comment
Почему вы хотите создать ACI через ARM и запустить Azure CLI внутри ACI? Почему бы просто не запустить Azure CLI? Какой-либо причине?   -  person Charles Xu    schedule 25.06.2019


Ответы (1)


Если он говорит, что поле неизменяемо - это так, вы действительно ничего не можете с этим поделать. Вы всегда можете создать уникальное имя для этого экземпляра контейнера и использовать режим полного развертывания и развернуть ACI только для этой конкретной группы ресурсов, таким образом, у него всегда будет только этот экземпляр ACI, а другие будут удалены, и это будет работать в обход неизменности.

вы можете вызвать функцию azure из шаблона (триггер HTTP) и передать имена таблиц хранения для создания, и он, например, сделает это.

Но в любом случае это взлом.

person 4c74356b41    schedule 25.06.2019
comment
Спасибо за ответ. Похоже, что вариант 1 должен быть таким, каким я пойду. Обидно, потому что это означает, что мне придется разделить мой шаблон ARM на два. Надеюсь, MS скоро решит проблему нехватки ресурсов таблиц для шаблонов ARM! - person David Gard; 25.06.2019