Azure에 대한 고객의 사용률 레코드 가져오기
적용 대상: 파트너 센터 | Microsoft Cloud for US Government 파트너 센터
Azure 활용 API를 사용하여 지정된 기간 동안 고객의 Azure 구독에 대한 사용 기록을 가져올 수 있습니다.
필수 조건
자격 증명(파트너 센터 인증에서 설명). 이 시나리오는 독립 실행형 앱과 App+User 자격 증명을 모두 사용하여 인증을 지원합니다.
고객 ID (
customer-tenant-id
). 고객의 ID를 모르는 경우 고객 작업 영역, 고객 목록에서 고객, 계정을 선택하여 파트너 센터에서 조회할 수 있습니다. 고객의 계정 페이지에서 고객 계정 정보 섹션에서 Microsoft ID를 찾습니다. Microsoft ID는 고객 ID(customer-tenant-id
)와 동일합니다.구독 식별자입니다.
이 API는 임의 시간 범위에 대한 일일 및 시간별 평가되지 않은 소비량을 반환합니다. 그러나 이 API는 Azure 계획에 대해 지원되지 않습니다. Azure 플랜이 있는 경우 청구서 청구되지 않은 소비 품목 가져오기 및 청구서 청구된 소비 품목 가져오기 문서를 참조하세요. 이 문서에서는 리소스당 미터당 일일 수준에서 평가된 소비량을 얻는 방법을 설명합니다. 이 속도 사용량은 Azure 사용률 API에서 제공하는 일일 곡물 데이터와 동일합니다. 청구서 식별자를 사용하여 청구된 사용량 현황 데이터를 검색해야 합니다. 또는 현재 및 이전 기간을 사용하여 청구되지 않은 사용량 추정치를 가져올 수 있습니다. 시간 단위 데이터 및 임의 날짜 범위 필터는 현재 Azure 플랜 구독 리소스에 대해 지원되지 않습니다.
Azure 활용 API
이 Azure 사용률 API는 청구 시스템에서 사용률이 보고된 시기를 나타내는 기간 동안 사용률 레코드에 대한 액세스를 제공합니다. 조정 파일을 만들고 계산하는 데 사용되는 것과 동일한 사용률 데이터에 대한 액세스를 제공합니다. 그러나 청구 시스템 조정 파일 논리에 대한 지식은 없습니다. 조정 파일 요약 결과가 동일한 기간 동안 이 API에서 정확히 검색된 결과와 일치할 것으로 예상해서는 안 됩니다.
예를 들어 청구 시스템은 동일한 사용률 데이터를 사용하고 대기 시간 규칙을 적용하여 조정 파일에서 고려되는 사항을 결정합니다. 청구 기간이 종료되면 청구 기간이 종료되는 날짜가 끝날 때까지의 모든 사용량이 조정 파일에 포함됩니다. 청구 기간이 종료된 후 24시간 이내에 보고되는 청구 기간 내의 지연 사용량은 다음 조정 파일에서 고려됩니다. 파트너의 청구 방식에 대한 대기 시간 규칙은 Azure 구독에 대한 사용량 데이터 가져오기를 참조하세요.
이 REST API는 페이징됩니다. 응답 페이로드가 단일 페이지보다 큰 경우 다음 링크를 따라 사용률 레코드의 다음 페이지를 가져와야 합니다.
시나리오: 파트너 A가 Azure 레거시 구독(145P)의 청구 소유권을 파트너 B로 이전했습니다.
파트너가 Azure 레거시 구독의 청구 소유권을 다른 파트너에게 양도하는 경우 새 파트너가 이전된 구독에 대해 사용률 API를 호출할 때 Azure 권한 ID 대신 상거래 구독 ID(파트너 센터 계정에 표시됨)를 사용해야 합니다. Azure 권한 ID는 AOBO(AOBO)를 대신하여 고객의 Azure Portal에 관리 경우에만 파트너 B에 대해 표시됩니다.
전송된 구독에 대한 사용률 API를 성공적으로 호출하려면 새 파트너가 상거래 구독 ID를 사용해야 합니다.
C#
Azure 사용률 레코드를 가져오려면 다음을 수행합니다.
고객 ID 및 구독 ID를 가져옵니다.
IAzureUtilizationCollection.Query 메서드를 호출하여 사용률 레코드가 포함된 ResourceCollection을 반환합니다.
Azure 사용률 레코드 열거자를 가져와 사용률 페이지를 트래버스합니다. 리소스 컬렉션이 페이징되므로 이 단계가 필요합니다.
- 샘플: 콘솔 테스트 앱
- 프로젝트: 파트너 센터 SDK 샘플
- 클래스: GetAzureSubscriptionUtilization.cs
// IAggregatePartner partnerOperations;
// string customerId;
// string subscriptionId;
IPartner partner = PartnerService.Instance.CreatePartnerOperations(credentials);
// Retrieve the utilization records for the last year in pages of 100 records.
var utilizationRecords = partner.Customers[customerId].Subscriptions[subscriptionId].Utilization.Azure.Query(
DateTimeOffset.Now.AddYears(-1),
DateTimeOffset.Now,
size: 100);
// Create an Azure utilization enumerator which will aid us in traversing the utilization pages.
var utilizationRecordEnumerator = partner.Enumerators.Utilization.Azure.Create(utilizationRecords);
while (utilizationRecordEnumerator.HasValue)
{
//
// Insert code here to work with this page.
//
// Get the next page.
utilizationRecordEnumerator.Next();
}
Java
파트너 센터 Java SDK를 사용하여 파트너 센터 리소스를 관리할 수 있습니다. 파트너 커뮤니티에서 기본 오픈 소스 프로젝트이며 Microsoft에서 공식적으로 지원하지 않습니다. 문제가 발생한 경우 커뮤니티에서 도움을 받거나 GitHub에서 문제를 열 수 있습니다.
Azure 사용률 레코드를 가져오려면 먼저 고객 식별자와 구독 식별자가 필요합니다. 그런 다음, IAzureUtilizationCollection.query 함수를 호출하여 사용률 레코드가 포함된 ResourceCollection을 반환합니다. 리소스 컬렉션이 페이징되므로 Azure 사용률 레코드 열거자를 가져와 사용률 페이지를 트래버스해야 합니다.
// IAggregatePartner partnerOperations;
// String customerId;
// String subscriptionId;
ResourceCollection<AzureUtilizationRecord> utilizationRecords = partnerOperations.getCustomers()
.byId(customerId).getSubscriptions().byId(subscriptionId)
.getUtilization().getAzure().query(
new DateTime().minusYears(1),
new DateTime(),
AzureUtilizationGranularity.Daily,
true,
100);
// Create an Azure utilization enumerator which will aid us in traversing the utilization pages
IResourceCollectionEnumerator<ResourceCollection<AzureUtilizationRecord>> utilizationRecordEnumerator =
partnerOperations.getEnumerators().getUtilization().getAzure().create(utilizationRecords);
while (utilizationRecordEnumerator.hasValue())
{
//
// Insert code here to work with this page.
//
// get the next page
utilizationRecordEnumerator.next();
}
PowerShell
파트너 센터 PowerShell 모듈을 사용하여 파트너 센터 리소스를 관리할 수 있습니다. 파트너 커뮤니티에서 기본 오픈 소스 프로젝트이며 Microsoft에서 공식적으로 지원하지 않습니다. 문제가 발생한 경우 커뮤니티에서 도움을 받거나 GitHub에서 문제를 열 수 있습니다.
Azure 사용률 레코드를 가져오려면 먼저 고객 식별자와 구독 식별자가 필요합니다. 그런 다음 Get-PartnerCustomerSubscriptionUtilization을 호출합니다. 이 명령은 지정된 기간 동안 사용할 수 있는 모든 레코드를 반환합니다.
# $customerId
# $subscriptionId
Get-PartnerCustomerSubscriptionUtilization -CustomerId $customerId -SubscriptionId $subscriptionId -StartDate (Get-Date).AddDays(-2).ToUniversalTime() -Granularity Hourly -ShowDetails
REST 요청
요청 구문
메서드 | 요청 URI |
---|---|
GET | {baseURL}/v1/customers/{customer-tenant-id}/subscriptions/{subscription-id}/utilizations/azure?start_time={start-time}&end_time={end-time}&granularity={granularity}&show_details={True} |
URI 매개 변수
다음 경로 및 쿼리 매개 변수를 사용하여 사용률 레코드를 가져옵니다.
이름 | Type | 필수 | 설명 |
---|---|---|---|
customer-tenant-id | string | 예 | 고객을 식별하는 GUID 형식 문자열입니다. |
구독 ID | string | 예 | 구독을 식별하는 GUID 형식 문자열입니다. |
start_time | UTC 날짜-시간 오프셋 형식의 문자열 | 예 | 청구 시스템에서 사용률이 보고된 시간을 나타내는 시간 범위의 시작입니다. |
end_time | UTC 날짜-시간 오프셋 형식의 문자열 | 예 | 청구 시스템에서 사용률이 보고된 시간을 나타내는 시간 범위의 끝입니다. |
세분성 | string | 아니요 | 사용 집계의 세분성을 정의합니다. 사용 가능한 옵션은 다음과 daily 같습니다(기본값) 및 hourly . |
show_details | 부울 값 | 아니요 | 인스턴스 수준 사용 세부 정보를 가져올지 여부를 지정합니다. 기본값은 true 입니다. |
size | 번호 | 아니요 | 단일 API 호출에서 반환하는 집계 수를 지정합니다. 기본값은 1000입니다. 최대값은 1000입니다. |
요청 헤더
자세한 내용은 파트너 센터 REST 헤더를 참조하세요.
요청 본문
없음
요청 예제
다음 예제 요청은 조정 파일이 7/2- 8/1 기간 동안 표시할 것과 유사한 결과를 생성합니다. 이러한 결과는 정확히 일치하지 않을 수 있습니다(자세한 내용은 Azure 사용률 API 섹션 참조).
이 예제 요청은 오전 12시(UTC)에서 7/2에서 오전 12시(UTC)에 8/2 사이에 청구 시스템에 보고된 사용률 데이터를 반환합니다.
GET https://api.partnercenter.microsoft.com/v1/customers/E499C962-9218-4DBA-8B83-8ADC94F47B9F/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/utilizations/azure?start_time=2017-07-02T00:00:00-08:00&end_time=2017-08-02T00:00:00-08:00 HTTP/1.1
Authorization: Bearer <token>
Accept: application/json
MS-RequestId: e6a3b6b2-230a-4813-999d-57f883b60d38
MS-CorrelationId: aaaa0000-bb11-2222-33cc-444444dddddd
X-Locale: en-US
Host: api.partnercenter.microsoft.com
REST 응답
성공하면 이 메서드는 응답 본문에 Azure 사용률 레코드 리소스 컬렉션을 반환합니다. Azure 사용률 데이터가 종속 시스템에서 아직 준비되지 않은 경우 이 메서드는 Retry-After 헤더가 있는 HTTP 상태 코드 204를 반환합니다.
응답 성공 및 오류 코드
각 응답에는 성공 또는 실패와 추가 디버깅 정보를 나타내는 HTTP 상태 코드가 함께 제공됩니다. 네트워크 추적 도구를 사용하여 HTTP 상태 코드, 오류 코드 형식 및 추가 매개 변수를 읽습니다.
응답 예제
HTTP/1.1 200 OK
Content-Length: 2630
Content-Type: application/json; charset=utf-8
MS-CorrelationId: aaaa0000-bb11-2222-33cc-444444dddddd
MS-RequestId: e6a3b6b2-230a-4813-999d-57f883b60d38
MS-CV: PjuGoYrw806o6A3Y.0
MS-ServerId: 030020525
Date: Fri, 04 Aug 2017 23:48:28 GMT
{
"totalCount": 2,
"items": [
{
"usageStartTime": "2017-06-07T17:00:00-07:00",
"usageEndTime": "2017-06-08T17:00:00-07:00",
"resource": {
"id": "8767aeb3-6909-4db2-9927-3f51e9a9085e",
"name": "Storage Admin",
"category": "Storage",
"subcategory": "Block Blob",
"region": "Azure Stack"
},
"quantity": 0.217790327034891,
"unit": "1 GB/Hr",
"infoFields": {},
"instanceData": {
"resourceUri": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourcegroups/system.local/providers/Microsoft.Storage/storageaccounts/srphealthaccount",
"location": "azurestack",
"partNumber": "",
"orderNumber": "",
"additionalInfo": {
"azureStack.MeterId": "09F8879E-87E9-4305-A572-4B7BE209F857",
"azureStack.SubscriptionId": "cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
"azureStack.Location": "local",
"azureStack.EventDateTime": "06/05/2017 06:00:00"
}
},
"attributes": {
"objectType": "AzureUtilizationRecord"
}
},
{
"usageStartTime": "2017-06-07T17:00:00-07:00",
"usageEndTime": "2017-06-08T17:00:00-07:00",
"resource": {
"id": "8767aeb3-6909-4db2-9927-3f51e9a9085e",
"name": "Storage Admin",
"category": "Storage",
"subcategory": "Block Blob",
"region": "Azure Stack"
},
"quantity": 0.217790327034891,
"unit": "1 GB/Hr",
"infoFields": {},
"instanceData": {
"resourceUri": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourcegroups/system.local/providers/Microsoft.Storage/storageaccounts/srphealthaccount",
"location": "azurestack",
"partNumber": "",
"orderNumber": "",
"additionalInfo": {
"azureStack.MeterId": "09F8879E-87E9-4305-A572-4B7BE209F857",
"azureStack.SubscriptionId": "cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
"azureStack.Location": "local",
"azureStack.EventDateTime": "06/05/2017 06:00:00"
},
"attributes": {
"objectType": "AzureUtilizationRecord"
}
},
"links": {
"self": {
"uri": "customers/E499C962-9218-4DBA-8B83-8ADC94F47B9F/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/utilizations/azure?start_time=2017-06-10T00:00:00Z&end_time=2017-07-09T00:00:00Z&granularity=Daily&show_details=True&size=1000",
"method": "GET",
"headers": []
}
},
"attributes": {
"objectType": "Collection"
}
}
]
}