如果数据工厂中定义了自托管集成运行时,此问题涉及如何通过CI(在VSTS中(传播数据工厂。
我设置了3个环境-Dev/UAT/Prod,每个环境都有自己的数据工厂。
开发人员主持主协作分支。我正在使用VSTS从adf_publish分支检索工件,并将模板部署到UAT(稍后将进行生产(。我遵循了本指南中的大部分内容。
当部署到具有自托管集成运行时(IR(的空白UAT时,UAT中部署的IR是来自dev的共享IR的副本(不是链接类型(,这会导致错误,因为IR使用的凭据将不正确。我预料到了这一点,因为我们实际上只是部署了一个资源组模板的精确副本,只覆盖了工厂名称,但如果没有与自托管的IR VM重新认证,IR将无法工作。
如果我在UAT环境中预先注册了一个链接的IR(链接到开发IR(,那么部署会失败并发生冲突,因为资源组模板中的IR与我刚刚在UAT中创建的IR同名。如果它是一个不同的名称-没有冲突,但链接的服务将指向模板IR,而不是我为UAT 创建的模板
文档中有一条注释,指出所有平台的IR运行时都应该相同,但我不认为这是真的——其中一个(可能是源/dev/(必须是共享类型,其他必须链接并授权。
我可以看到的一个选项(未经测试(是让每个环境IR引用都是到实际IR的单独连接,但随后需要某种方式覆盖链接的服务以指向当前环境IR引用(通过模板参数覆盖?(。在这种情况下,我们需要阻止部署模板IR,因为它不需要也不起作用。
有人在这种情况下成功地让CI工作吗?我的感觉是,文档是用全局共享的IR编写的。要么是这样,要么我需要更好地理解链接服务定义中自动集成设置的目的。
非常感谢。做记号
更新我认为服务中有几个错误,所以没想到会有答案。如果我从我为开发小组发布的错误报告中看到解决方案,我会在这里发布更新。
简而言之,这只会影响到
- 您有一个自托管集成运行时(IR(,并且
- 您正试图将模板从现有数据工厂部署到新的数据工厂(如在Dev->UAT->Prod中所做的那样(
- 您已经定义并使用自托管IR的数据采集(ADL(链接服务
如果模板中有一个自托管的IR,则新部署的副本将不会向任何服务器注册(链接到新ADF或对新ADF唯一(,因为模板只记录一个IR,而不会实例化一个IR。
虽然这可以在部署后配置或脚本中修复,但它无法修复的是ADL中的依赖性。这是因为ADL链接的服务想要用IR加密服务主体……但在模板部署时IR不存在(即未在服务器上配置且未激活(。
如果您选择托管服务标识作为ADL链接服务的身份验证,而不是服务主体,那么模板将无法部署,因为没有要加密的凭据,而且看起来资源希望加密某些内容。
现在的解决方案是使用Azure托管的IR进行数据采集连接。不幸的是,这会导致安全问题,因为共享IR不能在我们的ADL Gen 1中列入白名单。
我会随时通知你的。