Как перенести ресурс Pulumi Azure в Azure-Nextgen?

Я пытаюсь перенести код Pulumi для учетной записи хранения Azure (которая изначально была создана с помощью устаревшего поставщика Azure) на поставщика 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'

person UnknownBeef    schedule 20.02.2021    source источник


Ответы (1)


Псевдонимы не работают между поставщиками. Форма ресурсов в классическом поставщике Azure отличается от собственного поставщика Azure следующего поколения, поэтому состояние несовместимо.

Вам нужно будет выполнить следующий ручной процесс:

  1. Импортируйте существующую учетную запись хранения как новый ресурс с помощью NextGen

    pulumi import azure-nextgen:storage/latest:StorageAccount storage /subscriptions/01234567-89ab-cdef-0123-456789abcdef/resourceGroups/my-rgca05c9f8/providers/Microsoft.Storage/storageAccounts/storagea791686
    
  2. Приведенная выше команда импортирует состояние и распечатает код для вас. Скопируйте код в свою программу.

  3. Теперь удалите старый ресурс из своего состояния (не из Azure).

    pulumi state delete urn:pulumi:dev::ts::azure:storage/account:Account::storage
    
  4. Удалите старый ресурс из своей программы Pulumi.

  5. Запустите pulumi up, чтобы убедиться, что все работает. Вы не должны увидеть никаких изменений.

В ближайшие пару недель выйдет руководство по миграции, я обновлю этот ответ ссылкой, когда он выйдет.

person Mikhail Shilkov    schedule 20.02.2021
comment
Я протестировал этот процесс с ресурсом без зависимостей, и он работает :) Однако для учетной записи хранения с контейнерами и другими ресурсами, уже подготовленными внутри нее, я получаю error: This resource can't be safely deleted because the following resources depend on it:. Есть ли способ сделать это без удаления, а затем повторного импорта всех контейнеров? - person UnknownBeef; 21.02.2021
comment
Вам необходимо обновить свою программу, чтобы контейнеры ссылались на недавно импортированную учетную запись хранения и запускали pulumi up для обновления графа зависимостей в состоянии. Тогда вы сможете удалить старый ресурс из состояния. В качестве альтернативы вы можете сначала перенести контейнеры, а затем переместить учетную запись. - person Mikhail Shilkov; 21.02.2021