Azure API Management에서 환경적으로 지속 가능한 API(미리 보기)

적용 대상: 개발자 | 기본 | 표준 | 프리미엄

이 문서에서는 API 트래픽의 탄소 발자국을 줄이는 데 도움이 되는 Azure API Management의 기능을 소개합니다. 이 기능을 사용하여 다른 Azure 지역의 탄소 배출에 따라 API 트래픽을 조정합니다.

비고

  • 환경 지속 가능성 기능은 현재 제한된 미리 보기로 제공됩니다. 등록하려면 양식을 작성합니다.
  • 이러한 기능은 현재 Azure API Management 클래식 계층(개발자, 기본, 표준, 프리미엄)의 일부 지역에서 사용할 수 있습니다.

지속 가능한 API 정보

조직은 디지털 인프라를 통해 환경에 미치는 영향을 줄이는 데 점점 더 집중하고 있습니다.

API Management를 사용하면 다음과 같은 기능을 통해 이러한 목표를 달성할 수 있습니다.

  • 탄소 강도에 따라 백엔드 영역으로 API 트래픽을 이동시키고 부하를 분산시키다
  • API Management 서비스의 지역에서 탄소 배출을 기반하여 API 트래픽을 조절하십시오.

API가 환경 요인에 따라 트래픽을 처리하는 방법을 최적화하여 다음을 수행할 수 있습니다.

  • API 트래픽의 탄소 배출 감소
  • 기업 지속 가능성 이니셔티브 및 환경 약정 지원
  • 이해 관계자에게 환경적 책임 입증

트래픽 이동

트래픽 이동을 위해서는 탄소 강도 정보를 제공하는 지원되는 Azure 지역에서백 엔드 리소스를 구성해야 합니다. 그런 다음 부하 분산 백 엔드 풀에서 탄소 강도 범주 중 하나를 사용하여 지역화된 백 엔드에 허용되는 최대 탄소 배출 수준을 지정합니다.

이 기능은 기존 부하 분산 및 라우팅 전략과 결합되어 상대적으로 탄소 배출량이 높은 지역의 백 엔드에 대한 트래픽을 제외하는 데 도움이 됩니다.

런타임 시:

  • API Management는 트래픽을 "녹색" 백 엔드(지정된 임계값 미만의 배출량이 있는 지역)로 라우팅하기 위해 최선의 노력을 기울이고 "더티" 백 엔드(지정된 임계값을 초과하는 지역에서)를 제외합니다.
  • API Management는 특정 조건에서 트래픽을 "더티" 백 엔드로 라우팅하여 서비스 연속성을 보장합니다(예: 지역화된 모든 백 엔드가 "더티"이고 다른 백 엔드를 사용할 수 없는 경우).

부하 분산 풀에서 배출량이 낮은 백 엔드로 트래픽을 이동하는 다이어그램.

구성 예제

먼저 선택적 속성을 설정하여 azureRegion 백 엔드를 구성합니다.

{
    "type": "Microsoft.ApiManagement/service/backends", 
    "apiVersion": "2024-10-01-preview", 
    "name": "sustainable-backend", 
    "properties": {
        "url": "https://mybackend.example.com",
        "protocol": "http",
        "azureRegion": "westeurope",
        [...]
  }
}

그런 다음 부하 분산 풀에서 지역화된 백 엔드를 사용하고 속성을 사용하여 배출 임계값을 preferredCarbonEmission 정의합니다.

이 예제에서는 westeurope 지역에서 탄소 집약도가 Medium를 초과하면, sustainable-backend로의 트래픽이 풀 내 다른 백엔드와 비교하여 제외됩니다.

{
    [...]
    "properties": {
        "description": "Load balancer for multiple backends",
        "type": "Pool",
        "pool": {
            "services": [
                {
                    "id": "<sustainable-backend-id>",
                    "weight": 1,
                    "priority": 1,
                    "preferredCarbonEmission": "Medium"
                }
                {
                    
                    "id": "<regular-backend-id>",
                    "weight": 1,
                    "priority": 1
                }
                {
                    "id": "<fallback-backend-id>",
                    "weight": 1,
                    "priority": 2
                }
            ]
        }
    }
} 

트래픽 셰이핑

트래픽 셰이핑을 사용하면 API Management 서비스의 지역(또는 지역)에서 상대적인 탄소 배출 수준에 따라 API 동작을 조정할 수 있습니다. API Management는 API Management 인스턴스의 context.Deployment.SustainabilityInfo.CurrentCarbonIntensity 현재 탄소 강도 범주를 나타내는 컨텍스트 변수를 노출합니다.

다중 지역 배포에서 게이트웨이는 실행되는 각 지역의 탄소 강도를 제공합니다.

정책에서 이 컨텍스트 변수를 사용하여 저탄소 배출 기간 동안 보다 집중적인 트래픽 처리를 사용하도록 설정하거나 높은 탄소 배출 동안 처리를 줄입니다.

예: 고탄소 배출 기간에 동작 조정

다음 예제에서 API Management는 캐시 기간을 연장하고, 더 엄격한 속도 제한을 구현하며, 높은 탄소 배출 기간 동안 로깅 세부 정보를 줄입니다.

