Глобальные параметры не отображаются в ARMTemplateParametersForFactory.json

Я не могу понять, как переопределить глобальные параметры в моем конвейере CI/CD для ADF. Я добавил TEST_PARAMETER, и когда я развертываю свое объявление с помощью следующей задачи:

- task: AzureResourceManagerTemplateDeployment@3
retryCountOnTaskFailure: ${{ parameters.arm_template_deployment_retry_count }}
continueOnError: false
inputs:
  deploymentScope: 'Resource Group'
  azureResourceManagerConnection: ${{ parameters.deployment_service_connection }}
  subscriptionId: $(global.subscription.id)
  action: 'Create Or Update Resource Group'
  resourceGroupName: $(global.resourceGroup.name)
  location: $(global.location.primary)
  templateLocation: 'Linked artifact'
  csmFile: '$(Build.SourcesDirectory)/adf/ARMTemplateForFactory.json'
  csmParametersFile: '$(Build.SourcesDirectory)/adf/ARMTemplateParametersForFactory.json'
  overrideParameters: >
    -dataFactory_properties_globalParameters_TEST_PARAMETER_value "111"

Я получаю следующие ошибки:

There was an error while overriding 'dataFactory_properties_globalParameters_TEST_PARAMETER_value' parameter because of 'TypeError: Cannot read properties of undefined (reading 'type')', make sure it follows JavaScript Object Notation (JSON)

Starting template validation.
Deployment name is ARMTemplateForFactory-20240708-211103-e1c1
There were errors in your deployment. Error code: InvalidTemplate.
##[error]Deployment template validation failed: 'The following parameters were supplied, but do not correspond to any parameters defined in the template: 'dataFactory_properties_globalParameters_TEST_PARAMETER_value'. The parameters defined in the template are: 'factoryName, ...

но моего параметра нет в "параметрах, определенных в шаблоне"...

Я включил Include global parameters in ARM template, как предложил Microsoft, на экране Arm Template ADF.

Я вижу, что глобальные параметры видны в ARMTemplateForFactory.json, но... я все еще не могу их переопределить, поскольку они не существуют в ARMTemplateParametersForFactory.json. Я вижу, что в корневой папке моего adf есть файл arm-template-parameters-definition.json, и начало этого файла выглядит, как показано ниже.

