如何将 Pulumi Azure 资源迁移到 Azure-Nextgen?
Posted
技术标签:
【中文标题】如何将 Pulumi Azure 资源迁移到 Azure-Nextgen?【英文标题】:How do I migrate a Pulumi Azure resource to Azure-Nextgen? 【发布时间】:2021-05-23 01:11:30 【问题描述】:我正在尝试将 Azure 存储帐户(最初使用旧版 Azure 提供程序创建)的 pulumi 代码迁移到 Azure-Nextgen 提供程序。 Aliases
属性未按预期工作。这可能吗,还是我遗漏了一些明显的东西?:
原文:
var storageAccount = new Account($"storage_storageName", new AccountArgs
Name = $"storageName",
ResourceGroupName = resourceGroup.Name,
AccountReplicationType = "LRS",
AccountTier = "Standard",
Location = resourceGroup.Location,
IsHnsEnabled = true,
MinTlsVersion = "TLS1_2"
,
new CustomResourceOptions()
Protect = true
);
新:
var storageAccount = new StorageAccount($"storage_storageName",
new StorageAccountArgs()
AccountName = $"storageName",
Location = location,
ResourceGroupName = resourceGroup.Name,
Kind = Kind.StorageV2,
AccessTier = AccessTier.Hot,
Sku = new SkuArgs()
Name = SkuName.Standard_LRS
,
IsHnsEnabled = true,
MinimumTlsVersion = MinimumTlsVersion.TLS1_2
,
new CustomResourceOptions()
Protect = true,
Aliases =
new Alias
Urn = "urn:pulumi:myEnvironment::myStack::azure:storage/account:Account::storage_storageName"
);
Pulumi 在控制台预览:
azure:storage:Account (storage_storageName):
error: Preview failed: refusing to delete protected resource 'urn:pulumi:myEnvironment::myStack::azure:storage/account:Account::storage_storageName'
【问题讨论】:
【参考方案1】:别名不能跨提供商使用。 “经典” Azure 提供程序中的资源形态与下一代原生 Azure 提供程序不同,因此状态不兼容。
您必须遵循以下手动流程:
使用 NextGen 将现有存储帐户作为新资源导入
pulumi import azure-nextgen:storage/latest:StorageAccount storage /subscriptions/01234567-89ab-cdef-0123-456789abcdef/resourceGroups/my-rgca05c9f8/providers/Microsoft.Storage/storageAccounts/storagea791686
上面的命令将导入状态并为您打印出代码。将代码复制到您的程序中。
现在,从您的状态(不是从 Azure)中删除旧资源
pulumi state delete urn:pulumi:dev::ts::azure:storage/account:Account::storage
从您的 Pulumi 程序中删除旧资源。
运行pulumi up
以确保一切正常。您应该不会看到任何变化。
在接下来的几周内会有一个迁移指南,当它出来时我会用一个链接更新这个答案。
【讨论】:
我用一个没有依赖关系的资源测试了这个过程,它可以工作 :) 但是,对于其中已经配置了容器和其他资源的存储帐户,我得到了error: This resource can't be safely deleted because the following resources depend on it:
。有没有办法在不删除然后重新导入所有容器的情况下做到这一点?
您需要更新您的程序,以便容器引用新导入的存储帐户并运行pulumi up
以更新状态中的依赖关系图。然后你应该能够从状态中删除旧资源。或者,您可以先迁移容器,然后再移动帐户。以上是关于如何将 Pulumi Azure 资源迁移到 Azure-Nextgen?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Pulumi 在存储帐户上启用 Azure Defender?
使用 Pulumi 通过 C# 在 APIM 中创建后端资源时输入映射错误