Oracle Cloud Infrastructure Container Instancesの自動スケール

コンテナを使用してデプロイするアプリケーションは、需要に応じてスケーリングする必要があります。たとえば、学生登録アプリケーションは、学期の開始時にスケール・アップする必要がありますが、学期が進行したらスケール・ダウンする必要があります。Oracle Cloud Infrastructure Container Instancesでは、コンテナ化されたアプリケーションをホストし、必要に応じて自動スケーリングできます。

OCIコンテナ・インスタンスを使用すると、コンテナ用に最適化されたサーバーレス・コンピュートでアプリケーションを簡単に実行できます。コンピュート・シェイプ、リソース割当て、ネットワーキングおよびその他のオプション構成を柔軟に指定できる1つ以上のコンテナを簡単に起動することもできます。

このリファレンス・アーキテクチャを使用して、リソース使用率に基づいてOCIコンテナ・インスタンスを自動スケーリングします。

アーキテクチャ

このアーキテクチャでは、Oracle通知サービス、アラームおよびOracle関数の組合せを使用して、OCIコンテナ・インスタンスを自動スケーリングします。

次の図は、このリファレンス・アーキテクチャを示しています。



autoscaling-container-instances-diagram-oracle.zip

アーキテクチャには、次のコンポーネントがあります。

  • テナント

    テナンシは、Oracle Cloud Infrastructureへのサインアップ時にOracleがOracle Cloud内で設定するセキュアで分離されたパーティションです。テナンシ内のOracle Cloudでリソースを作成、編成および管理できます。テナンシは、会社または組織と同義です。通常、会社は単一のテナンシを持ち、そのテナンシ内の組織構造を反映します。通常、単一のテナンシは単一のサブスクリプションに関連付けられ、単一のサブスクリプションには1つのテナンシのみが含まれます。

  • リージョン

    Oracle Cloud Infrastructureリージョンは、可用性ドメインと呼ばれる1つ以上のデータ・センターを含むローカライズされた地理的領域です。リージョンは他のリージョンから独立しており、広大な距離で(複数の国または複数の大陸にまたがる)リージョンを分離できます。

  • コンパートメント

    コンパートメントは、Oracle Cloud Infrastructureテナンシ内のリージョン間論理パーティションです。コンパートメントを使用して、Oracle Cloudでリソースを編成、リソースへのアクセスを制御および使用割当てを設定します。特定のコンパートメント内のリソースへのアクセスを制御するには、誰がリソースにアクセスできるか、どのアクションを実行できるかを指定するポリシーを定義します。

  • 可用性ドメイン

    可用性ドメインは、リージョン内の独立したスタンドアロン・データ・センターです。各可用性ドメイン内の物理リソースは、他の可用性ドメイン内のリソースから分離されているため、フォルト・トレランスが提供されます。可用性ドメインどうしは、電力や冷却、内部可用性ドメイン・ネットワークなどのインフラを共有しません。そのため、ある可用性ドメインでの障害がリージョン内の他の可用性ドメインに影響することはほとんどありません。

  • フォルト・ドメイン

    フォルト・ドメインは、可用性ドメイン内のハードウェアおよびインフラストラクチャのグループです。各アベイラビリティ・ドメインに3つのフォルト・ドメインがあり、それぞれ独立した電源とハードウェアがあります。複数のフォルト・ドメインにリソースを分散すると、アプリケーションは、フォルト・ドメイン内の物理サーバー障害、システム・メンテナンスおよび電源障害を許容できます。

  • 仮想クラウド・ネットワーク(VCN)およびサブネット

    VCNは、Oracle Cloud Infrastructureリージョンで設定する、カスタマイズ可能なソフトウェア定義のネットワークです。VCNは、従来のデータ・センター・ネットワークと同様に、ネットワーク環境の完全な制御を可能にします。VCNには重複しない複数のCIDRブロックを含めることができ、VCNの作成後にそれらを変更できます。VCNをサブネットにセグメント化して、そのスコープをリージョンまたは可用性ドメインに設定できます。各サブネットは、VCN内の他のサブネットと重複しない連続した範囲のアドレスで構成されます。サブネットのサイズは、作成後に変更できます。サブネットはパブリックにもプライベートにもできます。

  • セキュリティ・リスト

    サブネットごとに、サブネットの内外で許可する必要があるトラフィックのソース、宛先およびタイプを指定するセキュリティ・ルールを作成できます。

  • ネットワーク・アドレス変換(NAT)ゲートウェイ

    NATゲートウェイを使用すると、VCN内のプライベート・リソースは、受信インターネット接続にそれらのリソースを公開することなく、インターネット上のホストにアクセスできます。

  • サービス・ゲートウェイ

    サービス・ゲートウェイは、VCNからOracle Cloud Infrastructure Object Storageなどの他のサービスへのアクセスを提供します。The traffic from the VCN to the Oracle service travels over the Oracle network fabric and never traverses the internet.

  • インターネット・ゲートウェイ

    インターネット・ゲートウェイにより、VCN内のパブリック・サブネットとパブリック・インターネットの間のトラフィックが許可されます。

  • クラウド・ガード

    Oracle Cloud Guardを使用して、Oracle Cloud Infrastructure内のリソースのセキュリティをモニターおよびメンテナンスできます。クラウド・ガードでは、ディテクタ・レシピを使用して、リソースでセキュリティの弱点を調べ、オペレータおよびユーザーにリスクのあるアクティビティを監視するために定義できます。構成の誤りやセキュアでないアクティビティが検出されると、クラウド・ガードは、定義できるレスポンダ・レシピに基づいて、修正処理を推奨し、それらのアクションの実行を支援します。

  • ロード・バランサ

    Oracle Cloud Infrastructure Load Balancingサービスは、単一のエントリ・ポイントからバックエンドの複数のサーバーへの自動トラフィック分散を提供します。

  • セキュリティ・ゾーン

    セキュリティ・ゾーンは、データの暗号化やコンパートメント全体のネットワークへのパブリック・アクセスの防止などのポリシーを実施することで、Oracleのセキュリティのベスト・プラクティスを最初から確実に実行します。セキュリティ・ゾーンは、同じ名前のコンパートメントに関連付けられ、そのコンパートメントおよびそのサブコンパートメントに適用されるセキュリティ・ゾーン・ポリシーまたはレシピが含まれます。標準コンパートメントを追加またはセキュリティ・ゾーン・コンパートメントに移動することはできません。

  • レジストリ

    Oracle Cloud Infrastructure Registryは、Oracle管理のレジストリで、開発から本番のワークフローを簡略化できます。レジストリを使用すると、Dockerイメージなどの開発アーティファクトを簡単に格納、共有および管理できます。Oracle Cloud Infrastructureの高可用性とスケーラブルなアーキテクチャにより、アプリケーションを確実にデプロイおよび管理できます。

  • ロギング
    Loggingは、クラウド内のリソースから次のタイプのログへのアクセスを提供する高度にスケーラブルで完全管理型のサービスです:
    • 監査ログ: Auditサービスによって発行されるイベントに関連するログ。
    • サービス・ログ: APIゲートウェイ、イベント、ファンクション、ロード・バランシング、オブジェクト・ストレージ、VCNフロー・ログなどの個々のサービスによって発行されたログ。
    • カスタム・ログ: カスタム・アプリケーション、他のクラウド・プロバイダまたはオンプレミス環境からの診断情報を含むログ。
  • ポリシー

    Oracle Cloud Infrastructure Identity and Access Managementポリシーでは、誰がどのリソースにどのようにアクセスできるかを指定します。アクセス権はグループ・レベルおよびコンパートメント・レベルで付与されます。つまり、特定のコンパートメントまたはテナンシ内の特定のアクセスのタイプをグループに付与するポリシーを記述できます。

  • ボールト

    Oracle Cloud Infrastructure Vaultでは、データを保護する暗号化キーと、クラウド内のリソースへのアクセスを保護するために使用するシークレット資格証明を集中管理できます。Vaultサービスを使用して、ボールト、キーおよびシークレットを作成および管理できます。