{
    "Microsoft.DataFactory/factories": {
        "properties": {
            "globalParameters": {
                "*": {
                    "value": " = "
                }
            }
        },
        "location": " = "
    },

Я также выполнил экспорт из моего ADF, и в файлы ниже были включены эти глобальные параметры:

ARMTemplateForFactory.json
MyADF_ARMTemplateForFactory.json
MyADF_ARMTemplateParametersForFactory.json

В ARMTTemplateForFactory.json я вижу определенный глобальный параметр:

...
        },
        {
            "name": "[concat(parameters('factoryName'), '/default')]",
            "type": "Microsoft.DataFactory/factories/globalparameters",
            "apiVersion": "2018-06-01",
            "properties": {
                "TEST_PARAMETER": {
                    "type": "string",
                    "value": "\"123\""
                }
...

но, честно говоря, я ожидал увидеть это в параметрах, а не в ресурсах. Почему он определяется как ресурс, а не параметр?

Я вижу, что мой тестовый глобальный параметр определен как: "dataFactory_properties_globalParameters_TEST_PARAMETER_value": { "тип": "строка", "defaultValue": ""123"" },

но в файле ниже все еще отсутствуют эти глобальные параметры:

ARMTemplateParametersForFactory.json

Publish_config.json также, похоже, отражает необходимость включения глобальных параметров:

{"publishBranch":"my-publish-branch","includeGlobalParamsTemplate":true}

Я чувствую себя потерянным, так как не уверен, чего мне здесь не хватает... Это конфигурация «arm-template-parameters-definition.json» или, может быть, что-то еще?

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
107
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обновлять

Судя по дальнейшим обсуждениям, при добавлении новых глобальных параметров ADF и последующей отправке изменений в ветку публикации GIT узел parameters в файле шаблона ARMTemplateForFactory.json не будет заполнен, что привело к ошибке во время развертывания ARM.

Я мог бы воспроизвести проблему, если бы в студии arm-template-parameters-definition.json в ADF не было блока ниже.

,
    "Microsoft.DataFactory/factories/globalparameters": {
        "properties": {
            "globalParameters": {
                "*": {
                    "value": " = "
                }
            }
        }
    }

Добавление этих строк путем перехода в студию ADF -> Управление -> Шаблон ARM -> Изменить конфигурацию параметров и нажатием кнопки «Изменить» может решить проблему.

Прежде чем публиковать шаблоны в репозиториях GIT, мы можем экспортировать и загрузить файл шаблона ARM, чтобы дважды проверить, заполнены ли необходимые параметры/ресурсы.


Это была ожидаемая ошибка, когда вы пытались переопределить значение параметра шаблона ARM, но этот параметр не был заявлен в узле parameters в файле шаблона ARM.

Поскольку файл шаблона ARM ARMTemplateForFactory.json и файл параметров ARMTemplateParametersForFactory.json должны быть обновлены операциями в студии ADF, вот шаги для справки, чтобы убедиться, что Test_Global_Parameter определен первым, а затем его можно переопределить во время развертывания ARM.

  1. To Include global parameters in ARM template and then Publish the change to the ARM template file in the adf_publish branch, will only add the modification in the resources node of the ARM template file but NOT populate any update in the parameters node;

  2. We can add a new Test_Global_Parameter and then Publish the change again to make sure the parameters node in the ARMTemplateForFactory.json file is updated and the ARMTemplateParametersForFactory.json file is also synchronized with a default value for Test_Global_Parameter;

  3. Then you may proceed to test the ARM deployment with the latest version of this ARM template and to override the Test_Global_Parameter value via a pipeline workflow;

    parameters:
    - name: arm_template_deployment_retry_count
      type: number
      default: 1
    
    - name: deployment_service_connection
      default: ARMSvcCnnSub0
    
    - name: source_adf
      default: azdatafactory-instance0
      values:
      - azdatafactory-instance0
      - azdatafactory-instance1
    
    variables:
      global.subscription.id: $(sub0)
      global.resourceGroup.name: rg-azdatafactory-instance0
      global.location.primary: southeastasia
      adf: ${{ parameters.source_adf }}
    
    trigger:
    - adf_publish
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
    - task: AzureResourceManagerTemplateDeployment@3
      retryCountOnTaskFailure: ${{ parameters.arm_template_deployment_retry_count }}
      continueOnError: false
      inputs:
        deploymentScope: 'Resource Group'
        azureResourceManagerConnection: ${{ parameters.deployment_service_connection }}
        subscriptionId: $(global.subscription.id)
        action: 'Create Or Update Resource Group'
        resourceGroupName: $(global.resourceGroup.name)
        location: $(global.location.primary)
        templateLocation: 'Linked artifact'
        csmFile: '$(Build.SourcesDirectory)/$(adf)/ARMTemplateForFactory.json'
        csmParametersFile: '$(Build.SourcesDirectory)/$(adf)/ARMTemplateParametersForFactory.json'
        overrideParameters: >
          -default_properties_Test_Global_Parameter_value "111"
        # -factoryName "azdatafactory-newinstance"
    

Хм, хорошо, я попробую, но действителен ли этот сценарий при использовании пакета ADF npm? Я подумал, что в этом случае нажимать «Опубликовать» особо не нужно.

Filip Drzewiecki 09.07.2024 14:05

Нам нужно «опубликовать», чтобы он мог заполнить этот новый параметр в шаблоне ARM. Согласно вашей проблеме в этом посте, она касается только файла шаблона ARM и файла параметров в ветке adf_publish. вы можете узнать больше о развертывании ARM, чтобы лучше понять проблему. Надеюсь, ответ поможет решить эту проблему.

Alvin Zhao - MSFT 09.07.2024 16:34

Итак, я думаю, что здесь все еще нет проблемы, и это меня беспокоит. Я проверил «включить глобальные параметры в шаблон руки» и нажал «Опубликовать». Затем я добавил новый глобальный параметр и снова нажал «Опубликовать». Все мои глобальные параметры по-прежнему отсутствуют в ARMTemplateParametersForFactory.json... Новый параметр виден в test_global_params_GlobalParameters.json в моей ветке публикации, а также виден в ARMTemplateForFactory.json, но все еще находится в разделе ресурсов.... Что здесь не так?

Filip Drzewiecki 10.07.2024 10:30

Можете ли вы дважды проверить, интегрирован ли ваш ресурс ADF с тем же репозиторием GIT, что и ваш конвейер YAML? Перенесено ли изменение в какой-либо другой репозиторий или ветку GIT?

Alvin Zhao - MSFT 10.07.2024 10:36

Я добавил еще один тестовый параметр и снова опубликовал git, и все файлы в моей ветке публикации были обновлены, за исключением ARMTemplateParametersForFactory.json. Почему? Возможно ли, что файл Arm-template-parameters-definition.json каким-то образом влияет на это?

Filip Drzewiecki 10.07.2024 10:36

Итак, Test_Glabal_Parameter был добавлен в узел parameters в файле ARMTemplateForFactory.json?

Alvin Zhao - MSFT 10.07.2024 10:39
ARMTemplateParametersForFactory.json содержит только значения по умолчанию из исходного ресурса ADF. Даже если Test_Glabal_Parameter не был добавлен в этот ARMTemplateParametersForFactory.json файл, его значение можно переопределить во время развертывания ARM.
Alvin Zhao - MSFT 10.07.2024 10:47

Ошибка в этом посте все еще существует?

Alvin Zhao - MSFT 10.07.2024 10:48

В этом и проблема, она по-прежнему добавляется в разделе "Ресурсы", а не параметры... Почему? Это из-за моей конфигурации параметров? Я вижу строку ниже: { "Microsoft.DataFactory/factories": { "properties": { "globalParameters": { "*": { "value": " = " } } }, "location": "= " } в файле Arm-template-parameters-definition.json.

Filip Drzewiecki 10.07.2024 10:48

У меня даже нет этого arm-template-parameters-definition.json файла в моей adf_publish ветке.

Alvin Zhao - MSFT 10.07.2024 10:51

Это не ветка публикации, она доступна в ADF Studio. Таким образом, текущая проблема, похоже, заключается в том, что глобальные параметры по-прежнему определяются в ресурсах, а не в параметрах в ARMTemplateForFactory.json, даже когда я добавил второй параметр и снова нажал кнопку «Опубликовать».

Filip Drzewiecki 10.07.2024 10:53

Что вы имеете в виду, что этого нет в ветке публикации? Когда вы нажимаете кнопку Publish, изменения должны быть обновлены в шаблоне и файле параметров в ветке публикации, по умолчанию adf_publish.

Alvin Zhao - MSFT 10.07.2024 10:57

Или, скажем, вы не хотите использовать шаблоны в ветке публикации для развертывания ресурса ADF?

Alvin Zhao - MSFT 10.07.2024 10:58

Можете ли вы дважды проверить, обновлены ли файлы шаблонов и параметров ARM в вашей ветке публикации ADF (ветвь adf_publish по умолчанию)?

Alvin Zhao - MSFT 10.07.2024 11:06

Да, когда я нажимаю Pubslih, ветка adf_publish обновляется, но проблема в том, что глобальные параметры по-прежнему добавляются в ресурсы в json, а не в параметры...

Filip Drzewiecki 10.07.2024 11:13

Я не могу воспроизвести такое поведение. Что, если вы протестируете новый экземпляр ADF, интегрированный с новым репозиторием GIT?

Alvin Zhao - MSFT 10.07.2024 11:22

Также попробуйте перейти в студию ADF -> Mange -> Шаблон ARM -> Изменить конфигурацию параметров и нажать «Изменить» -> Проверить, есть ли строки: «Microsoft.DataFactory/factories/globalparameters»: { «properties»: { " *": { "value": " = " } } }

Alvin Zhao - MSFT 10.07.2024 11:32

Хм, для меня эта строка выглядит немного иначе.... { "Microsoft.DataFactory/factories": { "properties": { "globalParameters": { "*": { "value": " = " } } }, "location": " = " },

Filip Drzewiecki 10.07.2024 11:41

ОК, после того, как я добавил "Microsoft.DataFactory/factories/globalparameters": { "properties": { "*": { "value": " = " } } } глобальные параметры начали отображаться так, как должны.... Я думал, что «включение глобальных параметров в шаблон ARM должно как-то автоматически это объявить…

Filip Drzewiecki 10.07.2024 11:56

Я могу воспроизвести проблему только без этих строк.

Alvin Zhao - MSFT 10.07.2024 12:01

Хорошо, хорошо, после того, как я добавил "Microsoft.DataFactory/factories/globalparameters": { "properties": { "*": { "value": " = " } } } глобальные параметры начали отображаться так, как должны.. .. Я думал, что «включение глобальных параметров в шаблон ARM должно как-то автоматически это объявить…

Filip Drzewiecki 10.07.2024 15:34

Не знаю, почему в вашей студии arm-template-parameters-definition.json в ADF не было этого блока Microsoft.DataFactory/factories/globalparameters, но добавление этих строк решило проблему, верно?

Alvin Zhao - MSFT 11.07.2024 04:39

Другие вопросы по теме