<policies>
    <inbound>
        <base />
        <choose>
          <when condition="@(context.Deployment.SustainabilityInfo.CurrentCarbonIntensity == CarbonIntensityCategory.High)">
            <!-- Policies for high carbon emission periods -->
            <cache-store duration="3600" />
            <rate-limit-by-key calls="100" renewal-period="60" counter-key="@(context.Request.IpAddress)" />
            <set-variable name="enableDetailedLogging" value="false" />
          </when>
          <when condition="@(context.Deployment.SustainabilityInfo.CurrentCarbonIntensity == CarbonIntensityCategory.Medium)">
            <!-- Policies for medium carbon emission periods -->
            <cache-store duration="1800" />
            <rate-limit-by-key calls="200" renewal-period="60" counter-key="@(context.Request.IpAddress)" />
            <set-variable name="enableDetailedLogging" value="true" />
          </when>
          <otherwise>
            <!-- Policies for low carbon emission periods -->
            <cache-store duration="900" />
            <rate-limit-by-key calls="300" renewal-period="60" counter-key="@(context.Request.IpAddress)" />
            <set-variable name="enableDetailedLogging" value="true" />
          </otherwise>
        </choose>
    
        <!-- Use the logging variable elsewhere -->
        <choose>
          <when condition="@(context.Variables.GetValueOrDefault<bool>("enableDetailedLogging"))">
            <log-to-eventhub logger-id="detailed-logger">
              @{
                  return JObject.FromObject(context).ToString();
              }
            </log-to-eventhub>
          </when>
          <otherwise>
            <log-to-eventhub logger-id="basic-logger">
              @{
                  var log = new JObject();
                  log["requestId"] = context.RequestId;
                  log["method"] = context.Request.Method;
                  log["url"] = context.Request.Url.ToString();
                  log["statusCode"] = context.Response.StatusCode;
                  return log.ToString();
              }
            </log-to-eventhub>
          </otherwise>
        </choose>
    </inbound>
    [...]    
</policies>

예: 백 엔드 또는 로그에 탄소 강도 정보 전파

다음 예제에서는 현재 탄소 강도에 액세스하고 백 엔드 또는 로그에 전파하는 방법을 보여 줍니다.

<policies>
    [...]
    <outbound>
        <base />
        <set-header name="X-Sustainability-CarbonEmission" exists-action="override">
            <value>@(context.Deployment.SustainabilityInfo.CurrentCarbonIntensity.ToString())</value>
        </set-header>
    </outbound>
    [...]
</policies>

예: 탄소 강도에 따라 추적 상세 정도 조정

다음 예제에서는 현재 탄소 강도 정보를 사용하여 사용자 지정 추적에 전파되는 정보의 양을 조정하는 방법을 보여 있습니다.

<policies>
    [...]
    <inbound>
        <base />
        <choose>
            <when condition="@(context.Deployment.SustainabilityInfo.CurrentCarbonIntensity >= CarbonIntensityCategory.High)">
                <trace source="Orders API" severity="verbose">
                    <message>Lead Created</message>
                </trace>
            </when>
            <otherwise>
                <trace source="Orders API" severity="information">
                    <message>Lead Created</message>
                </trace>
            </otherwise>
        </choose>
    </inbound>
    [...]    
</policies>

지역 가용성

다음 표는 다음을 나타냅니다.

  • API Management 클래식 계층의 인스턴스(개발자, 기본, 표준, 프리미엄)가 지속 가능성 기능을 지원하는 지역(미리 보기 등록 후)
  • 예를 들어 트래픽 이동에 대한 지역화된 백 엔드를 만들기 위해 탄소 배출 강도에 대한 정보를 사용할 수 있는 지역
지역 API Management 지원 탄소 강도 정보
오스트레일리아 중부 ✅
오스트레일리아 중부 2 ✅
Australia East ✅ ✅
Australia Southeast ✅ ✅
Brazil South ✅ ✅
브라질 남동부 ✅
Canada Central ✅
Canada East ✅ ✅
Central India ✅ ✅
Central US ✅ ✅
칠레 중부 ✅
East Asia ✅
East US ✅ ✅
미국 동부 2 ✅ ✅
프랑스 중부 ✅
프랑스 남부 ✅ ✅
독일 북부 ✅
독일 중서부 ✅ ✅
인도네시아 중부 ✅
Israel Central ✅ ✅
Italy North ✅ ✅
Japan East ✅ ✅
일본 서부 ✅ ✅
Jio 인도 중부 ✅
Jio 인도 서부 ✅ ✅
Korea Central ✅
한국 남부 ✅
말레이시아 남부 ✅
Mexico Central ✅ ✅
뉴질랜드 북부 ✅ ✅
미국 중북부 ✅
North Europe ✅ ✅
Norway East ✅ ✅
노르웨이 서부 ✅
폴란드 중부 ✅ ✅
Qatar Central ✅ ✅
남아프리카 북부 ✅ ✅
남아프리카 공화국 서부 ✅
미국 중남부 ✅
South India ✅ ✅
동남아시아 ✅
Spain Central ✅ ✅
스웨덴 중부 ✅ ✅
스웨덴 남부 ✅
Switzerland North ✅ ✅
스위스 서부 ✅ ✅
대만 북부 ✅ ✅
대만 북서부 ✅
대만 서부 ✅
아랍에미리트 중부 ✅
UAE North ✅ ✅
UK South ✅ ✅
UK West ✅ ✅
미국 중서부 ✅ ✅
West Europe ✅ ✅
West India ✅
West US ✅ ✅
미국 서부 2 ✅ ✅
미국 서부 3 ✅ ✅

탄소 강도 범주

다음 표에서는 트래픽 이동 및 트래픽 셰이핑 기능에 사용되는 탄소 강도 범주를 설명합니다. 값은 범위 2 배출의 경우 KWh당 1g 코오레 단위입니다.

카테고리 g CO₂e
사용할 수 없음 N/A
매우 낮음 ≤ 150
Low 151-300
미디엄 301-500
High 501-700
매우 높음 > 700