推奨事項

セキュアで堅牢な環境を作成するための開始点として、次の推奨事項を使用します。 お客様の要件は、ここで説明するアーキテクチャとは異なる場合があります。
  • VCN

    VCNを作成するときには、必要なCIDRブロックの数を決定し、VCN内のサブネットにアタッチする予定のリソースの数に基づいて各ブロックのサイズを決定します。標準プライベートIPアドレス空間内のCIDRブロックを使用します。

    プライベート接続を設定する他のネットワーク(Oracle Cloud Infrastructure、オンプレミス・データ・センターまたは別のクラウド・プロバイダ)と重複しないCIDRブロックを選択します。

    VCNを作成した後、そのCIDRブロックを変更、追加および削除できます。

    サブネットを設計するときには、トラフィック・フローおよびセキュリティ要件を考慮してください。特定の層またはロール内のすべてのリソースを同じサブネットに接続し、セキュリティ境界として機能できます。

  • クラウド・ガード

    Oracleによって提供されるデフォルトのレシピをクローニングおよびカスタマイズして、カスタム・ディテクタおよびレスポンダ・レシピを作成します。これらのレシピを使用すると、警告を生成するセキュリティ違反のタイプと、そのレシピに対して実行できるアクションを指定できます。たとえば、表示がパブリックに設定されているオブジェクト・ストレージ・バケットを検出できます。

    クラウド・ガードをテナンシ・レベルで適用して、範囲を広げ、複数の構成を維持する管理上の負担を軽減します。

    管理対象リスト機能を使用して、特定の構成をディテクタに適用することもできます。

  • セキュリティ・ゾーン

    最大限のセキュリティが必要なリソースの場合、Oracleではセキュリティ・ゾーンを使用することをお薦めします。セキュリティ・ゾーンは、ベスト・プラクティスに基づくセキュリティ・ポリシーのOracle定義レシピに関連付けられたコンパートメントです。たとえば、セキュリティ・ゾーン内のリソースにはパブリック・インターネットからアクセスできず、顧客管理キーを使用して暗号化する必要があります。When you create and update resources in a security zone, Oracle Cloud Infrastructure validates the operations against the policies in the security-zone recipe, and denies operations that violate any of the policies.

  • ネットワーク・セキュリティ・グループ(NSG)

    NSGを使用して、特定のVNICに適用されるイングレスおよびエグレス・ルールのセットを定義できます。NSGではVCNのサブネット・アーキテクチャをアプリケーションのセキュリティ要件から分離できるため、セキュリティ・リストではなくNSGを使用することをお薦めします。

