Delen via


Milieuvriendelijke API's in Azure API Management (preview)

VAN TOEPASSING OP: ontwikkelaar | Basic | Standard | Premium

In dit artikel worden functies in Azure API Management geïntroduceerd waarmee u de koolstofvoetafdruk van uw API-verkeer kunt verminderen. Gebruik de functies om API-verkeer aan te passen op basis van koolstofemissies in verschillende Azure-regio's.

Opmerking

  • Milieuduurzaamheidsfuncties zijn momenteel in beperkte preview. Als u zich wilt registreren, vult u het formulier in.
  • Deze functies zijn momenteel beschikbaar in bepaalde regio's in de klassieke Azure API Management-lagen (Developer, Basic, Standard, Premium).

Over duurzame API's

Organisaties richten zich steeds meer op het verminderen van hun impact op het milieu via hun digitale infrastructuur.

Met API Management kunt u deze doelen bereiken met functies die u helpen:

Door te optimaliseren hoe uw API's verkeer verwerken op basis van omgevingsfactoren, kunt u het volgende doen:

  • Koolstofuitstoot van uw API-verkeer verminderen
  • Ondersteuning voor initiatieven voor bedrijfsduurzaamheid en milieuverplichtingen
  • De verantwoordelijkheid voor het milieu demonstreren voor belanghebbenden

Verkeer omleiden

Voor verkeerverschuiving moet een back-endresource worden geconfigureerd in een ondersteunde Azure-regio die informatie over koolstofgehalte biedt. Geef vervolgens in een back-endpool met gelijke taakverdeling het maximaal acceptabele koolstofemissiesniveau voor de ge regionaliseerde back-end op met behulp van een van de categorieën koolstofgehalte.

Deze mogelijkheid, gecombineerd met uw bestaande strategieën voor taakverdeling en routering, helpt u bij het uitsluiten van verkeer naar back-ends in regio's met relatief hogere koolstofemissies.

Tijdens uitvoeringstijd:

  • API Management doet er alles aan om verkeer te routeren naar 'groene' back-ends (in regio's met emissies onder de opgegeven drempelwaarden) en sluit 'vuile' back-ends uit (in regio's met emissies boven de opgegeven drempelwaarden).
  • API Management routeert verkeer naar 'vuile' back-ends onder bepaalde voorwaarden om de continuïteit van de service te garanderen, bijvoorbeeld wanneer alle geregionaliseerde back-ends 'dirty' zijn en andere back-ends niet beschikbaar zijn.

Diagram van het verplaatsen van verkeer naar een back-end met lagere emissies in een pool met gelijke taakverdeling.

Configuratievoorbeeld

Configureer eerst een back-end in een ondersteunde Azure-regio door de optionele azureRegion eigenschap in te stellen:

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

Gebruik vervolgens de geregionaliseerde back-end in een pool met gelijke taakverdeling en definieer de emissiedrempel met behulp van een preferredCarbonEmission eigenschap.

Als in dit voorbeeld de koolstofintensiteit in de westeurope regio Medium overschrijdt, wordt het verkeer naar de sustainable-backend uitgesloten in vergelijking met de andere backends in de pool.

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

Verkeer vormgeven

Met het vormgeven van verkeer kunt u API-gedrag aanpassen op basis van relatieve koolstofuitgifteniveaus in de regio (of regio's) van uw API Management-service. API Management toont de context.Deployment.SustainabilityInfo.CurrentCarbonIntensitycontextvariabele, die de huidige koolstofgehaltecategorie voor uw API Management-exemplaar aangeeft.

Bij implementaties in meerdere regio's biedt de gateway het koolstofgehalte van de respectieve regio waarin deze wordt uitgevoerd.

Gebruik deze contextvariabele in uw beleid om meer intensieve verkeersverwerking mogelijk te maken tijdens perioden van lage koolstofemissies of om de verwerking tijdens een hoge koolstofuitstoot te verminderen.

Voorbeeld: Gedrag aanpassen in perioden met een hoge koolstofuitgifte

In het volgende voorbeeld verlengt API Management de cacheduur, implementeert strengere snelheidsbeperking en vermindert logboekregistratiedetails tijdens perioden met een hoge koolstofuitgifte.

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

Voorbeeld: Informatie over koolstofgehalte doorgeven aan back-end of in logboeken

In het volgende voorbeeld ziet u hoe u toegang krijgen tot het huidige koolstofgehalte en deze doorgeeft aan de back-end of in logboeken.

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

Voorbeeld: Trace-verbositeit aanpassen op basis van koolstofintensiteit

In het volgende voorbeeld ziet u hoe u de huidige informatie over koolstofgehalte gebruikt om de hoeveelheid informatie die wordt doorgegeven in een aangepaste trace aan te passen.

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

Beschikbaarheid van de regio

De volgende tabel geeft aan:

  • Regio's waar instanties in de klassieke API Management-lagen (Developer, Basic, Standard, Premium) duurzaamheidsfuncties ondersteunen (na aanmelding voor preview)
  • Regio's waar informatie over het koolstofgehalte beschikbaar is, bijvoorbeeld voor het maken van ge regionaliseerde back-ends voor verkeersverschuiving
Regio API Management-ondersteuning Informatie over koolstofintensiteit
Centraal Australië
Australia Central 2
Australia East
Australia Southeast
Brazilië Zuid
Brazilië - zuidoost
Canada Central
Canada East
Centraal-India
Central US
Chili - centraal
Oost-Azië
East US
Oostelijke Verenigde Staten 2
Centraal Frankrijk
Frankrijk - zuid
Duitsland - noord
West-Centraal Duitsland
Indonesië - centraal
Israël Centraal
Italy North
Oost-Japan
Japan Westelijk
Jio India Centraal
Jio India West
Korea Central
Zuid-Korea
Maleisië - zuid
Mexico Central
Nieuw-Zeeland - noord
Noord-Centraal VS
Europa - noord
Norway East
West-Noorwegen
Centraal Polen
Qatar Central
Zuid-Afrika - noord
Zuid-Afrika West
Zuid-Centraal Verenigde Staten
South India
Zuidoost-Azië
Spain Central
Zweden - centraal
Zuid-Zweden
Switzerland North
Switzerland West
Taiwan - Noord
Noordwesten van Taiwan
Taiwan West
UAE Central
VAE Noord
UK South
UK West
West-Centraal VS
West Europe
West India
West US
Westelijke Verenigde Staten 2
Westelijke VS 3

Categorieën koolstofgehalte

In de volgende tabel worden de koolstofgehaltecategorieën beschreven die worden gebruikt in de functies voor verkeerverschuifing en het vormgeven van verkeer. De waarden zijn in gram CO₂e per KWh voor scope 2 emissies.

Categorie g CO²e
Niet beschikbaar N/A
Zeer Laag ≤ 150
Low 151-300
Gemiddeld 301-500
High 501-700
ZeerHoog > 700