ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を完了するときは、これらの値をクラウド環境に固有の値に置き換えます。
OCI Load BalancerのHTTPリクエストに基づくOracle Cloud Infrastructureインスタンス・プールの自動スケーリング
イントロダクション
このチュートリアルでは、OCI Load Balancerで受信したHTTPリクエストの数に基づいて、Oracle Cloud Infrastructure (OCI)インスタンス・プールを自動的にスケーリングする方法を説明します。3つの主なトピックについて説明します。
- OCIモニタリング・アラーム・メトリック:ロード・バランサを監視し、HTTPリクエスト・メトリックに基づいてアラームを設定します。
- OCI通知サービス:アラームがトリガーされたときに通知を送信します。
- OCI Functions:受信した通知に基づいてインスタンス・プールのサイズを調整するファンクションを作成および使用します。
OCIモニタリング: OCIモニタリング・サービスを使用して、メトリックおよびアラーム機能を使用してクラウド・リソースをアクティブおよびパッシブにモニターします。OCIモニタリング・サービスは、メトリックを使用してリソースおよびアラームをモニターし、これらのメトリックがアラームで指定されたトリガーを満たしたときに通知します。
OCI通知: OCIのリソースで何かが発生した場合、アラーム、イベント・ルールおよびコネクタを使用して、サポートされているエンドポイント(電子メールやテキスト・メッセージ(SMS)を含む)を介して、判読可能なメッセージを取得できます。カスタムHTTPSエンドポイントおよびOCI関数を使用して、タスクを自動化することもできます。
OCI Functions: OCI Functionsは、完全なマネージド型、マルチテナントでスケーラビリティが高くオンデマンドのFunctions-as-a-Serviceプラットフォームです。エンタープライズグレードのOCI上に構築されており、Fn Projectオープン・ソース・エンジンによって強化されています。ビジネス・ニーズを満たすためのコードの作成に焦点を当てる場合は、OCI Functions (Functions、旧称Oracle Functions)を使用します。
高レベルのアーキテクチャ

ノート:
このチュートリアルは、教育および研究目的でのみ設計されています。これは、学習者が制御された設定で実験し、実用的な経験を得るための環境を提供します。このチュートリアルで使用するセキュリティ構成および演習は、実際のシナリオには適していない場合があります。
実際のアプリケーションのセキュリティに関する考慮事項は、多くの場合、はるかに複雑で動的です。したがって、本番環境でここに示したいずれかの手法または構成を実装する前に、包括的なセキュリティ評価およびレビューを行うことが不可欠です。このレビューには、アクセス制御、暗号化、監視、コンプライアンスなど、セキュリティのすべての側面が含まれ、システムが組織のセキュリティ・ポリシーおよび標準に準拠していることを確認する必要があります。
演習環境から実際のデプロイメントに移行する場合、セキュリティは常に最優先事項である必要があります。
目的
-
OCIインスタンス・プールの自動スケーリング・メカニズムを設定します。この自動スケーリング・メカニズムは、OCI Load Balancerで受信したHTTPリクエストの数に基づきます。次の方法について学習します。
-
HTTPリクエスト・メトリックのモニター: OCI Monitoringを設定して、ロード・バランサからHTTPリクエスト・メトリックを追跡します。
-
アラームの作成と構成: 特定のHTTPリクエストしきい値に基づいてトリガーするアラームを定義および構成します。
-
イベント通知の設定: アラームがトリガーされたときに警告するイベント通知を設定します。
-
OCI関数の実装: トリガーされたアラームに応じてインスタンス・プールのサイズを自動的に調整するファンクションを作成およびデプロイします。
-
前提条件
-
OCI環境
-
管理者権限を持つOracleアカウント。
-
リソースを作成するためのコンパートメント。
ノート:コンパートメント名とコンパートメントIDに注意してください。
-
プライベート・サブネットを持つVCN。詳細は、「Virtual Cloud Networkの作成」を参照してください。
-
OCI Load Balancerは、プール上のインスタンスを指すbackendSetを使用してインスタンス・プールにアタッチされます。詳細は、Load Balancerの作成を参照してください。
-
単純なHTTPアプリケーションがポート
80で実行されているインスタンスが少なくとも1つあるインスタンス・プール。詳細は、インスタンス構成およびインスタンス・プールの使用を参照してください。
-
-
ローカル・マシン環境
-
プライベート・サブネット上のOracle Linuxコンピュート・インスタンス。これは、このチュートリアルでデプロイされるOCIストリーミングやOCI関数など、プライベート・サブネット上のリソースにアクセスするために重要です。
-
Oracle Linuxコンピュート・インスタンスに接続し、チュートリアルのタスクを実行するOCI要塞ホスト。詳細は、要塞の概要を参照してください。
-
ローカルOracle Cloud Infrastructureコマンドライン・インタフェース(OCI CLI)を設定します。詳細は、CLIのインストールを参照してください。
-
イメージをビルドできるローカルDocker。Oracle Linuxを使用している場合は、Docker: Oracle Linux 8 (OL8)へのDockerのインストールを参照してください。
-
OCIにファンクションをデプロイできるようにするローカルFN CLI。詳細は、Fn ProjectのCLIのインストールを参照してください。
-
タスク1: 動的グループの設定
ドメインに移動し、「動的グループ」をクリックして、次のグループを作成します。
動的グループ名: MyFunctions。
ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}
タスク2: ポリシーの作成
「ポリシー」に移動して、次のポリシーを作成します。
ポリシー名: FunctionsPolicies。
Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage compute-management-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage load-balancers in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read metrics in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read alarms in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-pools in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read app-catalog-listing in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use volume-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use virtual-network-family in compartment YOUR-COMPARTMENT-NAME
タスク3: OCIコンテナ・レジストリの作成
-
「開発者サービス」に移動し、「コンテナ・レジストリ」をクリックして、Fnイメージのプライベート・リポジトリを作成します。
リポジトリ名:
lab/fn-autoscale-instance-pool。
-
リポジトリを確認し、ネームスペースをメモします。

