此问题涉及如果数据工厂中定义了自托管集成运行时,如何通过 CI(在 VSTS 中)传播数据工厂。
我设置了 3 个环境 - Dev/UAT/Prod,每个环境都有自己的数据工厂。
开发人员托管主协作分支。我正在使用 VSTS 从 adf_publish 分支检索工件并将模板部署到 UAT(生产将在稍后完成)。我遵循了本指南中的大部分内容here https://learn.microsoft.com/en-us/azure/data-factory/continuous-integration-deployment.
使用自承载集成运行时 (IR) 部署到空白 UAT 时,在 UAT 中部署的 IR 是来自 dev 的共享 IR 的副本(不是链接类型),这会导致错误,因为 IR 使用的凭据不会是正确的。我希望如此,因为我们实际上只是部署资源组模板的精确副本,仅覆盖工厂名称,但是如果不通过自托管 IR VM 重新认证,IR 将无法工作。
如果我在 UAT 环境中预先注册链接的 IR(链接到开发 IR),则部署会因冲突而失败,因为资源组模板中的 IR 与我刚刚在 UAT 中创建的 IR 名称相同。如果是不同的名称 - 没有冲突,但链接的服务将指向模板 IR 而不是我为 UAT 创建的模板
文档中有一条注释说 IR 运行时在所有平台上应该相同,但我认为这不可能是真的 - 其中一个(大概是源/开发)必须是共享类型,而其他类型必须链接和授权。
我可以看到(未经测试)的一个选项是让每个环境 IR 引用成为与实际 IR 的单独连接,但随后需要某种方式覆盖链接的服务以指向当前环境 IR 引用(通过模板参数覆盖?)。在这种情况下,我们需要阻止模板 IR 的部署,因为它不需要并且不起作用。
有没有人在这种情况下成功地让 CI 工作?我的感觉是该文档是用全球共享的 IR 编写的。要么我需要更好地理解链接服务定义中自动集成设置的目的。
非常感谢。
标记。
Update我认为该服务存在一些错误,因此不期待答案。如果我从我发布的错误报告中看到解决方案,我会在这里发布更新here https://social.msdn.microsoft.com/Forums/en-US/002e6f51-4656-4dda-ade1-a35747ffeb63/adf-continuous-integration-datalake-fails-if-self-hosted-integration-selected?forum=AzureDataFactory对于开发组。
简而言之,这只会影响您
- 您有一个自托管集成运行时 (IR),并且
- 您正在尝试将模板从现有数据工厂部署到新数据工厂(就像在 Dev->UAT->Prod 中一样)
- 您定义并使用自托管 IR 的数据湖 (ADLS) 链接服务。
如果模板中有自托管 IR,则新部署的副本将不会注册到任何服务器(无论是链接服务器还是新 ADF 所独有的服务器),因为模板仅记录 IR,而不会实例化 IR。
虽然这可以在部署后配置或脚本中修复,但它无法修复 ADL 中的依赖项。这是因为 ADL 链接服务想要使用 IR 加密服务主体......但 IR 在模板部署时不存在(即未在服务器上配置且未激活)。
如果您选择托管服务标识而不是服务主体作为 ADL 链接服务的身份验证,那么模板将无法部署,因为没有要加密的凭据,并且资源看起来像是需要加密某些内容。
目前的解决方法是使用 Azure 托管 IR 进行数据湖连接。不幸的是,这会导致安全问题,因为共享 IR 无法在我们的 ADL Gen 1 中列入白名单。
我会及时向大家发布。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)