创建 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`