-
OCI CLIおよびDockerがインストールされているターミナル・シェルを開き、レジストリにログインします。リージョンの正しいURLを確認してください。このチュートリアルでは、レジストリURLが
gru.ocir.ioであるブラジル東部(サンパウロ)リージョンを使用しています。docker login gru.ocir.io Username: <your container namespace>/youruser Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
タスク4: インスタンス・プールを自動スケーリングするためのPython OCIファンクションの作成
ノート:ストリーム・プールの同じサブネットであるプライベート・サブネットを選択していることを確認してください。
-
OCIコンソールに移動し、「開発者サービス」をクリックします。「ファンクション」で、「アプリケーション」および「アプリケーションの作成」をクリックします。

-
いくつかの構成を作成して、スケーリング・サイズを設定します。
ノート:これらの構成変数は、関数がインスタンス・プールのスケールインおよびスケールアウトに使用する値を決定するために使用されます。
シークレット名 Value INSTANCE_POOL_TARGET_SIZE 新規インスタンス・プール・サイズの値の設定 INSTANCE_POOL_DESIRED_SIZE インスタンス・プールの通常サイズの設定 このチュートリアルでは、1つのインスタンスのインスタンス・プールを使用し、
2にスケールアウトします。
-
Docker、OCI CLI、Fn Project CLIがインストールされているターミナル・シェルに移動し、次のコマンドを実行してファンクションを初期化します。
ノート:タスクに従った場合、Dockerログイン・コマンドは現在までにすでに実行されています。実行されていない場合は、タスク3.3でDockerログに進みます。
mkdir lab cd lab fn create context oci-cloud --provider oracle fn use context oci-cloud fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID fn update context api-url https://functions.sa-saopaulo-1.oraclecloud.com fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/lab fn init --runtime python fn-autoscale-instance-pool cd fn-autoscale-instance-pool ls -lrtノート:このチュートリアルでは、ブラジル東部(サンパウロ)リージョンを使用しています。別のリージョンを使用している場合は、
api-urlおよびregistryの場所を変更する必要があります。
initコマンドは、func.pyにHello World関数を作成します。このコードは上書きします。 -
func.pyからPython関数のサンプル・コードを取得し、関数
initコマンド中に作成されたローカルfunc.pyを上書きします。# Copy the function code from this lab and save it on /tmp/func.py in your shell machine ls -lrt /tmp/func.py # Overwrite the func.py with tha lab's code cp /tmp/func.py func.py # Add the OCI package on the requirements.txt file, this will be needed to work with OCI. echo -e "\noci" >> requirements.txt # Check if requirements.txt has two lines cat requirements.txt
-
新しいコードを作成し、ファンクションをデプロイします。
ls -lrt fn deploy --app MyApp
タスク5: OCI通知の作成
-
OCIコンソールに移動し、「開発者サービス」をクリックします。「アプリケーション統合」で、「通知」を選択し、「トピックの作成」をクリックします。
名前:
AutoScaleTopic。
-
「サブスクリプション」をクリックして新しいサブスクリプションを作成し、タスク4で作成したファンクションを選択します。

タスク6: スケールアウトするアラーム定義の作成(インスタンス・プール・サイズのターゲット値への調整)
-
OCIコンソールに移動し、「監視および管理」をクリックします。「モニタリング」で、「アラーム定義」を選択し、「アラームの作成」をクリックします。
ノート:このアラームのしきい値、間隔はチュートリアル用に定義されており、アプリケーションに応じて独自のニーズでカスタマイズできます。
アラーム名:
instance_pool_scale_OUT。 -
アラームを定義する次の情報を入力します。
-
「メトリックの説明」セクションで、次の情報を入力します。
- メトリック・ネームスペース:
oci_lbaas。 - メトリック名:
HttpRequests。 - 間隔:
1 minute。 - 統計:
Max。
- メトリック・ネームスペース:
-
「メトリック・ディメンション」セクションで、次の情報を入力します。
-
最初のメトリック・ディメンション:
- ディメンション名:
resourceID。 - ディメンション値:ロード・バランサOCIDを選択します。
- ディメンション名:
-
第2メトリック・ディメンション:
- ディメンション名:
backendSetName。 - ディメンション値: backendSet名を選択します。
- ディメンション名:

