如何将 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?

AZURE - 如何将资源从租户迁移到另一个租户

使用 Pulumi 通过 C# 在 APIM 中创建后端资源时输入映射错误

如何将已部署在ASM的资源迁移到ARM中

使用 Pulumi 创建 EKS 后如何修改 `aws-auth` Config Map?

如何使用 Pulumi 向 Web App 添加身份验证