関数のカスタム・ドメイン・マッピングの構成

ドメイン・マッピングは、プロジェクト内の Code Engine 関数への URL 経路を提供します。 Code Engineでは、関数をデプロイするたびにデフォルトでこれらのマッピングが自動的に作成されます。 ただし、独自のカスタム・ドメインを Code Engine 関数にマップして、カスタム URL からの要求を Code Engine コンソールまたは CLI から関数にルーティングすることができます。

自分が所有するドメインを関数のターゲットにする場合は、カスタム・ドメイン・マッピングを使用できます。 Code Engineでカスタム・ドメイン・マッピングを設定する場合、プロジェクトで完全修飾ドメイン・ネーム (FQDN) と Code Engine 関数の間の 1-to-1 マッピングを定義します。

カスタム・ドメイン・マッピングは、1 つのマッピングのみを指す必要があります。 ただし、単一の機能に対して複数のドメイン・マッピングを構成することができます。

プロジェクトごとに最大 80 個のカスタム・ドメイン・マッピングを作成できます。 プロジェクト割り当て量 を参照してください。

Code Engineでカスタム・ドメイン・マッピングを作成する場合、そのマッピングで使用するドメイン・ネームは地域内で固有でなければなりません。

カスタム・ドメイン・マッピングを作成してセットアップするには、以下の手順を実行します。

  1. Code Engine を確認してください。
  2. カスタム・ドメインをドメイン・レジストラーから取得します (* Code Engine*)。
  3. 関数の Code Engine でカスタム・ドメイン・マッピングを構成します (* Code Engine コンソールまたは CLI から*)。
  4. ドメイン・レジストラーを使用してカスタム・ドメイン構成を完了します。 (* Code Engine*)。

www.example.comshop.example.com のカスタム・ドメイン・マッピングを作成するとします。 この場合、固有のドメインまたはサブドメインごとにカスタム・ドメイン・マッピングを作成する必要があります。 ただし、TLS シークレットの証明書にカスタム・ドメイン・マッピングで指定されたドメインが含まれている場合は、同じ TLS シークレットを複数のカスタム・ドメイン・マッピングに再使用できます。 これは、TLS シークレットを複数のドメイン ( www.example.comshop.example.com など)、またはワイルドカード・ドメイン ( *.example.com など) にマップできることを意味します。

コンソールからのカスタム・ドメイン・マッピングの構成

Code Engine コンソールを使用して、登録済みドメイン・ネームへの Code Engine 関数によるカスタム・ドメイン・マッピングを作成できます。

開始前に

このシナリオでは、TLS シークレットを持つ関数へのカスタム・ドメイン・マッピングを作成します。 例えば、 www.example.com ドメインを myfunction 関数にマップするためのカスタム・ドメイン・マッピングを作成します。

  1. Code EngineからProjectsページから、プロジェクトに移動します。

  2. 「概要」ページで、 「ドメイン・マッピング」 をクリックします。

  3. 「ドメイン・マッピング」ページで、 「作成」 をクリックしてマッピングを作成します。

  4. 「ドメイン・マッピングの作成」ページで、このドメイン・マッピングで使用する TLS シークレットを指定します。 Code Engine は、証明書がトラステッド CA によって署名されているかどうか、および証明書が指定されたカスタム・ドメイン名と秘密鍵と一致するかどうかを検証します。

    新しい TLS シークレットを作成するには、

    1. 「作成」 をクリックします。
    2. ドメインに関連付けられている TLS 証明書 (すべての中間証明書を含む) を追加します。 証明書が別個のファイルとして提供されている場合は、ファイルの内容を連結します。 この情報はファイルに指定できます。
    3. 証明書に対応する秘密鍵を追加します。 この情報はファイルに指定できます。

    証明書チェーンのフォーマットの例

    -----BEGIN CERTIFICATE-----
    ...certificate...
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    ...intermediate-certificate...
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    ...intermediate-certificate...
    -----END CERTIFICATE-----
    

    または、既存の TLS シークレットを使用するには、

    1. **「選択」**をクリックします。
    2. 使用する既存のシークレットをリストから選択します。
  5. ドメイン名とターゲット・コンポーネントを指定します。

    • カスタム・ドメイン・ネームの完全修飾ドメイン・ネームを指定します (例: www.example.com)。
    • 既存のターゲット関数 (例えば、 myfunction) を選択します。 この例では、 myfunction 関数は icr.io/codeengine/helloworld サンプル・イメージを使用します。 この例で使用されるコードについて詳しくは、 helloworldを参照してください。
    • 「CNAME ターゲット (CNAME target)」 フィールドに注意してください。 この値は、カスタム・ドメインをターゲットとするトラフィックが指定された機能にルーティングされるように、 ドメイン・レジストラーを使用してカスタム・ドメイン構成を完了する ときに必要な CNAME エントリーです。
  6. 「作成」 をクリックして、カスタム・ドメイン・マッピングを作成します。

