OCIキューとOCIファンクションの統合による非同期ワークフローの最適化
Oracle Cloud Infrastructure (OCI) Queueサービスを使用すると、システム間で非同期にメッセージを送信できるため、システムを切り離してパフォーマンスを向上できます。大量のトランザクション・データを処理するように設計されており、メッセージが損失や重複なく処理されます。
OCIキュー・サービスは、プロデューサと消費者のスループットに基づいて完全に管理され、自動的にスケーリングされます。オープン・スタンダードを使用して、最小限の労力でクライアントまたはプロデューサとの通信をサポートします。サーバーレス・アプリケーションは、多くの場合、様々なサービス(APIゲートウェイ、ファンクションなど)の組合せを使用して適切に機能します。ただし、これらの分散コンポーネントが相互に通信するには、キュー・サービスが重要です。また、アプリケーションは、他のOCIコンポーネントやOCIの外部への通信を拡張することもできます。
アーキテクチャ
このリファレンス・アーキテクチャでは、サンプルPythonアプリケーションをOracle Container Engine for Kubernetes (OKE)にデプロイします。この例では、構成されたキューを定期的にポーリングして新しいメッセージをフェッチし、フェッチされたメッセージを使用して構成された関数を起動し、正常に実行されると、メッセージがキューから削除されます。
アプリケーションは、OCIサービスと対話するときにinstance_principalとして自身を認証します。キューおよびファンクションは任意のリージョンにでき、スタックの作成中にキューおよびファンクションOCIDsを指定する必要があります。Terraformデプロイメント後にキューおよびファンクションOCIDsを更新する必要がある場合は、Kubernetesデプロイメント・アーティファクト(作成されたOCI DevOpsプロジェクトの一部)を編集できます。
Terraformデプロイメントには、アプリケーション・ソース・コードを本番に移行するために必要なステップを自動化するために、OCI DevOpsサービスに必要なパイプラインおよびリポジトリの作成が含まれます。アプリケーションのソース・コードは、DevOpsコード・リポジトリにホストされます。ユーザーは、ビルド・パイプラインの開始をトリガーするコードをリポジトリにコミットできます。
次の図は、このリファレンス・アーキテクチャを示しています。
queue-fn-automation-arch-oracle.zip
アーキテクチャには次のコンポーネントがあります。
- リージョン
Oracle Cloud Infrastructureリージョンは、可用性ドメインと呼ばれる1つ以上のデータ・センターを含むローカライズされた地理的領域です。リージョンは他のリージョンから独立しており、広大な距離で(国間や大陸間でも)リージョンを分離できます。
- DevOpsプロジェクト
CI/CDワークフローの実装に必要なDevOpsリソースの論理グループ。DevOpsリソースは、アーティファクト、ビルド・パイプライン、デプロイメント・パイプライン、外部接続、トリガーおよび環境です。DevOpsプロジェクトを使用すると、すべてのDevOpsリソースのロギング、監視および通知を簡単に有効にできます。
- ビルド・パイプライン
ビルド・パイプラインは、ソース・コード・リポジトリからコミットIDを取得し、そのソース・コードを使用してビルド手順を実行します。ビルド・パイプラインは、ビルド・プロセスのステージのセット(ソフトウェア・アーティファクトの作成、テストおよびコンパイル、アーティファクトのOCIリポジトリへの配信、オプションでデプロイメントのトリガー)を定義します。ビルド実行のフローおよび指示は、ビルド仕様ファイルで定義できます。
- コード・リポジトリ
DevOpsサービスによってホストされるプライベートGitリポジトリ。OCI DevOpsコード・リポジトリを使用して、ソース・コードを格納、管理および開発できます。
- デプロイメント・パイプライン
ターゲット環境に一連のアーティファクトを配信およびデプロイするための一連のステップ。ソフトウェア・リリースのフローおよびロジックは、シリアルまたはパラレルで実行できるステージを定義することで制御できます。
- デプロイメント・ステージステージは、パイプラインの実行中に実行される個々のアクションです。DevOpsデプロイメント・パイプラインには、リリース・プロセスで使用する次の事前定義済ステージ・タイプが含まれています:
- ローリング・デプロイメント: OKE、ファンクションまたはインスタンス・グループへの増分リリース。
- Wait: N秒待機します。
- 手動承認: 承認されている場合は続行し、承認が否認された場合は停止します。
- 関数の起動: Functionをコールしてリクエスト・パラメータのアーティファクトを渡すことで、カスタム・タスクまたは統合を実行します。
- DevOpsアーティファクト
DevOpsアーティファクトは、アプリケーションを構成するファイル、バイナリ、パッケージ、マニフェストまたはイメージへの参照またはポインタです。アーティファクトを作成する場合は、実際のアーティファクトのソースの場所をOracle DevOpsに通知します。DevOpsは、OCIコンテナ・イメージ・レジストリおよびOCIアーティファクト・レジストリ・リポジトリをサポートしています。
- OCIロギングおよび通知サービス
OCIロギング・サービスは、デプロイメントに関連するログを格納します。デプロイメント・ランタイム出力およびデプロイメントの最終結果は、ログ・エントリとして表示されます。OCI通知サービスは、デプロイメント・プロジェクトとそのリソースの最新状態を可視化し、必要なアクションを実行します。たとえば、承認を待機しているデプロイ・パイプラインのステージなどの重要なイベントが通知されます。通知メッセージを受信したら、DevOpsデプロイメント・パイプラインに移動してステージを承認できます。
- デプロイメント環境
環境は、アーティファクトがデプロイされる顧客のコンピューティング・リソースの集合です。環境は、ファンクション、コンピュート仮想マシン(VM)またはベア・メタル・インスタンス、OKEクラスタのいずれかです。
- OKEクラスタ: OCI Container Engine for Kubernetesは、コンテナ化されたアプリケーションをクラウドにデプロイするために使用できる、完全に管理されたスケーラブルで可用性の高いサービスです。
- コンピュート・インスタンス: OCI Computeサービスを使用すると、クラウド内のコンピュート・ホストをプロビジョニングおよび管理できます。CPU、メモリー、ネットワーク帯域幅およびストレージのリソース要件を満たすシェイプを持つコンピュート・インスタンスをデプロイできます。
- Functions: Oracle Functionsは、完全に管理されたマルチテナントのスケーラビリティの高いオンデマンドのFunctions-as-a-Serviceプラットフォームです。このサービスは、エンタープライズ・グレードのOracle Cloud Infrastructure上に構築されており、Fn Projectのオープンソース・エンジンを搭載しています。
環境は、デプロイメント・パイプラインのリージョンとは異なるOCIリージョンに置くことができます。この分離により、開発者は同じデプロイメント・パイプラインを使用して複数のOCIリージョンにデプロイできます。
- IAM動的グループおよびポリシー
動的グループは、定義したルールに一致するリソース(コンピュート・インスタンスなど)を含む特別なタイプのグループです(したがって、一致するリソースが作成または削除されると、メンバーシップが動的に変化する可能性があります)。これらのインスタンスはプリンシパル・アクターとして機能し、動的グループに対して記述したポリシーに従ってサービスに対してAPIコールを実行できます。
ポリシーは、誰がどのリソースにどのようにアクセスできるかを指定するドキュメントです。アクセスはグループ・レベルおよびコンパートメント・レベルで付与されます。つまり、特定のコンパートメント内またはテナンシ自体への特定のタイプのアクセス権をグループに付与するポリシーを作成できます。
推奨事項
- デプロイメント
Resource Managerを使用してアーキテクチャをデプロイする場合、明示的な変更が不要な場合は、デフォルト値をできるだけ保持します。
注意事項
ソリューションをデプロイしてアプリケーションを使用する場合は、次の点を考慮してください。
- ソリューションのデプロイ
必要な動的グループおよび関連するポリシーを設定するには、管理権限が必要です。OCI DevOps Gitリポジトリへの認可およびOKEでのシークレットの設定には、OCIユーザー名および認証トークンが必要です。
- アプリケーションの使用
Pythonアプリケーション・パラメータの調整は、
queue_automation.py
プログラムの最初にある変数を変更し、OKEでOCIRシークレットを設定することで、作成されたDevOpsプロジェクトで処理できます。
デプロイ
このデプロイメントのTerraformコードは、Pythonアプリケーションのソース・コードとともにGitHubで入手できます。
をクリックします
まだサインインしていない場合は、テナンシおよびユーザー資格証明を入力します。
- スタックをデプロイするリージョンを選択します。
- 画面上のプロンプトおよび指示に従ってスタックを作成します。
- スタックを作成したら、「Terraformアクション」をクリックし、「プラン」を選択します。
- ジョブが完了するまで待機し、プランをレビューします。
変更を加えるには、「スタックの詳細」ページに戻り、「スタックの編集」をクリックして必要な変更を行います。次に、「プラン」処理を再度実行します。
- それ以上の変更が不要な場合は、「スタックの詳細」ページに戻り、「Terraformアクション」をクリックして「適用」を選択します。