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

HTTPDNS:Function Compute に基づくカスタム DNS 名前解決の設定

最終更新日:Dec 06, 2025

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

前提条件

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

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

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

操作手順

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

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

  3. [カスタム DNS の追加] をクリックします。ポリシータイプを [Function Compute ポリシー] に設定し、必要な権限がない場合、権限付与メッセージが表示されます。[権限付与] をクリックします。

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

説明

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

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

  • ポリシー管理リストに移動したときに、権限付与を求めるプロンプトが表示されたとき。

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

まず、Alibaba Cloud Function Compute をアクティベートし、カスタム DNS 名前解決関数を開発する必要があります。関数の開発後、サービスと関数を公開し、正式バージョンまたはエイリアスを生成する必要があります。

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

HTTPDNS は FC 2.0 と FC 3.0 の両方をサポートしていますが、FC 2.0 は非推奨のため、FC 3.0 の使用を推奨します。両バージョンの違いについては、「バージョン 2.0 とバージョン 3.0 の違い」をご参照ください。

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

3.0 関数の作成

  1. Function Compute コンソールにログインします。トップメニューバーで、[リージョン] を選択します。

  2. 左側のナビゲーションウィンドウで、[関数] を選択します。関数リストページで、[関数の作成] をクリックします。image

  3. [関数の作成] ページで、[イベント関数] を選択し、必要に応じてパラメーターを設定します。「HTTPDNS カスタム DNS 名前解決」テンプレートを選択すると、コード例を使用できます。パラメーターを設定した後、[作成] をクリックして関数を作成します。image

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

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

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

  7. [バージョン管理] をクリックし、説明を入力してバージョンを作成します。image

3. カスタム解析関数の記述

  1. 関数コードの記述

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

    この例では、プログラミング言語として nodejs6 または nodejs8 を使用します。

    'use strict';
    exports.handler = (event, context, callback) => {
      // 入力パラメーターをオブジェクトにフォーマットします。
      const eventObj = JSON.parse(event.toString());
      const {
        location, // リージョン
        ips, // 権威 DNS の結果
        ttl, // 元の TTL
      } = eventObj;
    
      if (location.province === 'zhejiang' && location.isp === 'chinanet') {
        // 浙江省の China Telecom (中国電信) ユーザーがドメイン名にアクセスした場合、指定された 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 のキャリア回線
        "province": "zhejiang" // クライアント IP が所在する省
      },
      "ips": ["192.168.1.3"], // DNS 名前解決結果のリスト。この結果は BEFORE_READ_CACHE ステージでは利用できません。
      "ttl": 60, // DNS 名前解決結果の TTL。この結果は BEFORE_READ_CACHE ステージでは利用できません。
      "hookType": "BEFORE_WRITE_CACHE", // 関数が実行されるステージ
      "parameters":{ // 名前解決リクエストに含まれるパラメーターオブジェクト
        "param1":"p1",   // URL 内の "sdns-param1=p1" パラメーターに対応
        "param2":"p2"
       }
    }
  3. テストの実行と結果の検証

    [関数のテスト] をクリックします。返された結果に、期待される ipsttl、または extra フィールドが含まれ、正しいフォーマットであるかを確認します。以下のコードは、レスポンスのサンプルです:

    {
        "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 ステージでのみ有効
     }
    説明

    カスタム DNS 名前解決関数の仕組み、および入力・レスポンスパラメーターフィールドの完全な説明については、「カスタム解析関数コードの記述」をご参照ください。

4. Function Compute 関数をドメイン名にアタッチ

カスタム DNS 名前解決が必要な各ドメイン名に対して、複数のリージョンで Function Compute サービスを設定できます。また、異なるドメイン名のポリシーに同じ Function Compute サービスを使用することもできます。

操作手順

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

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

  3. [カスタム DNS の追加] をクリックし、ポリシータイプを [Function Compute ポリシー] に設定します。image

  4. 以下のパラメーターを設定します。設定が完了したら、[OK] をクリックしてポリシーリストに戻ります。

    パラメーター

    説明

    リージョン

    必須。Function Compute サービスが所在するリージョンを選択します。例えば、上海リージョンで Function Compute サービスを作成した場合、上海を選択します。

    FC バージョン

    FC 2.0 と FC 3.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 ステージのカスタム DNS 名前解決関数

    HTTPDNS サーバーがキャッシュを読み取る前のフックステージに対して Function Compute 関数を設定します。この関数はオプションです。

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

    BEFORE_WRITE_CACHE ステージのカスタム DNS 名前解決関数

    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 名前解決を設定した後、「全体のワークフロー」を参照して残りの手順を完了してください。