IBM Cloud Docs
高可用性アプリケーションの構成

高可用性アプリケーションの構成

IBM Cloud® Code Engine アプリケーションを複数の地域にデプロイして、地域の障害に対する回復力を持たせることができます。 この例では、 IBM Cloud Internet Services というグローバル・コンテンツ配信ネットワーク (CDN) を使用していますが、代替プロバイダーを使用できます。 この例では、カスタム・ドメインも使用します。

前提条件

  • アプリケーションのカスタム・ドメイン・ネーム ( example.com など) が必要です。 そのドメイン・ネームを Code Engine アプリケーションで使用します。
  • Cloud Internet Services (CIS)のインスタンスをセットアップします。
  • ドメイン・ネームを Cloud Internet Services (CIS)に追加します。 ドメイン・ネームを Cloud Internet Services (CIS) に登録すると、そのドメイン・ネームの制御は Cloud Internet Services (CIS) に委任されます。 このステップは完了までにしばらく時間がかかる場合があることに注意してください。

さまざまな地域でのプロジェクトの作成

3 つの異なる地域に Code Engine プロジェクトを作成します。 共通の命名パターンと共有タグを使用できます。

例えば、CLI またはコンソールを使用して、 au-sydeu-de、および br-sao の各リージョンに global-app-project というプロジェクトを作成します。

