Miljömässigt hållbara API:er i Azure API Management (förhandsversion)

GÄLLER FÖR: Utvecklare | Grundläggande | Standard | Premie

Den här artikeln innehåller funktioner i Azure API Management som hjälper dig att minska koldioxidavtrycket för DIN API-trafik. Använd funktionerna för att justera API-trafik baserat på koldioxidutsläpp i olika Azure-regioner.

Anmärkning

  • Miljöhållbarhetsfunktioner är för närvarande i begränsad förhandsversion. Fyll i formuläret för att registrera dig.
  • Dessa funktioner är för närvarande tillgängliga i utvalda regioner på klassiska Azure API Management-nivåer (Developer, Basic, Standard, Premium).

Om hållbara API:er

Organisationer fokuserar i allt högre grad på att minska sin miljöpåverkan genom sin digitala infrastruktur.

Med API Management kan du uppnå dessa mål med funktioner som hjälper dig:

Genom att optimera hur dina API:er hanterar trafik baserat på miljöfaktorer kan du:

  • Minska koldioxidutsläppen för DIN API-trafik
  • Stödja företagets hållbarhetsinitiativ och miljöåtaganden
  • Visa miljöansvar för intressenter

Trafikomläggning

Trafikväxling kräver att du konfigurerar en serverdelsresurs i en Azure-region som stöds och som tillhandahåller information om koldioxidintensitet. I en lastbalanserad serverdelspool anger du sedan den maximala godtagbara koldioxidutsläppsnivån för den regionaliserade serverdelen med hjälp av en av kategorierna för koldioxidintensitet.

Den här funktionen, i kombination med dina befintliga strategier för belastningsutjämning och routning, hjälper dig att exkludera trafik till serverdelar i regioner med relativt högre koldioxidutsläpp.

Vid körning:

  • API Management gör ett bästa försök att dirigera trafik till "gröna" serverdelar (i regioner med utsläpp under dina angivna tröskelvärden) och exkluderar "smutsiga" serverdelar (i regioner med utsläpp över angivna tröskelvärden).
  • API Management dirigerar trafik till "smutsiga" serverdelar under vissa förhållanden för att säkerställa tjänstkontinuitet , till exempel när alla regionaliserade serverdelar är "smutsiga" och andra serverdelar inte är tillgängliga.

Diagram över att flytta trafik till en serverdel med lägre utsläpp i lastbalanserad pool.

Konfigurationsexempel

Först, konfigurera en backend i en Azure-region som stöds genom att ställa in den valfria azureRegion egenskapen:

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

Använd sedan den regionaliserade serverdelen i en belastningsutjämningspool och definiera tröskelvärdet för utsläpp med hjälp av en preferredCarbonEmission egenskap.

I det här exemplet, om koldioxidintensiteten i westeurope-regionen överskrider Medium, utesluts trafik till sustainable-backend jämfört med de andra backender i poolen.

{
    [...]
    "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
                }
            ]
        }
    }
} 

Trafikformning

Med trafikformning kan du justera API-beteendet baserat på relativa koldioxidutsläppsnivåer i API Management-tjänstens region (eller regioner). API Management exponerar context.Deployment.SustainabilityInfo.CurrentCarbonIntensitykontextvariabeln, vilket anger den aktuella koldioxidintensitetskategorin för din API Management-instans.

I distributioner i flera regioner tillhandahåller gatewayen koldioxidintensiteten för respektive region som den körs i.

Använd den här kontextvariabeln i dina principer för att möjliggöra mer intensiv trafikbearbetning under perioder med låga koldioxidutsläpp eller minska bearbetningen under höga koldioxidutsläpp.

Exempel: Justera beteendet under perioder med höga koldioxidutsläpp

I följande exempel utökar API Management cachevaraktigheterna, implementerar striktare hastighetsbegränsning och minskar loggningsinformationen under perioder med höga koldioxidutsläpp.

<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>

Exempel: Sprida koldioxidintensitetsinformation till serverdelen eller i loggar

I följande exempel visas hur du kommer åt den aktuella koldioxidintensiteten och sprider den till serverdelen eller i loggarna.

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

Exempel: Justera spårningsdetaljrikedom baserat på koldioxidintensitet

I följande exempel visas hur du använder den aktuella koldioxidintensitetsinformationen för att justera mängden information som sprids i en anpassad spårning.

<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>

Tillgänglighet i regionen

Följande tabell anger:

  • Regioner där instanser på de klassiska API Management-nivåerna (Developer, Basic, Standard, Premium) stöder hållbarhetsfunktioner (efter registrering för förhandsversion)
  • Regioner där det finns information om koldioxidutsläppens intensitet, till exempel för att skapa regionaliserade serverdelar för trafikväxling
Region Stöd för API Management Information om koldioxidintensitet
Australien centrala ✅
Australien Central 2 ✅
Australia East ✅ ✅
Australia Southeast ✅ ✅
Syd-Brasilien ✅ ✅
Brasilien Sydost ✅
Canada Central ✅
Canada East ✅ ✅
Centralindien ✅ ✅
Central US ✅ ✅
Centrala Chile ✅
Östasien ✅
East US ✅ ✅
Östra USA 2 ✅ ✅
Frankrike Centrala ✅
Södra Frankrike ✅ ✅
Tyskland Nord ✅
Tyskland Västcentrala ✅ ✅
Centrala Indonesien ✅
Israel Centrala ✅ ✅
Italy North ✅ ✅
Japan Öst ✅ ✅
Västra Japan ✅ ✅
Jio Indien Central ✅
Jio Västra Indien ✅ ✅
Korea Central ✅
Sydkorea ✅
Södra Malaysia ✅
Mexico Central ✅ ✅
Nya Zeeland, norra ✅ ✅
Norra centrala USA ✅
North Europe ✅ ✅
Norway East ✅ ✅
Västra Norge ✅
Centrala Polen ✅ ✅
Qatar Central ✅ ✅
Sydafrika Nord ✅ ✅
Sydafrika Väst ✅
Södra Centrala USA ✅
South India ✅ ✅
Sydostasien ✅
Spain Central ✅ ✅
Centrala Sverige ✅ ✅
Sverige, södra ✅
Switzerland North ✅ ✅
Switzerland West ✅ ✅
Norra Taiwan ✅ ✅
Taiwan Nordväst ✅
Taiwan, västra ✅
Förenade Arabemiraten Centrala ✅
UAE North ✅ ✅
UK South ✅ ✅
UK West ✅ ✅
Västra centrala USA ✅ ✅
West Europe ✅ ✅
West India ✅
West US ✅ ✅
Västra USA 2 ✅ ✅
Västra USA 3 ✅ ✅

Kategorier för koldioxidintensitet

I följande tabell beskrivs de koldioxidintensitetskategorier som används i funktionerna för trafikväxling och trafikformning. Värdena anges i gram CO₂e per KWh för scope 2-utsläpp.

Kategori g CO₂e
Ej tillgänglig N/A
Mycket Låg ≤ 150
Low 151-300
Medel 301-500
High 501-700
MycketHög > 700