考慮事項

このリファレンス・アーキテクチャをデプロイする場合は、次の点を考慮してください。

  • パフォーマンス

    このソリューションは、コンテナ・インスタンスがAPIコールを作成してコンテナ・インスタンスのIPアドレスを返してロード・バランサのバックエンド・セットに追加するのを待つ必要がないため、新しいコンテナ・インスタンスを作成してファンクション自体のバックエンド・セットに追加するよりも高速です。Oracle Cloud Infrastructure Functionsの実行制限は、コールごとに5分です。

  • セキュリティ

    すべてのコンテナ・インスタンスをプライベート・サブネットに配置し、パブリック・サブネットにはパブリック・ロード・バランサのみを配置してください。

  • 拡張性

    必ずコンテナ・インスタンスの最小数と最大数を設定してください。多数のインスタンスをスケーリングするためにソリューションを完全にテストします。

  • コスト

    Oracle Cloud Infrastructure Registryの使用は無料です。コンテナ・インスタンスにはコストがかかりますが、ファンクションは実行中の時間にのみコストが発生します。

デプロイ

コンテナ・インスタンスを自動スケーリングするには、次の概要レベルのステップに従います。

  1. Oracle Cloud Infrastructure Resource Managerにスタックを作成して、コンテナ・インスタンスを作成し、ロード・バランサを作成し、コンテナ・インスタンスのIPを使用してコンテナ・インスタンスをロード・バランサのバックエンド・セットに追加します。
  2. 次のパラメータを取得するようにスタックを作成します。
    • Compartment_OCID
    • Region
    • Tenancy_OCID
    • Container_Instances_Count
    • Is_Public_IP_Assigned
    • Container_instance_registry_secret
    • Container_Instance_Image_URL
    • Private_Subnet_OCID
    • Public_Subnet_OCID
  3. 前述のResource ManagerスタックからContainer_Instance_Countを読み取って、コンテナ・インスタンスに必要なスケール・アップまたはスケール・ダウン・コールに基づいて更新するOracle関数を作成します。
  4. Oracle関数でContainer_Instance_Countが更新されたら、更新されたContainer_Instance_Countを使用してリソース・マネージャにTerraformスタックを適用してから、ファンクションを終了します。
    リソース・マネージャ・スタックは、コールに基づいてOCIコンテナ・インスタンスを追加または終了し、ロード・バランサのバックエンド・セットに対してインスタンスを追加または削除します。
  5. 次の構成をOracle関数に追加します。
    • Min_Container_Instance
    • Max_Container_Instance
    • Compartment_ID
    • Resource_Manager_Stack_ID
  6. 新しく作成したOracleファンクション・イメージをOracle Cloud Infrastructure Registry (OCIR)にプッシュします。
  7. 通知サービスの下にトピックを作成し、適切な名前を付けます。
  8. 作成したトピックの下にサブスクリプションを作成し、プロトコルとしてファンクションを選択します。

    ノート:

    正しいコンパートメントおよびアプリケーションを選択して、作成したファンクションを選択します。
  9. oci_computecontainerinstanceネームスペースにアラーム定義を作成します。
    1. メトリックとしてCPU_utilizationまたはMem_Utilizationを選択します。
    2. ディメンションとしてコンテナ・インスタンス名を選択します。
    3. 「アラーム」に必要なしきい値を「起動」に設定します。
  10. この自動スケーリング・アーキテクチャをテストして、OCIコンテナ・インスタンスをスケール・アップおよびスケール・ダウンします。

詳細の参照

OCIコンテナ・インスタンスについてさらに学習します。

次の追加リソースを確認します。

承認

Authors: Christophe Pruvost, Karthic Ravindran, Chandrashekar Avadhani

Contributors: John Sulyok