如何通过编程了解azure角色中的当前区域?
我需要以编程方式找到我当前角色所在的当前区域(例如“美国西部”或“美国东部”)。是否有任何API可以找到此信息?只有使用管理API才能获得该信息 通过REST或您可以使用c#Windows Azure管理库(在nuget上预发布) 但需要注意的是,您需要设置管理证书来获取信息 一个更简单的选择是在云服务中创建一个设置,并在创建部署配置时设置值。我这样做,并为我的目标区域提供部署配置如何通过编程了解azure角色中的当前区域?,azure,Azure,我需要以编程方式找到我当前角色所在的当前区域(例如“美国西部”或“美国东部”)。是否有任何API可以找到此信息?只有使用管理API才能获得该信息 通过REST或您可以使用c#Windows Azure管理库(在nuget上预发布) 但需要注意的是,您需要设置管理证书来获取信息 一个更简单的选择是在云服务中创建一个设置,并在创建部署配置时设置值。我这样做,并为我的目标区域提供部署配置 using( var azure = CloudContext.Clients.CreateCompute
using( var azure = CloudContext.Clients.CreateComputeManagementClient(...))
{
var service = await azure.HostedServices.GetDetailedAsync("servicename");
// service.Properties.Location
// service.Properties.AffinityGroup;
}
using(var azure = CloudContext.Clients.CreateManagementClient(...))
{
var affinityGroup = await azure.AffinityGroups.GetAsync("name",new CancellationToken());
// affinityGroup.Location
}
这里。。。是凭据,可以是管理证书,也可以是WAAD oauth令牌。
(ADAL:Active Directory身份验证库)可用于令牌
以下是从证书获取凭据的代码:
public static CertificateCloudCredentials GetCertificateCloudCredentials(
string certificateThumbprint, string subscriptionId)
{
var certificate = CertificateHelper.LoadCertificate(
StoreName.My,
StoreLocation.LocalMachine,
certificateThumbprint);
if (certificate == null)
throw new Exception(
string.Format("Certificate with thumbprint '{0}' not found",
certificateThumbprint));
var cred = new CertificateCloudCredentials(
subscriptionId,
certificate
);
return cred;
}
考虑在服务管理API中使用。当您提供您的角色所属的服务时,您可以检索类似于以下内容的响应。注意我用星号标出的位置字段
<?xml version="1.0" encoding="utf-8"?>
<HostedService xmlns="http://schemas.microsoft.com/windowsazure">
<Url>hosted-service-url</Url>
<ServiceName>hosted-service-name</ServiceName>
<HostedServiceProperties>
<Description>description</Description>
<AffinityGroup>name-of-affinity-group</AffinityGroup>
**<Location>location-of-service</Location >**
<Label>base-64-encoded-name-of-service</Label>
<Status>current-status-of-service</Status>
<DateCreated>creation-date-of-service</DateCreated>
<DateLastModified>last-modification-date-of-service</DateLastModified>
<ExtendedProperties>
<ExtendedProperty>
<Name>name-of-property</Name>
<Value>value-of-property</Value>
</ExtendedProperty>
</ExtendedProperties>
<GuestAgentType>type-of-guest-agent</GuestAgentType>
</HostedServiceProperties>
<DefaultWinRmCertificateThumbprint>thumbprint-of-winrm-certificate</DefaultWinRmCertificateThumbprint>
</HostedService>
托管服务url
托管服务名称
描述
关联组的名称
**服务地点**
base-64-encoded-name-of-service
服务现状
创建服务日期
最后更改服务日期
物业名称
财产价值
客人代理的类型
winrm证书的指纹
该信息可从中获得。Azure公共云中运行的任何VM的REST端点都是http://169.254.169.254/metadata/instance?api-版本=2017-04-02
。元数据对象包含两个子对象,一个用于“计算”,另一个用于“网络”。区域名称出现在“计算”对象的“位置”成员中
访问IMDS数据各种元素的多语言示例代码可从中获得。2018-10-01版IMDS API提供了比我在这里展示的信息多得多的信息;有关详细信息,请参阅
$ curl -s -H Metadata:True "http://169.254.169.254/metadata/instance?api-version=2017-04-02&format=json" | jq .
{
"compute": {
"location": "westus2",
"name": "samplevm",
"offer": "UbuntuServer",
"osType": "Linux",
"platformFaultDomain": "0",
"platformUpdateDomain": "0",
"publisher": "Canonical",
"sku": "18.04-LTS",
"version": "18.04.201904020",
"vmId": "(redacted)",
"vmSize": "Standard_D2s_v3"
},
"network": {
"interface": [
{
"ipv4": {
"ipAddress": [
{
"privateIpAddress": "10.0.0.7",
"publicIpAddress": ""
}
],
"subnet": [
{
"address": "10.0.0.0",
"prefix": "24"
}
]
},
"ipv6": {
"ipAddress": []
},
"macAddress": "(redacted)"
}
]
}
}
你需要从角色内部还是外部找到它?Gaurav,你是说你可以在没有管理api的情况下从角色内部找到它:)@pksorensen你仍然需要使用管理api,但在那里你必须自下而上。如果代码在角色中运行,则您将拥有部署id。然后,您将遍历所有云服务以找到匹配的部署id,然后获取云服务的属性,如您在下面的回答中所述。呵呵,希望您为我们实现了一些新功能;)英雄联盟非常老的博客文章,有点离题,但这应该会有帮助:。说明提供此功能的实际API调用(与C#方法相同)会更有帮助。这取决于采取的路线。我可以在几个小时内给出c#管理库的c#代码。添加到@GregD的回答中:请注意,如果您的云服务是关联组的一部分,则不会返回位置字段。在这种情况下,您需要获取关联组的属性并获取该关联组的位置。这也是云服务的位置。这与您从C#management库获得的信息相同。在部署中,我们所有的亲和群都附加了-weu-wus-sea for west europe ect,这样很容易知道亲和群的位置。再一次。将元数据作为设置放入部署文件很简单,并且节省了从管理api获取信息的大量时间。