0

我想完全自動化我的資源創建過程。不幸的是,全新的訂閱沒有默認註冊的一些資源提供者。例如。 SQL。 這裏描述那是很容易解決:https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-common-deployment-errors#noregisteredproviderfound如何使用Azure流暢資源管理註冊資源提供者?

然而,這無論是使用通過門戶網站或使用PowerShell手動方法只能概括。

我在尋找使用Microsoft.Azure.Management.ResourceManager.Fluent

似乎不一致,我就不能使用C#做一個解決方案,但我不能似乎可以在任何地方找到的功能。

如何使用Azure流暢資源管理爲新訂閱註冊資源提供者?

回答

4

如何使用Azure流暢資源管理爲新訂閱註冊資源提供者?

我們可以使用下面的函數在Azure fluent resource management註冊表提供商。

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

我也做了一個演示。

Preparetion:

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.Registry資源提供

我們還可以列出unregistied提供商

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); 
     } 

包。配置:

<?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> 
1

提供程序自動註冊功能添加到即將發佈的Azure管理SDK(Fluent)1.1版中。