Я работаю над Azure DevOps и Azure Synapse Analytics. Прямо сейчас у меня возникла проблема с интеграцией Azure DevOps с Azure Synpase Analytics. Как я могу использовать файл yaml и Azure PowerShell в Azure DevOps вместе, чтобы активировать конвейер в Azure Synapse Analytics или как запустить конвейер в Azure Synapse через YAML-файл Azure DevOps?
обновление: не могли бы вы рассказать мне, как использовать подключение к службе и как реализовать сценарий PowerShell в Azure DevOps вместо использования сценария наклона в определении конвейера YAML.
Привет @Alvin Zhao, я не являюсь владельцем подписки Azure, но являюсь владельцем группы ресурсов. Я прошу владельца создать новый принцип обслуживания (регистрацию приложения) в Microsoft Entra и предоставить новому принципу обслуживания разрешение на аналитику Azure Synapse.
Привет @Joanmok, спасибо за твои новости. Найдите мой последний ответ, который поможет вам вручную создать новое подключение к службе ARM. Надеюсь, это сработает и для вас и поможет решить ваш вопрос в этом посте. Оцените свои усилия.
На основании обсуждений и обновлений предположим, что у вас есть субъект-служба (регистрация приложения) и предоставлена ему роль администратора Synapse в рабочей области Azure Synapse, как показано ниже.
Мы можем вручную создать новое подключение к службе Azure Resource Manager в Azure DevOps для задачи конвейера AzurePowerShell
для проверки подлинности этого субъекта-службы с помощью проверки подлинности федерации удостоверений рабочей нагрузки, что позволяет избежать утечки секрета клиента или проблем, вызванных истечением его срока действия. Вот краткие шаги для справки.
In Azure Portal. navigate to Microsoft Entra Id (formerly Azure Active Directory) -> App registrations -> Select the app for authentication -> Keep note of the Application (client) ID and Directory (tenant) ID;
In Azure Portal, collect your Subscription ID and name; Go to the resource group where your Azure Synapse workspace resource locates -> As the resource group Owner, you should be able to assign the app with the Contributor role to the scope of this resource group (this RBAC role assignment is for ARM service connection validation; the permission may not be minimum but is the same role assignment during an automated ARM service connection creation);
In Azure DevOps, browse to your Project Settings -> Pipelines -> Service connections -> New service connection -> Select the type of Azure Resource Manager -> Select Workload Identity federation (manual) -> Give a name for the ARM service connection;
Keep note of the Issuer and Subject identifier -> Input the Subscription Id, Subscription Name, Service Principal Id and Tenant ID from step 1 & 2; you can save the new ARM service connection as a draft now and move on to next step;
In Azure Portal again, Select the app -> Click on Certificates & secrets blade -> Click on Federated credentials tab -> Add credential -> Select Other issuer and Input the Issuer and Subject identifier from step 4;
Go back to Azure DevOps ARM service connection draft to Finish setup -> Click on the Verify and save button;
В соответствии с требованием не использовать встроенный скрипт в определении конвейера YAML вы можете сначала добавить файл сценария .ps1
с примером команды ниже в свой репозиторий. В файле определения конвейера YAML Azure DevOps вы можете ссылаться на новое подключение к службе ARM по его имени в задаче конвейера AzurePowerShell
и запускать файл сценария с помощью FilePath
.
Invoke-AzSynapsePipeline.ps1
Invoke-AzSynapsePipeline -WorkspaceName "$env:MY_WORKSPACE" -PipelineName "$env:PIPELINE_NAME"
azure-pipeline.yml
variables:
myWorkspace: azsynapsexxxxxx0
pipelineName: Pipeline 1
pool:
vmImage: windows-latest
steps:
- task: AzurePowerShell@5
inputs:
azureSubscription: 'ARMSvcCnnAzureSynapseResource0'
ScriptType: 'FilePath'
ScriptPath: 'Invoke-AzSynapsePipeline.ps1'
azurePowerShellVersion: 'LatestVersion'
env:
MY_WORKSPACE: $(myWorkspace)
PIPELINE_NAME: $(pipelineName)
В соответствии с этим документом о выполнении конвейера и триггерах — Фабрика данных Azure и Azure Synapse , вы можете протестировать запуск команды Invoke-AzSynapsePipeline Azure PowerShell в задаче конвейера AzurePowerShell@5
DevOps, чтобы запустить конвейер Azure Synapse.
Вот мой пример YAML-конвейера Azure DevOps для справки.
pool:
vmImage: windows-latest
steps:
- task: AzurePowerShell@5
inputs:
azureSubscription: 'ARMSvcCnnWIFAutoSub1'
ScriptType: 'InlineScript'
Inline: |
Invoke-AzSynapsePipeline -WorkspaceName $(myWorkspace) -PipelineName "Pipeline 1"
azurePowerShellVersion: 'LatestVersion'
Если вы уже создали подключение к службе Azure Resource Manager в Azure DevOps, убедитесь, что его основной принцип службы, по которому проверяет подлинность конвейер Azure DevOps, предоставлен с достаточным разрешением для запуска конвейера Azure Synapse.
Привет, Элвин, спасибо за ответ. У меня есть два вопроса. 1. Необходимо ли создавать подключение к службе Azure Resource Manager для запуска конвейера в Azure Synapse? 2. Я не хочу писать сценарий Powershell внутри файла yaml. Как я могу сделать это отдельно, но включить в свой файл yaml? Большое спасибо.
Соединение со службой ARM используется для хранения информации о субъекте службы (включая метод/информацию аутентификации, такую как секрет клиента), чтобы задача AzurePowerShell
могла запускаться Connect-AzAccount
в самом начале сценария, что является обязательной командой, которую необходимо выполнить перед Invoke-AzSynapsePipeline
и можно избежать утечки или истечения срока действия секрета, если вы используете аутентификацию федерации удостоверений рабочей нагрузки. Тем не менее, НЕТ. Нет необходимости использовать подключение к службе ARM или задачу AzurePowerShell
, если вы можете добавить эту команду аутентификации в свой скрипт.
По вашему второму вопросу, могу ли я предположить, что вы предпочитаете поместить файл сценария .ps1
в свой репозиторий и выполнить этот сценарий? Также можно использовать путь к скрипту вместо встроенного скрипта.
Привет @Joanmok! Что касается фактических требований, то вы не хотите использовать подключение к службе ARM или сценарий наклона в определении конвейера YAML, не так ли? Или вы можете отредактировать исходное сообщение, указав детали? Я могу продолжить обновлять свой ответ.
Привет @Alvin, я обновил свой пост с подробностями. Не могли бы вы помочь мне в этом? Я хотел бы выполнить настройку для подключения к службе, а также отдельный сценарий PowerShell для запуска конвейера в моей Azure Synpase через Azure DevOps.
Привет, Элвин! Большое спасибо. Не могли бы вы также объяснить выпуск в Azure Devops? Почему нам нужно использовать выпуск в Azure DevOps вместо использования конвейера для последующего развертывания? Заранее спасибо.
Привет @Joanmok, Могу ли я узнать, поможет ли мой обновленный ответ на использование команды Invoke-AzSynapsePipeline
в файле сценария решить ваш запрос в этом посте? Пожалуйста, не объединяйте несколько вопросов в один, иначе эта тема может быть закрыта из-за отсутствия внимания. Пожалуйста, не стесняйтесь опубликовать новый запрос и воспользоваться мнениями экспертов нашего сообщества. Спасибо за ваш обмен.
Привет @Alvin Zhao, это действительно помогло и помогло решить мой вопрос. Еще раз спасибо.
Привет @Joanmok! Рад узнать, что проблема решена с твоей стороны.
@Joanmok, И вы можете подумать об этом , чтобы помочь другим с похожими проблемами. Большое спасибо за усилия!
Привет @Joanmok, спасибо за новости. Могу ли я узнать, являетесь ли вы владельцем подписки Azure, в которой создан ресурс Azure Synapse Analytics, или какая роль RBAC для подписки и область ресурса назначены для вашей учетной записи пользователя? Есть ли у вас разрешение на создание нового принципа службы (регистрация приложения) в Microsoft Entra (ранее Azure Active Directory) или у вас есть разрешение на добавление учетных данных для приложения? Эта информация может помочь выбрать метод создания нового подключения к службе ARM, используемого в задаче конвейера.