Azure API Management の環境に優しい API (プレビュー)

適用対象: 開発者 |基本 |標準 |プレミアム

この記事では、API トラフィックの二酸化炭素排出量を削減するのに役立つ Azure API Management の機能について説明します。 この機能を使用して、さまざまな Azure リージョンの炭素排出量に基づいて API トラフィックを調整します。

注

  • 環境の持続可能性機能は現在、限定的なプレビュー段階にあります。 サインアップするには、 フォームに入力します。
  • 現在、これらの機能は、Azure API Management クラシック レベル (Developer、Basic、Standard、Premium) の 一部のリージョン で利用できます。

持続可能な API について

組織は、デジタル インフラストラクチャを通じて環境への影響を減らすことにますます注力しています。

API Management を使用すると、次の機能を使用してこれらの目標を達成できます。

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 は、 context.Deployment.SustainabilityInfo.CurrentCarbonIntensitycontext 変数を公開します。これは、API Management インスタンスの現在の 炭素強度カテゴリ を示します。

複数リージョンのデプロイでは、ゲートウェイは、それが実行されるそれぞれのリージョンの炭素強度を提供します。

このコンテキスト変数をポリシーで使用して、低炭素排出量の期間中により集中的なトラフィック処理を有効にしたり、高炭素排出量時の処理を減らしたりできます。

例: 高炭素排出期間の動作を調整する

次の例では、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 クラシック レベル (Developer、Basic、Standard、Premium) のインスタンスがサステイナビリティ機能をサポートするリージョン (プレビューへのサインアップ後)
  • トラフィックシフトのための地域化されたバックエンドの作成など、炭素排出量の強度に関する情報が利用可能なリージョン
リージョン API Management のサポート 炭素強度情報
オーストラリア中部 ✅
オーストラリア中部 2 ✅
オーストラリア東部 ✅ ✅
オーストラリア南東部 ✅ ✅
ブラジル南部 ✅ ✅
ブラジル南東部 ✅
カナダ中部 ✅
カナダ東部 ✅ ✅
インド中部 ✅ ✅
米国中部 ✅ ✅
チリ中部 ✅
東アジア ✅
米国東部 ✅ ✅
米国東部 2 ✅ ✅
フランス中部 ✅
フランス南部 ✅ ✅
ドイツ北部 ✅
ドイツ中西部 ✅ ✅
インドネシア中部 ✅
イスラエル中部 ✅ ✅
イタリア北部 ✅ ✅
東日本 ✅ ✅
西日本 ✅ ✅
JIO インド中部 ✅
Jio インド西部 ✅ ✅
韓国中部 ✅
韓国南部 ✅
マレーシア南部 ✅
メキシコ中部 ✅ ✅
ニュージーランド北部 ✅ ✅
米国中北部 ✅
北ヨーロッパ ✅ ✅
ノルウェー東部 ✅ ✅
ノルウェー西部 ✅
ポーランド中部 ✅ ✅
カタール中部 ✅ ✅
南アフリカ北部 ✅ ✅
南アフリカ西部 ✅
米国中南部 ✅
インド南部 ✅ ✅
東南アジア ✅
スペイン中部 ✅ ✅
スウェーデン中部 ✅ ✅
スウェーデン南部 ✅
スイス北部 ✅ ✅
スイス西部 ✅ ✅
台湾北部 ✅ ✅
台湾北西部 ✅
台湾西部 ✅
アラブ首長国連邦中部 ✅
アラブ首長国連邦北部 ✅ ✅
英国南部 ✅ ✅
英国西部 ✅ ✅
米国中西部 ✅ ✅
西ヨーロッパ ✅ ✅
インド西部 ✅
米国西部 ✅ ✅
米国西部 2 ✅ ✅
米国西部 3 ✅ ✅

炭素強度カテゴリ

次の表では、トラフィック シフト機能とトラフィック シェーピング機能で使用される炭素強度カテゴリについて説明します。 スコープ 2 の排出量は、KWh あたりのグラム CO₂e 単位です。

カテゴリ g CO₂e
利用不可 N/A
非常に低い ≤ 150
Low 151-300
ミディアム 301-500
High 501-700
非常に高い > 700