c# - 如何使用Azure流畅资源管理注册资源提供者?

标签 c# azure azure-resource-manager azure-management-api azure-management

我想完全自动化我的资源创建过程。不幸的是,全新的订阅默认没有注册一些资源提供者。例如。 SQL。 这很容易解决,如下所述:https://learn.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-common-deployment-errors#noregisteredproviderfound

但是,这仅概述了手动使用门户或使用 Powershell 的方法。

我正在寻找使用 Microsoft.Azure.Management.ResourceManager.Fluent 的解决方案

我无法使用 C# 来做到这一点,这似乎不一致,但我似乎无法在任何地方找到该功能。

如何使用 Azure 流畅资源管理为新订阅注册资源提供者?

最佳答案

How to register resource providers for a new subscription using Azure fluent resource management?

我们可以在Azure fluent resource management中使用以下函数 给注册提供商。

var result=resourceManagementClient.Providers.Register("provider name");

我还为它做了一个演示。

准备工作:

Registry Azure Active Directory application and assign Role

然后我们就可以获取tenantId,clientId,clientSecretKey

步骤:

1.创建C#控制台项目并引用Microsoft.Azure.Management.ResourceManager.Fluent

2.获取accesstoken

 public static async Task<string> GetAccessToken(string tenantId, string clientId, string clientSecretKey)
    {

        var context = new AuthenticationContext("https://login.windows.net/" + tenantId);
        ClientCredential clientCredential = new ClientCredential(clientId, clientSecretKey);
        var tokenResponse = await context.AcquireTokenAsync("https://management.azure.com/", clientCredential);
        var accessToken = tokenResponse.AccessToken;
        return accessToken;
    }

3.初始化resourceManagementClient对象

TokenCredentials ccCredentials = new TokenCredentials(GetAccessToken(tenantId, appId, secretKey).Result);
            var resourceManagementClient = new ResourceManagementClient(ccCredentials)
            {
                SubscriptionId = subscriptionId
            };

4.注册资源提供者

我们还可以列出未注册的提供商

 var resources = resourceManagementClient.Providers.List().ToList(x => x.RegistrationState.Equals("NotRegistered"));

var result=resourceManagementClient.Providers.Register("provider name");

enter image description here

5.从Azure门户检查。

enter image description here

代码:

        static string appId = "Registried Azure AD Appliction Id";
        static string secretKey = "Client secret Key";
        static string tenantId = "tenant Id ";
        private static string subscriptionId = "subscription Id ";
        public static async Task<string> GetAccessToken(string azureTenantId, string azureAppId, string azureSecretKey)
        {

            var context = new AuthenticationContext("https://login.windows.net/" + tenantId);
            ClientCredential clientCredential = new ClientCredential(appId, secretKey);
            var tokenResponse = await context.AcquireTokenAsync("https://management.azure.com/", clientCredential);
            var accessToken = tokenResponse.AccessToken;
            return accessToken;
        }
        static void Main(string[] args)
        {
            TokenCredentials ccCredentials = new TokenCredentials(GetAccessToken(tenantId, appId, secretKey).Result);
            var resourceManagementClient = new ResourceManagementClient(ccCredentials)
            {
                SubscriptionId = subscriptionId
            };
            var list1 = resourceManagementClient.Providers.List().ToList();
            var resource = resourceManagementClient.Providers.List().ToList().FirstOrDefault(x => x.NamespaceProperty.Equals("TrendMicro.DeepSecurity") && x.RegistrationState.Equals("NotRegistered"));
            var registry =resourceManagementClient.Providers.Register(resource?.NamespaceProperty);
        }

Packages.config:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.Azure.Management.ResourceManager.Fluent" version="1.0.0" targetFramework="net452" />
  <package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="2.28.3" targetFramework="net452" />
  <package id="Microsoft.Rest.ClientRuntime" version="2.3.5" targetFramework="net452" />
  <package id="Microsoft.Rest.ClientRuntime.Azure" version="3.3.5" targetFramework="net452" />
  <package id="Microsoft.Rest.ClientRuntime.Azure.Authentication" version="2.2.12" targetFramework="net452" />
  <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net452" />
</packages>

关于c# - 如何使用Azure流畅资源管理注册资源提供者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44124221/

相关文章:

c# - 如何在 WPF 中使用 TextBlock 填充屏幕,但如果更大则让它添加滚动条?

c# - 从数据表中的一组记录计算第一次登录和最后一次注销之间的持续时间

c# - 完成学习 WCF 中的教程时出现 EndpointNotFoundException

azure - Terraform 没有按正确的顺序销毁 Frontdoor 资源。我怎样才能解决这个问题?

razor - 为什么我的 servicestack 站点的 Razor View 仅在 Azure 上显示元数据页面?

android - 找不到 Azure 通知中心的“调试”选项卡(新 UI)

c# - Mongo C# 驱动程序和 ObjectID JSON 字符串格式

Azure ARM API 返回大小写不一致的位置

azure - ARM模板: Multiple rules(filters) with in an subscription

json - 尝试将 JSON 反编译为 Bicep 时出现错误 `Unable to find a template property named $schema.`