如何检索 Azure 资源首次创建时的属性?

如何检索 Azure 资源首次创建时的属性?

创建 Azure 资源时,必须指定新创建的资源必须具有的属性。创建后,许多属性都可以更改;例如资源的标签。

我希望能够以编程方式(即不通过门户)检索资源的属性,就像资源首次部署时一样,即使资源不再存在。我不需要很长的历史记录,保留一两天的创建记录就足够了。

我怎样才能实现这个目标?

我尝试过的事情:

  • 查询resourcechanges资源图中的表。我确实获得了创建记录,但该记录不包含资源的属性。这是记录的行为:仅当 changeType 为 Update 时才包含 changes 属性字典。
  • 看看变更分析。这确实给了我删除事件(以及它们在删除时间),但它没有给我创建事件。
  • 事件网格中的资源创建事件。不幸的是,这些事件也不包含属性。(如果其他方法都失败了,我可以设置一些东西,在收到创建事件后立即查询资源,但如果可能的话,我想避免这种情况。)

查看资源组的事件日志时,创建记录如下所示(我已随机化 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": {}
}

newResourceSnapshotId看起来确实可能包含我需要的东西,但我不知道是否有可能检索到它,更不用说如何

如何获取资源在部署时的属性,即使在查询时该资源已被删除?

答案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`

相关内容