次の方法で共有


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