Как получить свойства ресурса Azure такими, какими они были при первом создании ресурса?

При создании ресурса Azure необходимо указать свойства, которыми должен обладать вновь созданный ресурс. После создания многие из этих свойств можно изменить; например, теги ресурса.

Я хотел бы иметь возможность программно (т. е. не через портал) получать свойства ресурса такими, какими они были на момент первоначального развертывания этого ресурса, даже если ресурс больше не существует. Мне не нужна длинная история, дня или двух хранения записи о создании более чем достаточно.

Как я могу этого добиться?

Вещи, которые я пробовал:

  • Запростаблица в графе ресурсов. Я получаю запись о создании, но она не содержит свойств ресурса. Это документированное поведение: словарь свойств изменений включается только в том случае, если для параметра ChangeType установлено значение Update.
  • Смотрим в анализе изменений . Это дает мне событие удаления (и свойства, какими они были на момент удаления ), но не дает мне событие создания .
  • События создания ресурса в сетке событий. К сожалению, они также не содержат свойств. (Если ничего не помогает, я мог бы настроить что-то, что при получении события создания немедленно запрашивало бы ресурс, но, если это вообще возможно, я хотел бы избежать этого.)

При просмотре журнала событий группы ресурсов запись о создании выглядит следующим образом (я рандомизировал GUID):

      {
    "targetResourceType": "microsoft.managedidentity/userassignedidentities",
    "changeAttributes": {
        "previousResourceSnapshotId": null,
        "newResourceSnapshotId": "08585057886968675807_6dad72a1-ddf9-4bf8-95b6-9e20644861f1_1719005433_1695818188",
        "correlationId": "c7a2848b-748a-471b-9fac-622028b717b7",
        "changesCount": 0,
        "timestamp": "2023-09-27T12:36:28.6100000Z"
    },
    "targetResourceId": "/subscriptions/e26fef86-e3b2-4558-98b9-8d8553db6ec1/resourceGroups/rg-jo-test/providers/Microsoft.ManagedIdentity/userAssignedIdentities/changetrackingtest",
    "changeType": "Create",
    "changes": {}
}

Чтоконечно, похоже, что он может содержать то, что мне нужно, но я не знаю, можно ли его получить, не говоря уже о том, как это сделать .

Как я могу получить свойства ресурса в том виде, в каком они были на момент развертывания, даже если ресурс был удален во время запроса?

1 ответ

Запрашивая журналы развертывания с помощью PowerShell:

https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/deployment-history

Но имейте в виду, что существует ограничение в 600 развертываний. Если у вас их больше, Azure автоматически удалит их.

Другой вариант: Azure Monitor предоставляет функцию под названием «Журналы ресурсов Azure» (ранее известную как журналы действий), которая фиксирует историю развертывания и другие действия в вашей подписке Azure. Вы можете настроить отправку этих журналов в Log Analytics для анализа и мониторинга. Затем вы можете запросить их с помощью запросов KQL, вот пример запроса:

      AzureActivity
| where ResourceGroupName == "<YourResourceGroupName>"
| where OperationName == "Microsoft.Resources/deployments/write"
| project ActivityName, Caller, ResourceId, Resource, ResourceGroup, OperationName, Status, EventTimestamp
| order by EventTimestamp desc

Вот еще один запрос

      // Define a function to get the resource snapshot by ID
let get_resource_snapshot = (snapshotId:string) {
    ResourceSnapshots
    | where id == snapshotId
    | project properties
};

// Query the resourcechanges table for the creation events
resourcechanges
| where changeType == "Create"
| extend targetResourceId = tostring(properties.targetResourceId),
         newResourceSnapshotId = tostring(properties.changeAttributes.newResourceSnapshotId)
| join kind=leftouter (Resources | extend targetResourceId = id) on targetResourceId // Join with the Resources table to get the current properties
| project targetResourceId, changeType, changeAttributes.timestamp, currentProperties = properties, newResourceSnapshotId // Select the relevant columns
| extend initialProperties = get_resource_snapshot(newResourceSnapshotId) // Invoke the function to get the initial properties from the snapshot ID
| project-away newResourceSnapshotId // Remove the snapshot ID column
| order by changeAttributes.timestamp desc // Order by the creation timestamp in descending order`
Другие вопросы по тегам