首页 > 解决方案 > 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?

标签: javapostgresqlazuresdkazure-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 sqlServerManagerAzure课程中使用并查看他们如何使用它并创建了一个经过身份验证的管理器,以防您想使用一些仍在previewor中的服务beta


推荐阅读