これで、 Code Engineで作成されたドメイン・マッピングができました。 ただし、関数に送信される要求は、カスタム・ドメインには (まだ) ルーティングされません。 次に、 ドメイン・レジストラーを使用してカスタム・ドメイン構成を完了します

www.example.comshop.example.com のカスタム・ドメイン・マッピングを作成するとします。 この場合、固有のドメインまたはサブドメインごとにカスタム・ドメイン・マッピングを作成する必要があります。 ただし、カスタム・ドメイン・マッピングで指定されたドメインの証明書が TLS シークレットに含まれている場合は、複数のカスタム・ドメイン・マッピングで同じ TLS シークレットを再使用できます。 TLS シークレットには、 www.example.comshop.example.com などの特定の複数のドメインにマップする証明書、または *.example.com などのワイルドカード・ドメインを含めることができます。 ワイルドカード・ドメインを 1 つの領域内で複数回使用することはできないことに注意してください。

CLI を使用したカスタム・ドメイン・マッピングの構成

CLI でカスタム・ドメイン・マッピングを作成するには、 domainmapping create コマンドを使用します。 このコマンドには、 www.example.com などの完全修飾ドメイン・ネーム (FQDN)、ターゲット関数、および TLS シークレットが必要です。 オプションの完全なリストについては、ibmcloud ce domainmapping create コマンドを参照のこと。

開始前に

ドメイン・ネームが登録され、このドメインの署名付き TLS 証明書とそれに対応する秘密鍵があり、既存の Code Engine 関数がある場合は、カスタム・ドメイン・マッピングを追加することができます。 CLI で domainmapping create コマンドを使用して、 Code Engine 関数でカスタム・ドメイン・マッピングを作成できます。

  1. 署名付き TLS 証明書と秘密鍵を使用して TLS 秘密を作成します。 この例では、 mycert.txt ファイルに、ドメインに関連付けられているすべての中間証明書を含む TLS 証明書が含まれています。 証明書が別個のファイルとして提供されている場合は、ファイルの内容を連結します。 myprivatekey.txt ファイルには、証明書チェーンに対応する一致する秘密鍵が含まれています。

    ibmcloud ce secret create --name mytlssecret --format tls --cert-chain-file  mycertchain.txt --private-key-file myprivatekey.txt
    

    出力例

    Creating tls secret 'mytlssecret'...
    OK
    
  2. Code Engine myfunction 関数とカスタム・ドメイン www.example.com の間のカスタム・ドメイン・マッピングを作成します。 前のステップで作成した TLS シークレットを使用します。

    ibmcloud ce domainmapping create --domain-name www.example.com --target myhellofun --tls-secret mytlssecret
    

    出力例

    OK
    Domain mapping successfully created.
    

以下の表は、この例で domainmapping create コマンドとともに使用されるオプションをまとめたものである。 コマンドとそのオプションの詳細については、ibmcloud ce domainmapping create コマンドを参照のこと。

コマンドの説明
オプション 説明
--domain-name カスタム・ドメイン・マッピングの名前。 カスタム・ドメインの名前 ( www.example.com など) を指定します。 この値は必須です。
--target 対象となるCode Engine関数の名前。 この値は必須です。
--tls-secret ドメイン・マッピングのTLSシークレット。 この値は必須です。

これで、カスタム・ドメイン・マッピングが Code Engineに作成されます。 ただし、関数に送信される要求は、カスタム・ドメインには (まだ) ルーティングされません。 次に、 ドメイン・レジストラーを使用してカスタム・ドメイン構成を完了する 必要があります。

ドメイン登録機関によるカスタム・ドメイン構成の完了

Code Engine カスタム・ドメイン・マッピングが作成された後、完全修飾ドメイン名に一致する CNAME レコードをカスタム・ドメインの DNS 設定に追加する必要があります。 DNS 設定は、対応するドメイン・レジストラーの構成設定にあります。 このステップを実行して、カスタム・ドメインをターゲットとするトラフィックが、 Code Engine カスタム・ドメイン・マッピングで定義されている Code Engine 関数にルーティングされるようにします。

カスタム・ドメインのテスト

ドメイン・レジストラーを使用してカスタム・ドメイン構成を完了し、CNAME レコードの更新が公開されたら、カスタム・ドメイン・マッピングを使用して機能をテストできます。

ブラウザーを使用して、 curl コマンドでカスタム・ドメインをターゲットにして関数を呼び出します。

curl -v -X GET https://www.example.com

カスタム・ドメインの呼び出しの出力は、 icr.io/codeengine/helloworld サンプル・イメージを使用する myhellofun 関数にマップされます。