本番環境で固定のドメイン名を使用して Function Compute のアプリケーションまたは関数にアクセスする場合や、 HTTP トリガーへのアクセス時に強制ダウンロードを防止したい場合は、カスタムドメイン名をアプリケーションまたは関数にバインドしてください。
ユースケース
次のシナリオでは、カスタムドメイン名を関数またはアプリケーションにマッピングします。
-
Web アプリケーションを Function Compute に移行し、既存のドメイン名でアクセスしたい場合。
-
Function Compute コンソールで Web アプリケーションを作成し、同一ドメイン名の異なるパスで異なる関数をトリガーしたい場合。
-
Function Compute のサーバーレスアプリケーションセンターで Stable Diffusion アプリケーションなどのアプリケーションを作成し、静的ドメイン名でアクセスしたい場合。
制限事項
-
カスタムドメイン名を関数にバインドする場合は、関数のリージョンを選択してください。
-
カスタムドメイン名では、大文字と小文字が区別されます。ICP 登録で指定されたとおりに、ドメイン名を正確に入力してください。
-
ワイルドカードドメイン名と標準ドメイン名はサポートされていますが、中国語ドメイン名はサポートされていません。
仕組み
前提条件
-
関数またはアプリケーションを作成済みであること。詳細については、「関数の作成」および「アプリケーションの作成」をご参照ください。
カスタムドメイン名をアプリケーションにバインドすると、関連付けられた関数にもバインドされます。この自動的に作成された関数リソースは、環境の詳細 ページの リソース情報 セクションで確認できます。関数名をクリックすると、関数詳細ページに移動します。
-
カスタムドメイン名には、Alibaba Cloud をサービスプロバイダーとする ICP 登録 が必要です。
ドメイン名のサービスプロバイダーと所有者アカウントに応じて、ICP 登録の手順に従ってください。
-
現在の Alibaba Cloud アカウントで登録されたドメイン名
Alibaba Cloud ICP 登録システムにログオンして、カスタムドメイン名の ICP 登録を完了してください。
-
別の Alibaba Cloud アカウントで登録されたドメイン名
ドメイン名を登録した Alibaba Cloud アカウントを使用して ICP 登録を完了することを推奨します。 次に、Alibaba Cloud ICP 登録システムにログオンして、カスタムドメイン名の ICP 登録を完了してください。
-
Alibaba Cloud アカウントで登録されていないドメイン名
別のサービスプロバイダーがドメイン名の ICP 登録を行った場合は、Alibaba Cloud をサービスプロバイダーとして追加するために登録を更新する必要があります。Alibaba Cloud ICP 登録システムにログオンして実行してください。
説明-
中国 (香港) リージョンまたは中国本土以外のリージョンの関数にバインドされたカスタムドメイン名には、ICP 登録は不要です。
-
ドメイン名のレジストラが不明な場合は、WHOIS クエリを実行してください。
-
ドメイン名が現在の Alibaba Cloud アカウントに登録されているかどうかを確認するには、Alibaba Cloud DNS コンソールをご確認ください。
-
1. カスタムドメイン名の追加
-
Function Compute コンソールにログインします。左側のナビゲーションペインで、を選択します。リージョンを選択し、カスタムドメイン名の追加 をクリックします。
重要カスタムドメイン名を関数にマッピングする場合、カスタムドメイン名と関数は同じリージョンにある必要があります。
-
カスタムドメイン名の追加 ページで、Alibaba Cloud で ICP 登録済みのカスタムドメイン名を入力します。 シングルドメイン名 (例:
www.aliyun.com) とワイルドカードドメイン名 (例:*.aliyun.com) の両方に対応しています。次の手順でドメイン名の名前解決を設定するために使用する[インターネット CNAME] または[内部 CNAME] を取得します。 次の表に CNAME の形式を示します。
CNAME タイプ
形式
例
インターネット CNAME
<account_id>.<region_id>.fc.aliyuncs.comAlibaba Cloud アカウント ID が 1413397765**** で、関数またはアプリケーションが中国 (杭州) リージョンにある場合:
インターネット CNAME は
1413397765****.cn-hangzhou.fc.aliyuncs.comです。内部 CNAME
<account_id>.<region_id>-internal.fc.aliyuncs.com内部 CNAME は
1413397765****.cn-hangzhou-internal.fc.aliyuncs.comです。
2. ドメイン名の名前解決の設定
Alibaba Cloud DNS コンソールにログインし、ドメイン名を Function Compute の CNAME にマッピングします。 詳細については、「DNS レコードの追加」をご参照ください。
DNS レコードを設定する際、レコード値 を前の手順で取得した Function Compute の CNAME に設定します。 インターネット経由でドメイン名にアクセスする場合は、レコード値 を Function Compute のインターネット CNAME に設定します。
DNS レコードを設定する際、[レコードタイプ] を [CNAME] に設定し、[ホスト名] に @ を入力し、[解決ライン] を [デフォルト] に設定します。
3. ドメイン設定の完了
ステップ 1 の カスタムドメイン名の追加 ページに戻り、次のオプションを設定して作成 をクリックします。
3.1 ルート設定
アプリケーションに複数の関数が含まれている場合、異なるリクエストパスをマッピングして異なる関数をトリガーできます。 詳細については、「パス一致ルール」をご参照ください。
特定のパスに一致するリクエストの URI をルールに基づいて書き換える必要がある場合は、「書き換えポリシーの設定 (パブリックプレビュー)」をご参照ください。
ルート設定はテーブルで管理します。 各ルールには、[パス]、[関数名]、[バージョン/エイリアス]、および [書き換えポリシー] フィールドが含まれています。 たとえば、パス /test1 を関数 test-renwu にマッピングし、デフォルト関数にマッピングするフォールバックパスとして /* を使用できます。 すべてのルールのバージョンとして [LATEST] を選択できます。
3.2 (オプション) HTTPS 設定
カスタムドメイン名への HTTPS アクセスを有効にするには、次のパラメーターを設定します。
|
パラメーター |
アクション |
|
HTTPS |
有効にすると、カスタムドメイン名は HTTP と HTTPS の両方に対応します。 無効にすると、HTTP のみに対応します。 説明
HTTP リクエストを HTTPS にリダイレクト チェックボックスを選択することもできます。 このオプションを選択すると、アクセスは HTTPS のみに制限され、Function Compute はすべての HTTP リクエストを HTTPS にリダイレクトします。 |
|
[証明書タイプ] |
アップロードする証明書のタイプを選択します。 有効な値:
説明
アップロードする証明書のサイズは 20 KB、証明書キーのサイズは 4 KB を超えることはできません。 |
|
[TLS のバージョン] |
関数のトランスポート層セキュリティ (TLS) プロトコルのバージョンを選択します。 説明
TLS バージョンを選択した後、TLS 1.3 のサポートを有効化します。 チェックボックスを選択して TLS 1.3 を有効にすることもできます。 |
|
[暗号スイート] |
TLS 暗号スイートを選択します。 このパラメーターを設定しない場合、デフォルトですべての暗号スイートが選択されます。 有効な値:
重要
|
3.3 (オプション) 認証設定
-
認証なし:HTTP リクエストに認証は必要ありません。 匿名アクセスがサポートされており、誰でも HTTP リクエストを送信して関数を呼び出すことができます。
-
署名認証:HTTP リクエストに対して署名認証を実行します。 詳細については、「カスタムドメイン名の署名認証の設定」をご参照ください。
-
基本認証:標準的な HTTP 認証方式です。 FC コンソールでユーザー名とパスワードを設定します。 クライアントは、Authorization ヘッダーに有効な認証情報を含める必要があります。 アクセスは、リクエスト内のユーザー情報が設定されたユーザー名とパスワードに一致する場合にのみ許可されます。 詳細については、「カスタムドメイン名の基本認証の設定」をご参照ください。
-
JWT 認証:HTTP リクエストに対して JWT 認証を実行し、有効な JWT を持つクライアントのみが関数にアクセスできるようにします。 詳細については、「カスタムドメイン名の JWT 認証の設定」をご参照ください。
-
ベアラー認証:HTTP リクエストに対してベアラー認証を実行します。 FC コンソールで許可されたトークンを設定します。 クライアントは、Authorization ヘッダーに有効なトークンを含める必要があります。 アクセスは、リクエスト内のトークンが設定されたトークンと一致する場合にのみ許可されます。 詳細については、「カスタムドメイン名のベアラー認証の設定」をご参照ください。
3.4 (オプション) Web アプリケーションファイアウォールの設定
有効にすると、Web アプリケーションファイアウォール (WAF) は関数へのトラフィックを検査し、悪意のあるリクエストをフィルタリングして、安全なトラフィックのみをバックエンドに転送します。 これにより、関数を攻撃から保護します。 詳細については、「Web アプリケーションファイアウォールの有効化」をご参照ください。
3.5 (オプション) CDN 設定
カスタムドメイン名を Web アプリケーションにバインドした後、このカスタムドメイン名をオリジンサーバードメインとして使用し、高速化ドメイン名を追加してから、高速化ドメイン名の CNAME を設定して CDN 高速化を有効にすることができます。 Function Compute にデプロイされたアプリケーションは、オリジンコンテンツをエッジノードに公開するためのオリジンサーバーとして使用されます。 これにより、エンドユーザーは必要なコンテンツを迅速に取得でき、アクセスレイテンシを効果的に削減し、サービス品質を向上させることができます。
-
CDN 高速化を有効にし、カスタムの CDN 高速化ドメイン名 を入力し、作成 をクリックします。
高速化を有効にするには、高速化ドメイン名の DNS レコードを手動で設定する必要があります。 Alibaba Cloud CDN サービスは、高速化ドメイン名の CNAME 値を生成します。 この CNAME を高速化ドメイン名にマッピングする必要があります。
重要-
CDN 高速化機能はインターネットトラフィックを消費し、トラフィック料金が発生します。 詳細については、「課金の概要」をご参照ください。
-
カスタムドメイン名と高速化ドメイン名は同一にはできません。 ドメイン名リソースを節約するために、高速化ドメイン名をカスタムドメイン名のサブドメイン名として設定できます。 たとえば、カスタムドメイン名が
example.comの場合、高速化ドメイン名をfast.example.comに設定できます。
-
-
設定したカスタムドメイン名をクリックします。 詳細ページの CDN アクセラレーションの設定 セクションで、操作 列の CDN の設定 をクリックします。 これにより、Alibaba Cloud CDN コンソールにリダイレクトされ、高速化ドメイン名の CNAME を見つけることができます。
CNAME は
高速化ドメイン名.w.kunlun**.comの形式になります。例:fast.example.com.w.kunlunle.com。 -
Alibaba Cloud DNS コンソールにログインし、カスタムドメイン名を見つけて、高速化ドメイン名を割り当てられた CNAME にマッピングする DNS レコードを作成して高速化を有効にします。 詳細については、「DNS レコードの追加」をご参照ください。
[レコードタイプ] を [CNAME - ドメイン名を別のドメイン名にマッピング] に設定します。
ホストレコード をサブドメイン名のプレフィックス (この例では
fast) に設定します。 レコード値 を、前の手順で取得した高速化ドメイン名の CNAME 値に設定します。
3.6 (オプション) CORS 設定
UpdateCustomDomain API を呼び出すことで、カスタムドメイン名のオリジン間リソース共有 (CORS) を設定できます。 詳細については、「CORS リクエストの処理」をご参照ください。
4. カスタムドメインの検証
4.1 カスタムドメインアクセスの検証
-
方法 1:
curl URLコマンドを使用します。 例:curl example.com/login。 -
方法 2: Web ブラウザを使用します。
アドレスバーにリクエスト URL を入力し、Enter キーを押して、ターゲット関数が呼び出されるか確認します。
4.2 (オプション) 高速化ドメインの検証
ブラウザで、ステップ 3.5 (オプション) CDN 設定で設定した高速化ドメイン名を使用してアプリケーションにアクセスします。 次に、デベロッパーツールを開き、X-Cache レスポンスヘッダーの値を確認して、CDN 高速化が機能していることを確認します。
X-Cache レスポンスヘッダーはキャッシュのステータスを示します。 値が MISS の場合、初回アクセスでキャッシュミスが発生し、リクエストがオリジンサーバーから取得されたことを示します。 2 回目以降のリクエストでは HIT が返され、キャッシュヒットしたことを示します。
|
初回アクセスのキャッシュミス |
2 回目以降のアクセスのキャッシュヒット |
|
ブラウザのデベロッパーツールで、[ネットワーク] パネルに移動します。 ターゲットリクエストを選択し、[ヘッダー] タブを表示します。 [ステータスコード] が |
ブラウザのデベロッパーツールで、[ネットワーク] パネルの 2 回目のリクエストの [ヘッダー] タブを確認します。 [ステータスコード] は |
暗号スイート
強力な暗号スイートと弱い暗号スイート
TLS バージョンと暗号スイート
RFC 名と OpenSSL 名のマッピング
マッチングルール
ルートのマッチングルール
カスタムドメイン名をバインドすると、パスを関数にマッピングします。これにより、異なるパスからのリクエストが、対応する関数をトリガーできるようになります。 Function Compute は、完全一致とあいまい一致の 2 種類のパス照合をサポートしています。
-
完全一致:パスが設定済みのパスと同一の場合にのみ、リクエストが関数をトリガーします。
たとえば、パス /a を関数 f1、バージョン 1 にマッピングするルートを設定した場合、/a へのリクエストのみが関数をトリガーします。 /a/ へのリクエストは一致しません。
-
ファジーマッチング:パスの末尾にワイルドカード文字 (*) を使用して、パスプレフィックスが一致する任意のリクエストと一致します。
例えば、パス /login/* のルートを、関数 f2 バージョン 1 をターゲットにするよう設定した場合、パスが /login/ で始まるリクエスト (/login/a や /login/b/c/d など) はすべてこの関数をトリガーします。
-
カスタムドメイン名に複数のルートが設定されている場合、完全一致がファジーマッチングより優先されます。
-
リクエストに一致するファジーマッチングルートが複数ある場合は、一致するプレフィックスが最も長いルートが使用されます。
たとえば、カスタムドメイン名
example.comに、/login/a/* と /login/* の 2 つのパスが設定されているとします。example.com/login/a/b へのリクエストは、両方のパスに一致します。ただし、最長プレフィックス一致の原則に基づき、リクエストは、より具体的なパスである /login/a/* に関連付けられた関数にルーティングされます。
例
カスタムドメイン名 example.com に、次の 5 つのルーティングルールを設定したとします。
|
ルーティングルール |
パス |
関数名 |
バージョン |
|
ルーティングルール 1 |
/ |
f1 |
1 |
|
ルーティングルール 2 |
/* |
f2 |
2 |
|
ルーティングルール 3 |
/login |
f3 |
3 |
|
ルーティングルール 4 |
/login/a |
f4 |
4 |
|
ルーティングルール 5 |
/login/* |
f5 |
5 |
次の表に、マッチング結果を示します。
|
リクエスト URL |
関数 |
バージョン |
パス |
|
example.com |
f1 |
1 |
/ |
|
example.com/user |
f2 |
2 |
/* |
|
example.com/login |
f3 |
3 |
/login |
|
example.com/login/a |
f4 |
4 |
/login/a |
|
example.com/login/a/b |
f5 |
5 |
/login/* |
|
example.com/login/b |
f5 |
5 |
/login/* |
ドメイン名のマッチングルール
FC は、リクエスト内のドメイン名を設定済みのカスタムドメイン名と照合し、リクエストを対応する関数に転送します。FC は、ドメイン名のマッチングとして完全一致とファジーマッチングの両方をサポートします。
-
完全一致:ドメイン名が設定済みの単一ドメイン名と同一の場合にのみ、リクエストが関数をトリガーします。
-
ファジーマッチング:ドメイン名が設定済みのワイルドカードドメイン名に一致する場合、リクエストは関数をトリガーできます。ワイルドカードドメイン名は、先頭のラベルに単一のワイルドカード文字 (*) を使用する必要があります。
-
リクエストが単一ドメイン名とワイルドカードドメイン名の両方に一致する場合は、単一ドメイン名が優先されます。
-
ワイルドカードドメイン名は、同じレベルのドメイン名にのみ一致します。 たとえば、ワイルドカードドメイン名
*.aliyun.comはfc.aliyun.comには一致しますが、cn-hangzhou.fc.aliyun.comには一致しません。 これは、*.aliyun.comとfc.aliyun.comはどちらも第 3 レベルドメインであるのに対し、cn-hangzhou.fc.aliyun.comは第 4 レベルドメインであるためです。
例
次のカスタムドメイン名があると仮定します: fc.aliyun.com、*.aliyun.com、および *.fc.aliyun.com。 次の表に、各リクエストがどのドメイン名に一致するかを示します。
|
リクエストドメイン |
一致するドメイン |
|
fc.aliyun.com |
fc.aliyun.com |
|
fnf.aliyun.com |
*.aliyun.com |
|
cn-hangzhou.fc.aliyun.com |
*.fc.aliyun.com |
|
accountID.cn-hangzhou.fc.aliyun.com |
なし |
よくある質問
本番環境用のパブリックエンドポイント
カスタムドメインの 502 エラー
中国語ドメイン名のエラー
ブラウザでの強制ダウンロード
アクセラレーションドメインの 301 リダイレクト
ルーティングにおける関数の選択
ルートパスで関数がトリガーされない
診断
カスタムドメイン名のバインド中にエラーが発生した場合、サーバーからエラーメッセージが返されます。次の表は、これらの問題の特定と解決に役立つ一般的なエラーコードを示しています。
|
エラーコード |
HTTP ステータスコード |
エラーメッセージ |
原因 |
|
InvalidICPLicense |
400 |
domain name '%s' has not got ICP license, or the ICP license does not belong to Aliyun |
ドメイン名に ICP ライセンスがない、またはその ICP ライセンスで Alibaba Cloud がサービスプロバイダーとして記載されていません。 |
|
DomainNameNotResolved |
400 |
domain name '%s' has not been resolved to your FC endpoint, the expected endpoint is '%s' |
ドメイン名の CNAME レコードが指定されたエンドポイントを指していません。これを確認するには、dig コマンドを使用するか、DNS サーバーの設定を確認してください。 |
|
DomainRouteNotFound |
404 |
no route found in domain '%s' for path '%s' |
指定されたパスに対して関数が設定されていません。 |
|
TriggerNotFound |
404 |
trigger 'http' does not exist in service '%s' and function '%s' |
カスタムドメイン名にバインドされている関数には HTTP トリガーがありません。 |
|
DomainNameNotFound |
404 |
domain name '%s' does not exist |
リクエストされたドメイン名が存在しません。 |
|
DomainNameAlreadyExists |
409 |
domain name '%s' already exists |
指定されたドメイン名は既に存在しています。 |
問題が解決しない場合は、DingTalk グループ (グループ ID: 64970014484) に参加し、Function Compute のエンジニアにお問い合わせください。