如何使用Java API获取使用资源管理器创建的VM(非经典)列表?为什么我们需要租户ID,客户端ID和客户端密钥来创建com.microsoft.azure.management.compute.ComputeManagementClient'宾语?
可以使用订阅ID和Azure门户凭据完成吗? 随azure-mgmt-compute项目提供的示例需要这些租户ID,客户端ID,因为我们在Azure门户上创建VM(选择资源管理器)时不需要这些详细信息。
答案 0 :(得分:3)
为什么我们需要租户ID,客户端ID和客户端密钥来创建 ' com.microsoft.azure.management.compute.ComputeManagementClient' 对象
在幕后,com.microsoft.azure.management.compute.ComputeManagementClient
使用Azure Resource Manager (ARM) REST API
来执行与虚拟机相关的操作。 ARM API
使用Azure Active Directory (AD)
进行身份验证和授权。为了将Azure AD
用于此目的,您需要在Azure AD
中创建一个应用程序,并授予该应用程序执行Azure Service Management API
的权限。您只需要Tenant Id
,Client Id
和其他内容。因此,用户可以通过允许将应用程序安装在Azure AD
中来使用您的应用程序。 Tenant Id
是您的应用在用户的Azure AD中的唯一ID。 Client Id
是您的应用程序的唯一ID。
一切设置正确后,为了使用库,用户将根据其Azure AD进行身份验证。作为身份验证/授权流程的一部分,用户获取令牌,此库使用此令牌对ARM API进行经过身份验证的请求以管理虚拟机。
可以使用订阅ID和Azure门户凭据完成吗? 使用azure-mgmt-compute项目提供的示例需要这些租户ID, 客户端ID我们在创建VM时不需要这些细节 (在Azure门户上选择资源管理器)。
如果您注意到,您首先需要使用Microsoft帐户或Work / School帐户登录Azure Portal。门户网站软件将令牌作为登录过程的一部分提取。之后,它使用租户ID,客户端ID和此令牌来执行所有操作。所以基本上它正在做同样的事情但是你不可见。
答案 1 :(得分:1)
感谢@GauravMantri详细解释。
如何使用Java API获取使用资源管理器创建的VM(非经典)列表?
根据Virtual Machine REST的Azure参考,您可以使用the REST API中需要authenticate Azure Resource Manager requests的common parameters and headers获取资源组中所有虚拟机的列表。< / p>
以下是使用Java API的示例代码。
// The parameters include clientId, clientSecret, tenantId, subscriptionId and resourceGroupName.
private static final String clientId = "<client-id>";
private static final String clientSecret = "<key>";
private static final String tenantId = "<tenant-id>";
private static final String subscriptionId = "<subscription-id>";
private static final String resouceGroupName = "<resource-group-name>";
// The function for getting the access token via Class AuthenticationResult
private static AuthenticationResult getAccessTokenFromServicePrincipalCredentials()
throws ServiceUnavailableException, MalformedURLException, ExecutionException, InterruptedException {
AuthenticationContext context;
AuthenticationResult result = null;
ExecutorService service = null;
try {
service = Executors.newFixedThreadPool(1);
// TODO: add your tenant id
context = new AuthenticationContext("https://login.windows.net/" + tenantId, false, service);
// TODO: add your client id and client secret
ClientCredential cred = new ClientCredential(clientId, clientSecret);
Future<AuthenticationResult> future = context.acquireToken("https://management.azure.com/", cred, null);
result = future.get();
} finally {
service.shutdown();
}
if (result == null) {
throw new ServiceUnavailableException("authentication result was null");
}
return result;
}
// The process for getting the list of VMs in a resource group
Configuration config = ManagementConfiguration.configure(null, new URI("https://management.core.windows.net"),
subscriptionId,
getAccessTokenFromServicePrincipalCredentials().getAccessToken());
ComputeManagementClient client = ComputeManagementService.create(config);
VirtualMachineListResponse listResponse = client.getVirtualMachinesOperations().list(resourceGroupName);
ArrayList<VirtualMachine> list = listResponse.getVirtualMachines();