すべてのプロダクト
Search
ドキュメントセンター

HTTPDNS:Function Compute を基盤としたカスタム DNS 解決の設定

最終更新日:Mar 20, 2026

本トピックでは、Function Compute を使用したカスタム DNS 解決の設定方法について説明します。

前提条件

  • カスタム DNS 解決を設定するドメイン名を追加済みである必要があります。詳細については、「1. ドメイン名の追加」をご参照ください。

1. サービスリンクロールの権限付与

HTTPDNS が Function Compute を呼び出してカスタム DNS 解決を実装する場合、HTTPDNS コンソールでサービスリンクロールに必要な権限を付与する必要があります。これにより、HTTPDNS が Function Compute を利用できるようになります。

操作手順

  1. EMAS コンソール にログインします。

  2. 左ナビゲーションウィンドウで、解像度管理カスタム解像度 を選択します。

  3. カスタム解決の追加 をクリックします。ポリシーの種類として Function Compute ポリシー を選択し、必要な権限が付与されていない場合、権限付与メッセージが表示されます。このとき、権限付与 をクリックします。

  4. サービスリンクロールの権限付与ページで、OK をクリックして権限付与を完了します。この権限付与が行われていないと、Function Compute ポリシー機能は利用できません。

説明

Function Compute ポリシーを初めて使用する際には、必ず初回の権限付与が必要です。以下のシナリオで権限付与がトリガーされます:

  • カスタム DNS レコードを作成し、ポリシーの種類として Function Compute ポリシーを選択したとき。

  • ポリシー管理リストに移動した後、Function Compute ポリシー一覧に権限付与を促すメッセージが表示されたとき。

image

2. カスタム解決関数の作成

まず、Alibaba Cloud Function Compute を有効化し、カスタム解決関数を開発します。開発後、サービスおよび関数を公開し、正式なバージョンまたはエイリアスを生成します。

HTTPDNS の Function Compute ポリシーのセキュリティおよび安定性を確保するため、ポリシーの設定時にはデフォルトの Latest バージョンを使用しないでください。公開済みのサービスおよび関数のバージョンを明示的に指定する必要があります。

HTTPDNS は FC 2.0 および FC 3.0 の両方をサポートしていますが、FC 3.0 の使用が推奨されます(FC 2.0 は非推奨)。両者の違いについては、「FC 2.0 と FC 3.0 の違い」をご参照ください。

引き続き FC 2.0 関数を作成する必要がある場合は、「FC 2.0 関数の作成」をご参照ください。

FC 3.0 関数の作成

  1. Function Compute コンソール にログインします。上部メニューバーから リージョン を選択します。

  2. 左側ナビゲーションウィンドウで、関数 メニューを選択します。関数一覧ページで、関数の作成 をクリックします。

    image

  3. 関数の作成ページで、イベント関数を選択し、必要に応じてパラメーターを設定したうえで、コード例として「HTTPDNS カスタム解決テンプレート」を選択します。パラメーター設定後に 作成 をクリックして関数の記述を開始します。

    image

  4. エディターの初期化が完了したら、関数コードを入力します。関数コードの設定方法については、「3. カスタム解決関数コードの記述」をご参照ください。HTTPDNS カスタム解決テンプレートを選択した場合は、このステップはスキップできます。

  5. 次に、関数のテストを行います。関数の入力パラメーターの設定方法については、「3. カスタム解決関数コードの記述」をご参照ください。関数のテスト をクリックし、関数が正しく実行され、期待されるデータが返されることを確認します。

    image

  6. テストが完了したら、[コードのデプロイ] をクリックし、コードが正常にデプロイされたことを確認します。

  7. [バージョン管理] をクリックし、プロンプトに内容を入力してバージョンを作成します。

    image