-
-
「トリガー・ルール1」セクションで、次の情報を入力します。
- 演算子:
greater than。 - 値:
30 - アラーム本体:接続数が予想よりも多く、スケーリング・プロセスを開始します。

- 演算子:
-
-
次の情報を入力して、アラーム通知を定義します。
-
「宛先」セクションに、次の情報を入力します。
- 宛先サービス: 「通知」を選択します。
- コンパートメント:コンパートメントを選択します。
- トピック:トピックを選択します。
-
「メッセージ・フォーマット」セクションで、「整形されたJSONメッセージの送信(改行を含むRAWテキスト)」を選択し、テストのために「通知頻度」の1分間の「通知の繰返し」を選択します。

-
-
「拡張オプション」をクリックし、新しいタグを追加します。
ノート:これは、スケール・インまたはスケール・アウトのタイプを定義するために必須のタグ付けです。
タグ・ネームスペース: 「None (apply a freeform tag)」を選択します。
タグ・キー:autoscaling_type。値:out。
タスク7: スケールインするアラーム定義の作成(インスタンス・プール・サイズを必要なサイズに戻す)
-
OCIコンソールに移動し、「監視および管理」をクリックします。「モニタリング」で、「アラーム定義」を選択し、「アラームの作成」をクリックします。
ノート:このアラームのしきい値、間隔はチュートリアル用に定義されており、アプリケーションに応じて独自のニーズでカスタマイズできます。
アラーム名:
instance_pool_scale_IN。 -
アラームを定義する次の情報を入力します。
-
「メトリックの説明」セクションで、次の情報を入力します。
- メトリック・ネームスペース:
oci_lbaas。 - メトリック名:
HttpRequests。 - 間隔:
1 minute。 - 統計:
Max。
- メトリック・ネームスペース:
-
「メトリック・ディメンション」セクションで、次の情報を入力します。
-
最初のメトリック・ディメンション:
- ディメンション名:
resourceID。 - ディメンション値:ロード・バランサOCIDを選択します。
- ディメンション名:
-
第2メトリック・ディメンション:
- ディメンション名:
backendSetName。 - ディメンション値: backendSet名を選択します。
- ディメンション名:
-
-
「トリガー・ルール1」セクションで、次の情報を入力します。
- 演算子:
less than。 - 値:
30 - アラーム本体:接続数が許容値に戻り、スケールインをコールしてインスタンスの数を必要な値に戻します。

- 演算子:
-
-
次の情報を入力して、アラーム通知を定義します。
-
「宛先」セクションに、次の情報を入力します。
- 宛先サービス: 「通知」を選択します。
- コンパートメント:コンパートメントを選択します。
- トピック:トピックを選択します。
-
「メッセージ・フォーマット」セクションで、「整形されたJSONメッセージ(改行されたRAWテキスト)の送信」を選択します。
-
-
「拡張オプション」をクリックし、新しいタグを追加します。
ノート:これは、スケール・インまたはスケール・アウトのタイプを定義するために必須のタグ付けです。
タグ・ネームスペース: 「None (apply a freeform tag)」を選択します。
タグ・キー:autoscaling_type。値:in。
タスク8: ロードの作成とアラームの動作の確認
-
LoadBalancer IPを取得し、アプリケーションへの複数のコールをポート
80で実行します。シェル・コンソールを開き、次のコードを実行してロード・バランサをコールします。i=1 while true do echo "Request $i" curl http://your-ip-here ((i++)) echo "" # Prints a newline for better readability between requests done単純なアプリケーション・ロードの出力。

ノート:これは、シナリオを示す単純なHTTP Apache Webサーバーです。
-
インスタンス・プールの実際のサイズとステータスを確認します。このチュートリアルでは、サイズが
1のインスタンス・プールを使用します。
-
アラーム定義を開いてメトリックを表示し、アラームが起動するかどうかを確認します。


-
メトリック間隔に応じて数分後、スケールアウト関数が起動します。
インスタンス・プールを開き、「状態」(「スケーリング中」および「ターゲット・インスタンス数」)が
2であることを確認します。
スケーリング・プロセス後、インスタンス・プールのサイズが
2であることがわかります。
-
シェルスクリプトを停止し、スケールアウト遷移からのアラームが OKに戻るまで待ってから、スケールイン用のアラームを確認します。両方のアラームが更新されるまで数分待ってから、スケールイン用のアラームがいつ起動するかを確認します。

現在、スケールインアラームは火災状態です。

HttpRequestsが
30のしきい値を下回ったことに注意します。
インスタンス・プールのスケールインが開始されました。

インスタンス・プール・サイズが
1の値に戻っていることに注意してください。
関連リンク
承認
- 著者 - Joao Tarla (Oracle LAD Aチーム・ソリューション・エンジニア)
その他の学習リソース
docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントは、Oracle Help Centerを参照してください。
Autoscale an Oracle Cloud Infrastructure Instance Pool based on OCI Load Balancer HTTP Requests
F99759-01
May 2024