java - Azure 使用 Azure Java SDK 列出资源组中的 Azure Database for PostgreSQL 服务器
问题描述
使用 Azure Java SDK 列出我的资源组中存在的 Azure Database for PostgreSQL 服务器的最佳和正确方法是什么?目前,我们使用 ARM 模板进行部署,一旦资源部署完毕,我们希望能够从 Azure 本身获取有关这些资源的信息。我尝试过以下方式:
PagedList<SqlServer> azureSqlServers = azure1.sqlServers().listByResourceGroup("resourceGrpName");
//PagedList<SqlServer> azureSqlServers = azure1.sqlServers().list();
for(SqlServer azureSqlServer : azureSqlServers) {
System.out.println(azureSqlServer.fullyQualifiedDomainName());
}
System.out.println(azureSqlServers.size());
但是返回的列表大小是0
.
但是,对于虚拟机,我可以通过以下方式获取信息:
PagedList<VirtualMachine> vms = azure1.virtualMachines().listByResourceGroup("resourceGrpName");
for (VirtualMachine vm : vms) {
System.out.println(vm.name());
System.out.println(vm.powerState());
System.out.println(vm.size());
System.out.println(vm.tags());
}
那么,获取有关Azure Database for PostgreSQL
使用 Azure Java SDK 的信息的正确方法是什么?
PS 获得有关 Azure Database for PostgreSQL 的信息后,我需要有关Azure Database for MySQL Servers
.
编辑:我已经看到了 2 年前提出的这个问题,并且想知道 Azure 是否添加了对 Azure Database for PostgreSQL/MySQL 服务器的支持。 适用于 MySQL/PostgreSQL 数据库的 Azure Java SDK?
解决方案
所以,我用以下方式实现了它,它可以被视为一种替代方式......查看 Github 上的 Azure SDK for java repo(https://github.com/Azure/azure-sdk-for- java/tree/master/sdk/postgresql),看起来他们在测试版中有它,所以我在 mvnrepository 中搜索了 pom。我在我的项目中导入了以下 pom(azure-mgmt-postgresql 仍处于测试阶段):
<!-- https://mvnrepository.com/artifact/com.microsoft.azure.postgresql.v2017_12_01/azure-mgmt-postgresql -->
<dependency>
<groupId>com.microsoft.azure.postgresql.v2017_12_01</groupId>
<artifactId>azure-mgmt-postgresql</artifactId>
<version>1.0.0-beta-5</version>
</dependency>
在代码中,以下是我如何做到这一点的要点:我已经创建了一个服务主体并拥有它的信息。但是,任何尝试这样做的人都需要clientId
, tenantId
, clientSecret
, 和subscriptionId
他们一起,@Jim Xu 解释的方式。
// create the credentials object
ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(clientId, tenantId, clientSecret, AzureEnvironment.AZURE);
// build a rest client object configured with the credentials created above
RestClient restClient = new RestClient.Builder()
.withBaseUrl(credentials.environment(), AzureEnvironment.Endpoint.RESOURCE_MANAGER)
.withCredentials(credentials)
.withSerializerAdapter(new AzureJacksonAdapter())
.withResponseBuilderFactory(new AzureResponseBuilder.Factory())
.withInterceptor(new ProviderRegistrationInterceptor(credentials))
.withInterceptor(new ResourceManagerThrottlingInterceptor())
.build();
// use the PostgreSQLManager
PostgreSQLManager psqlManager = PostgreSQLManager.authenticate(restClient, subscriptionId);
PagedList<Server> azurePsqlServers = psqlManager.servers().listByResourceGroup(resourceGrpName);
for(Server azurePsqlServer : azurePsqlServers) {
System.out.println(azurePsqlServer.fullyQualifiedDomainName());
System.out.println(azurePsqlServer.userVisibleState().toString());
System.out.println(azurePsqlServer.sku().name());
}
注:Server
类指com.microsoft.azure.management.postgresql.v2017_12_01.Server
此外,如果您查看Azure
课程,您会注意到他们在内部是这样做的。
作为参考,您可以SqlServerManager sqlServerManager
在Azure
课程中使用并查看他们如何使用它并创建了一个经过身份验证的管理器,以防您想使用一些仍在preview
or中的服务beta
。