使用C#从Azure Compute Gallery获取带版本的镜像定义并按名称过滤
C# 获取Azure Compute Gallery镜像定义及对应版本并按名称过滤
直接调用REST API时,镜像定义和版本是独立的资源接口,需要分别请求,且过滤逻辑需手动实现;更高效的方式是使用Azure .NET ARM SDK完成需求,以下是具体方案:
一、使用Azure .NET ARM SDK(推荐)
1. 安装依赖包
安装最新版的Azure.ResourceManager.Compute NuGet包,这是Azure官方推荐的新一代ARM管理SDK。
2. 代码实现
using Azure.Identity; using Azure.ResourceManager; using Azure.ResourceManager.Compute; // 初始化ARM客户端(支持本地调试和生产环境的默认认证方式) var credential = new DefaultAzureCredential(); var armClient = new ArmClient(credential); // 替换为你的资源信息 string subscriptionId = "你的订阅ID"; string resourceGroupName = "你的资源组名称"; string galleryName = "你的Compute Gallery名称"; string targetImageKeyword = "要过滤的镜像名称关键词"; // 示例:"WindowsServer2022" // 获取目标Compute Gallery资源 var subscription = armClient.GetSubscriptionResource(new ResourceIdentifier($"/subscriptions/{subscriptionId}")); var resourceGroup = await subscription.GetResourceGroupAsync(resourceGroupName); var gallery = await resourceGroup.GetGalleryAsync(galleryName); // 按名称过滤镜像定义,支持模糊匹配 var filteredImageDefinitions = gallery.GetGalleryImages() .Where(img => img.Data.Name.Contains(targetImageKeyword, StringComparison.OrdinalIgnoreCase)); // 遍历每个镜像定义,获取对应的所有镜像版本 foreach (var imageDefinition in filteredImageDefinitions) { Console.WriteLine($"镜像定义: {imageDefinition.Data.Name}"); Console.WriteLine("关联镜像版本:"); // 异步获取所有版本,SDK自动处理分页 await foreach (var version in imageDefinition.GetGalleryImageVersions().GetAllAsync()) { Console.WriteLine($" - 版本号: {version.Data.Name} | 发布时间: {version.Data.PublishedOn}"); } Console.WriteLine("---"); }
关键说明
- 认证逻辑:
DefaultAzureCredential支持本地调试(Azure CLI、VS登录)和生产环境(托管标识、服务主体),无需硬编码密钥。 - 过滤规则:通过
Where结合Contains实现名称模糊匹配,如需精确匹配可替换为img.Data.Name == targetImageKeyword。 - 版本关联:每个镜像定义资源通过
GetGalleryImageVersions()方法直接关联其下所有版本,SDK自动处理响应序列化和分页。
二、若坚持使用REST API
- 过滤获取镜像定义:
调用GET请求并添加$filter参数实现名称过滤:GET /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images?$filter=contains(name,'{targetKeyword}') - 获取对应镜像版本:
对每个返回的镜像定义,调用以下接口获取其关联版本:
注意:需自行处理认证、分页及响应JSON的序列化解析。GET /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{imageDefinitionName}/versions
内容的提问来源于stack exchange,提问作者Pratiksha Natekar
相关产品推荐
相关产品推荐