3. カスタム解決関数コードの記述

  1. 関数コードの記述

    関数エディターで、カスタム解決ロジックを記述します。関数は、HTTPDNS から渡されるコンテキストパラメーター(クライアント IP、リージョン、ISP など)を受け取り、処理後の解決結果を返す必要があります。例:

    本例のプログラミング言語は nodejs6 または nodejs8 です。

    'use strict';
    exports.handler = (event, context, callback) => {
      // 入力パラメーターをオブジェクト形式にフォーマットします。
      const eventObj = JSON.parse(event.toString());
      const {
        location, // リージョン
        ips, // 権威サーバーからの解決結果
        ttl, // 元の TTL
      } = eventObj;
    
      if (location.province === 'zhejiang' && location.isp === 'chinanet') {
        // 浙江省の中国電信ユーザーがドメイン名にアクセスした場合、指定された IP アドレスを返します。
        callback(null, {
          ips: ips.concat(['1.1.X.X']), // 返却される IP アドレス配列に指定 IP を追加します。
          ttl: event.ttl * 2, // TTL を変更します。
          extra: "", // クライアント向けに追加パラメーターを付与します。
        });
      } else {
        // デフォルトの返却値。
        callback(null, {
          ips,
          ttl,
          extra: "",
        });
      }
    };
  2. テスト入力パラメーターの設定

    関数のテスト をクリックする前に、モック入力パラメーターを設定して、関数が期待通りに動作することを検証します。テストイベントは、実際の HTTPDNS 呼び出し形式を模擬する必要があります。例:

    {
      "domainName": "www.aliyun.com", // 解決対象のドメイン名
      "clientIp": "192.168.1.4", // クライアント IP
      "location": {
        "continent": "asia", // クライアント IP の大陸
        "region": "cn", // クライアント IP の国またはリージョン
        "isp": "bgp", // クライアント IP の ISP 回線
        "province": "zhejiang" // クライアント IP の都道府県
      },
      "ips": ["192.168.1.3"], // 解決結果のリスト。BEFORE_READ_CACHE ステージではこの結果は利用不可。
      "ttl": 60, // 解決結果の TTL。BEFORE_READ_CACHE ステージではこの結果は利用不可。
      "hookType": "BEFORE_WRITE_CACHE", // 関数が実行されるステージ
      "parameters":{ // 解決要求に付随するパラメーター・オブジェクト
        "param1":"p1",   // URL の "sdns-param1=p1" に対応
        "param2":"p2"
       }
    }
  3. テスト実行と結果の検証

    関数のテスト をクリックし、返却結果に期待される ipsttlextra フィールドが含まれ、かつ正しい形式であるかを確認します。応答例:

    {
        "ips": event.ips.concat(['192.168.1.2']),
        "ttl": event.ttl * 2,
        "extra": "some-thing-send-to-user"
        // ,"domainName": "www.alibabacloud.com" // BEFORE_READ_CACHE ステージでのみ有効
        // ,"cacheKey": "cache-key-001" // BEFORE_READ_CACHE および BEFORE_WRITE_CACHE ステージでのみ有効
     }
    説明

    カスタム解決関数の仕組みおよび入力・レスポンスパラメーターの完全な説明については、詳細ドキュメントをご参照ください:「カスタム解決関数コードの記述」。

4. ドメイン名への Function Compute サービスの割り当て

カスタム解決を必要とする各ドメイン名に対して、複数のリージョンで Function Compute サービスを構成できます。また、複数のドメイン名の Function Compute ポリシーに、同一の Function Compute サービスを構成することも可能です。

操作手順

  1. EMAS コンソール にログインします。

  2. 左側のナビゲーションウィンドウで、[解像度管理][カスタム解像度] を選択します。

  3. カスタム解決の追加 をクリックし、ポリシーの種類を Function Compute ポリシー に設定します。

    image

  4. 以下の設定が可能です。 設定を完了したら、OK をクリックしてポリシー一覧に戻ります。

    パラメーター

    説明

    リージョン

    必須項目です。Function Compute サービスが配置されているリージョンを選択します。たとえば、中国 (上海) リージョンに Function Compute サービスを作成した場合は、「中国 (上海)」を選択します。

    FC バージョン

    FC 2.0 および FC 3.0 の両方がサポートされています。FC 3.0 がデフォルトであり、推奨バージョンです。

    Function Compute 3.0 と 2.0 の違いおよび互換性

    サービス

    必須項目です。指定されたリージョン内の Function Compute サービスを選択します。このフィールドは FC 2.0 のみに適用されます。

    サービスバージョン/エイリアス

    必須項目です。サービスのバージョンまたはエイリアスを選択します。このフィールドは FC 2.0 のみに適用されます。

    説明

    Function Compute の LATEST バージョンの使用は推奨されません。

    BEFORE_READ_CACHE ステージ用のカスタム解決関数

    HTTPDNS サーバー側キャッシュの読み取り前のフックステージにおいて、対応する Function Compute 関数を任意で構成できます。

    Function Compute ポリシーフックの説明を表示

    BEFORE_WRITE_CACHE ステージ用のカスタム解決関数

    HTTPDNS サーバー側による再帰解決後、キャッシュへの書き込み前のフックステージにおいて、対応する Function Compute 関数を任意で構成できます。

    Function Compute ポリシーフックの説明を表示

    BEFORE_WRITE_RESPONSE ステージ用のカスタム解決関数

    HTTPDNS サーバー側がキャッシュへ書き込んだ後、応答を構築する前のフックステージにおいて、対応する Function Compute 関数を任意で構成できます。

    Function Compute ポリシーフックの説明を表示

    フック関数単体テスト

    HTTPDNS サービスと Function Compute サービス間の接続性を検証するために使用します:

    • テスト成功:HTTPDNS サービスが構成済みの Function Compute サービスに接続できることを意味します。

    • テスト失敗:HTTPDNS サービスが構成済みの Function Compute サービスに接続できないことを意味します。

次のステップ

本トピックで説明した通り、Function Compute を基盤としたカスタム DNS 解決を設定した後は、「全体のワークフロー」を参照して、その後の手順を完了してください。