使用AzureJavaSDK列出资源组中存在的Azure数据库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());
}
那么,使用AzureJavaSDK获取有关Azure Database for PostgreSQL
的信息的正确方法是什么?
P. S.一旦我得到有关Azure数据库for PostgreSQL的信息,我将需要类似的有关Azure数据库for MySQL服务器
的信息。
编辑:我看到这个问题,这是问2年前,想知道是否Azure添加了支持Azure数据库的PostgreSQL/MySQL服务器或没有。适用于MySQL/PostgreSQL数据库的AzureJavaSDK?
根据我的测试,我们可以使用java sdkazure-mgmt-Resources
来实现你的需求。举个例子
az login
# it will create a service pricipal and assign a contributor rolen to the sp
az ad sp create-for-rbac -n "MyApp" --scope "/subscriptions/<subscription id>" --sdk-auth
String tenantId = "<the tenantId you copy >";
String clientId = "<the clientId you copy>";
String clientSecret= "<the clientSecre you copy>";
String subscriptionId = "<the subscription id you copy>";
ApplicationTokenCredentials creds = new
ApplicationTokenCredentials(clientId,domain,secret,AzureEnvironment.AZURE);
RestClient restClient =new RestClient.Builder()
.withBaseUrl(AzureEnvironment.AZURE, AzureEnvironment.Endpoint.RESOURCE_MANAGER)
.withSerializerAdapter(new AzureJacksonAdapter())
.withReadTimeout(150, TimeUnit.SECONDS)
.withLogLevel(LogLevel.BODY)
.withResponseBuilderFactory(new AzureResponseBuilder.Factory())
.withCredentials(creds)
.build();
ResourceManager resourceClient= ResourceManager.authenticate(restClient).withSubscription(subscriptionId);
ResourceManagementClientImpl client= resourceClient.inner();
String filter="resourceType eq 'Microsoft.DBforPostgreSQL/servers'"; //The filter to apply on the operation
String expand=null;//The $expand query parameter. You can expand createdTime and changedTime.For example, to expand both properties, use $expand=changedTime,createdTime
Integer top =null;// The number of results to return. If null is passed, returns all resource groups.
PagedList<GenericResourceInner> results= client.resources().list(filter, null,top);
while (true) {
for (GenericResourceInner resource : results.currentPage().items()) {
System.out.println(resource.id());
System.out.println(resource.name());
System.out.println(resource.type());
System.out.println(resource.location());
System.out.println(resource.sku().name());
System.out.println("------------------------------");
}
if (results.hasNextPage()) {
results.loadNextPage();
} else {
break;
}
}
此外,您还可以使用Azure REST API来实现您的需求。有关详细信息,请参阅https://docs.microsoft.com/en-us/rest/api/resources/resources
所以,我用下面的方法实现了它,它可以作为一种替代方法。。。查看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>
在代码中,以下是我如何做到这一点的要点:我已经创建了一个服务主体,并将其信息随身携带。但是,@Jim Xu解释道,任何人尝试此操作都需要使用clientId
,tenantId
,clientSecret
,以及subscriptionId
。
// 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
class指的是com。微软蔚蓝色的经营postgresql。v2017_12_01。服务器
另外,如果您查看一下Azure
类,您会注意到这是它们内部的工作方式。
作为参考,您可以在Azure
类中使用SqlServerManager sqlServerManager
,并查看他们是如何使用它并创建经过身份验证的管理器的,以防您想要使用仍然处于预览
或中的一些服务>beta
.
我们有大量Azure订阅,目前已达到数百个。 我希望生成一个报告(理想情况下使用Azure Powershell或Azure CLI),以递归方式提取分配给每个资源组中每个资源的所有标记的列表,用于40-50个订阅。 目前,我可以列出在资源组级别分配的所有标记,但我无法找到一种方法来列出分配给每个资源组中的各个资源的标记。我要提取此报告的订阅和资源组列表保存在CSV文件中,该文件包括两列,分别显示
我试图完全清理资源组在Azure。 删除资源组不是选项(访问权限:参与者,而不是所有者) 做到这一点的最优雅和明显的方法(也在一些文章中描述)是使用“空”部署模板执行完整的部署: 删除SQL Server开始“...”接受“...”失败“...”开始“...”接受“...”失败“... 你想到主意了。 其他时候效果很好。 您将得到数据库删除的无限循环“开始..接受..失败..开始..接受..失败.
在.NET core 2.0中使用创建时,我遇到了一个问题。 在体系结构中,当在用于创建用户的队列中创建新消息时,服务必须接收该消息并根据其中的信息在数据库中创建用户。 在Visual Studio2017中,我在下创建了一个新项目。 这种的正确实现是什么?在GitHub上有什么例子吗?提前道谢。
在我的Azure云帐户中,我可以访问多个订阅,每个订阅中有多个资源组。每个资源组又可以具有跨不同位置的多个功能。 我可以访问给定资源组的函数,如下所示:
我在azure中有一个设置,在一个资源组中组合了一组资源。我希望我的服务位于西欧,因此我的所有资源都在那里(如果可能) 我刚刚注意到,当创建资源组时,我不小心使用了美国西部。 因此,当前的设置是: 资源组1(美国西部) 应用服务1(西欧) 应用服务2(西欧) SQL服务器(西欧) 存储帐户(西欧) (西欧) 我是否可以更改资源组的位置而不必创建新组并每次迁移? 也许更重要的是:我应该改变位置还是不
我们有一个云服务项目,并设置了一个工人角色。在工作者角色中,我们在特定时间执行任务,并在特定时间将消息放入服务队列。 如果我们有多个工作人员角色启动并运行,消息会被多次调度,并且我们必须设置阻塞以确保一次只有一个工作人员角色在执行任务,那么问题就会出现。 相反,我想做的是使用Azure WebJobs或Azure函数。并让Azure WebJob/Functions调度消息,worker角色可以在