表 1. 複数の地域のプロジェクト
名前 ステータス タグ Location リソース・グループ 作成日時
global-app-project 準備完了 global-app シドニー(au-syd デフォルト
global-app-project 準備完了 global-app フランクフルト(eu-de デフォルト 2 分
global-app-project 準備完了 global-app サンパウロ (br-sao) デフォルト 3 分

詳しくは、 プロジェクトの管理 を参照してください。

複数の地域へのアプリのデプロイ

プロジェクトが複数のリージョンに作成されたので、各プロジェクトにアプリケーションをデプロイします。

例えば、 codeengine/helloworld アプリをデプロイします。

  1. 「Code Engine プロジェクト」 ページで、作成したプロジェクトの 1 つの名前をクリックします。

  2. 「アプリケーション」 をクリックし、 「作成」 をクリックして新規アプリケーションを作成します。

  3. 以下の設定を使用してアプリを構成します。

    1. アプリケーションに global-app という名前を付けます。
    2. アプリのコンテナー・イメージを参照するには、 「コンテナー・イメージ」 を選択します。
    3. イメージ参照の icr.io/codeengine/helloworld を入力します。
    4. 「リソース」&「スケーリング」 セクションで、インスタンスの最小数を 1 に設定します。 インスタンスの最小数を 1 に設定することで、 CIS インスタンスからのヘルス・チェックを有効にしてプールの可用性をモニターし、正常なプールにトラフィックをルーティングできるようにすることができます。
    5. 残りのオプションはデフォルト設定のままにして、 「作成」 をクリックします。
  4. これらのステップを繰り返して、各プロジェクトにアプリケーションを作成します。

アプリケーションのデプロイについて詳しくは、アプリケーションのデプロイを参照してください。

カスタム・ドメインの証明書の生成

エンタープライズ環境では、企業ドメイン管理者と協力して、必要な証明書を取得します。 ただし、カスタム・ドメインが自分の制御下にあり、自己認証されていない証明書を素早く作成したい場合は、オプションで Let 's Encrypt サービスと Certbot を使用して証明書を取得できます。

  1. Certbotをインストールします。 Certbot は、CA とサーバーの間の対話を自動化するための Automatic Certificate Management Environment(ACME) プロトコルのクライアントです。 Let 's Encrypt サービスは、このクライアントを使用してドメイン所有権を検証し、証明書を発行します。 Certbot Instructions ページから、ソフトウェアとして Other を選択し、ワークステーションのオペレーティング・システムを選択して、Certbot コマンド・ラインをインストールするための該当する情報を取得します。

  2. 以下のコマンドを実行して、証明書を作成します。 このコマンド例では、 example.com および www.example.com カスタム・ドメインの証明書を作成します。 必ず、独自のカスタム・ドメインのコマンドを更新してください。

    certbot certonly --manual --preferred-challenges dns --email webmaster@example.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos --domain example.com --domain www.example.com
    
  3. ドメインを所有していることを確認するには、前のステップで要求したドメインの TXT レコードに、Certbot ツールの出力で提供された値 (例えば、 _acme_challenge.example.com および _acme_challenge.ww.example.com) を設定します。 TXT レコードを設定した後、Certbot コマンドを続行します。

  4. Certbot は、Let 's Encrypt によって署名された証明書を取得します。 証明書が保管される場所は、Certbot の出力によって提供されます。 fullchain.pem ファイルと privkey.pem ファイルを見つけます。

TLS シークレットの作成

証明書を Code Engineに保管するための TLS シークレットを作成します。

  1. 「Code Engine プロジェクト」 ページで、作成したプロジェクトの 1 つの名前をクリックします。
  2. 「Secrets and configmaps」 を選択します。
  3. 「作成」 をクリックします。
  4. 「TLS シークレット」 をクリックします。
  5. 名前として global-tls を入力します。
  6. fullchain.pem ファイルの内容を 「証明書チェーン」 フィールドにコピーします。
  7. privkey.pem ファイルの内容を 「秘密鍵」 フィールドにコピーします。
  8. 「作成」 をクリックします。
  9. これらのステップを繰り返して、前に作成した各プロジェクトに TLS シークレットを作成します。

詳しくは、 シークレットの処理 を参照してください。

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

アプリがデプロイされたら、それらのアプリのカスタム・ドメイン・マッピングを構成します。

  1. 「Code Engine プロジェクト」 ページで、作成したプロジェクトの 1 つの名前をクリックします。
  2. 「アプリケーション」 を選択します。
  3. global-app アプリケーションを選択します。
  4. 「ドメイン・マッピング」 を選択します。
  5. 可視性として 「パブリック」 を選択します。
  6. 「作成」 をクリックして、カスタム・ドメイン・マッピングを作成します。
  7. 「選択」 をクリックして既存の TLS シークレットを選択し、 global-tls を選択します。
  8. 完全修飾ドメイン名を入力します (例: www.example.com)。
  9. CNAME ターゲット値をメモします。 CISでドメインのルーティングをセットアップするには、この値が必要です。
  10. アプリ名が global-app であることを確認します。
  11. 「作成」 をクリックします。
  12. これらのステップを繰り返して、作成したアプリケーションごとにカスタム・ドメイン・マッピングを作成します。

ヘルス・チェックの構成

アプリケーションの作成時に、 「インスタンスの最小数」 を 1 に設定します。 アプリのインスタンスは常に各リージョンで実行されるため、 CIS インスタンスからヘルス・チェックをセットアップして、プールの可用性をモニターすることができます。 ヘルス・チェックをセットアップすると、トラフィックは常に実行中のインスタンスにルーティングされるため、アプリの可用性が高くなります。

  1. CIS インスタンスから、 「信頼性」>「グローバル・ロード・バランサー」>「ヘルス・チェック」 にナビゲートします。
  2. 「作成」 をクリックします。
  3. ヘルス・チェックにアプリケーション名 global-app と同じ名前を付けます。
  4. 「モニター・タイプ」HTTPS に設定し、 「ポート」443 に設定します。
  5. 残りのオプションについては、デフォルトを受け入れます。 codeengine/helloworld アプリ以外のアプリを使用している場合は、アプリに必要なオプションをすべて調整してください。
  6. 「作成」 をクリックします。

詳しくは、 ヘルス・チェックのセットアップ を参照してください。

Cloud Internet Services (CIS) ロード・バランサーの構成

カスタム・ドメイン・マッピングが Ready 状態になったら、アプリケーション・グローバル・エンドポイント用に Cloud Internet Services (CIS) ロード・バランサーを構成します。 詳しくは、グローバル・ロード・バランサーの構成を参照してください。

  1. Cloud Internet Services (CIS) のコンソールで「信頼性」ページに移動します。

  2. 「オリジン・プール (Origin pools)」 を選択し、「作成」 をクリックします。

    1. プールに global-app-au-syd という名前を付けます。
    2. 「起点アドレス」 を、ドメイン・ネーム・マッピングの CNAME ターゲットに設定します。
    3. Host ヘッダーをドメイン名に設定します。
    4. 「ヘルス・チェック」 で、 「既存のヘルス・チェック」 を選択し、 global-app を選択します。
    5. 保存 をクリックします。
    6. デプロイしたアプリが含まれている地域ごとに、これらのステップを繰り返します。 ターゲットにする地域を反映するように名前を変更します。 例えば、 global-app-de-euglobal-app-br-sao などです。
  3. 「ロード・バランサー」 を選択し、「作成」 をクリックします。

    1. ロード・バランサーに名前を付けます。 この名前はカスタム・ドメイン URL に表示されることに注意してください。 例えば、カスタム・ドメインが global-app.example.com で、ロード・バランサーに global-app という名前を付けた場合、URL は global-app.example.com になります。
    2. 「トラフィック・ステアリング」Geo に設定します。
    3. 「地理的位置 (Geo)」 経路を追加します。 すべての CIS 領域の経路を作成するか、一部の領域のみの経路を作成するかを選択できます。
      • すべての CIS 領域の経路を作成する場合は、作成する各経路に、前に作成したすべての起点プールを追加します。 実行中のアプリが含まれ、構成する地域経路に最も近い地域になるように、それらをソートします。 例えば、 au-sydeu-de、および br-sao でアプリケーションを作成した場合、 Oceana では au-syd を最初に配置します。 東ヨーロッパおよび西ヨーロッパの場合は、 de-eu を最初に指定します。 また、北アメリカと南アメリカの場合は、 br-sao を最初に配置します。
      • 一部の CIS リージョンのみのルートを作成する場合は、 Default リージョンのルートを追加します。 この経路は、指定された領域が使用できない場合に使用するフォールバックです。
    4. 「作成」 をクリックして、ロード・バランサーを作成します。

アプリが使用可能であることを確認します

ブラウザーを開き、ロード・バランサー名とカスタム・ドメイン名を入力します (例: www.global-app.example.com )。

これで、アプリケーションの可用性が高くなりました。

チュートリアルのクリーンアップ

  1. CISからグローバル・ロード・バランサーと起点プールを削除します。
  2. CISから DNS レコードを削除します。 詳しくは、 DNS レコードの削除 を参照してください。
  3. 作成した各プロジェクトを削除します。 プロジェクトを削除すると、そのプロジェクトに含まれているすべてのコンポーネントも削除されます。 詳しくは、 プロジェクトの削除 を参照してください。

カスタム・ドメインは削除されませんが、作成したアプリケーションとの関連付けは解除されます。