OCI FunctionsサービスとOCI Eventサービスを統合して、プライベートOSSストリームにメッセージを公開
クラウドネイティブなイベント主導型アーキテクチャでは、クラウドのリソースとイベントがサービス間の主要な通信メカニズムとして利用されます。コンポーネントを切り離し、イベントに対するリアルタイムの反応を可能にすることで、スケーラブルで自己回復性のあるアジャイルなシステムを実現します。イベント・ストリーミングとサーバーレス・コンピューティングを利用して、分散型イベント駆動型の通信と処理を行います。
Oracle Cloud Infrastructure Eventsは、様々なクラウド・リソースの状態変更に基づいて自動化を作成するための強力なツールです。これにより、Oracle Cloud Infrastructure Streaming、OCI Functions、Oracle Cloud Infrastructure Notificationsなどの特定のOCIリソースにイベントを提供するルールを作成できます。
特定のシナリオでは、メッセージをプライベート・ストリームに公開する必要があります。OCIイベントは、パブリック・ストリーミング・エンドポイントにイベントを直接配信できますが、プライベート・エンドポイントは、同じVCN内でのみ解決でき、OCIイベントはプライベート・ストリームにメッセージをプッシュするためのアクセス権を持っていないため、現在、プライベート・ストリーミング・エンドポイントへのメッセージの直接配信はサポートされていません。ただし、これを実現するには、イベント・ルールでOCIファンクションを処理タイプとして使用します。
このリファレンス・アーキテクチャでは、OCI FunctionsとOCI Eventsを活用してプライベート・ストリーミング・エンドポイントにメッセージを配信する方法の包括的な概要を示します。
アーキテクチャ
このリファレンス・アーキテクチャでは、OCI FunctionsおよびOCI Eventsを使用して、Oracle Cloud Infrastructure Object Storageでファイルが作成または更新されるたびにプライベートOSSストリーミング・エンドポイントにメッセージを公開する方法を示します。
アーキテクチャ図は、OCI Object Storageの特定のバケットへのファイルのアップロードで始まるデータ・フローを示しています。OCIイベントは、定義されたイベント・ルール条件に基づいてトリガーされます。その後、発行されたイベントは、アップロードされたファイルからデータを抽出し、OCIファンクション内に構成されたプライベート・ストリーミング・エンドポイントにデータ・メッセージとイベント・メッセージの両方を公開するファンクションを呼び出します。OCIファンクションがプライベート・ストリーミング・メッセージ・エンドポイントにアクセスできるように、ストリーミング・サービスおよびファンクションを同じ仮想クラウド・ネットワーク(VCN)およびプライベート・サブネットに作成する必要があることに注意してください。
次の図は、このリファレンス・アーキテクチャを示しています。
oci-functions-events-integration-diagram-oracle.zip
始める前に
- OCI FunctionsアプリケーションおよびOCI Streamingサービス(ストリーム・プールおよびストリーム)を設定します。
- 次の情報を収集してください。これらの値は、OCIファンクションの環境変数を構成するために必要です。
- ユーザーID
認証に使用するユーザーのOCID。
- テナントID
テナンシOCIDユーザー・プロファイルにあります。
- 指紋
OCI APIの認証に使用されます。
- リージョン
要求を作成するリージョンの識別子。
- API秘密キー
API秘密キー・ファイルの場所。
- ストリームOCID
OSSストリームOCID。
- 認証トークン
ユーザー設定からの認証トークン。
- ストリーム・エンドポイント
OSSストリーム・エンドポイント(ストリーム情報画面の「メッセージ・エンドポイント」から取得)。
- ユーザーID
アーキテクチャには、次のコンポーネントがあります。
- テナント
テナンシは、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内の他のサブネットと重複しない連続した範囲のアドレスで構成されます。サブネットのサイズは、作成後に変更できます。サブネットはパブリックにもプライベートにもできます。
- セキュリティ・リスト
サブネットごとに、サブネットの内外で許可する必要があるトラフィックのソース、宛先およびタイプを指定するセキュリティ・ルールを作成できます。
- サービス・ゲートウェイ
サービス・ゲートウェイは、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.
- オブジェクト・ストレージ
オブジェクト・ストレージでは、データベースのバックアップ、分析データ、イメージやビデオなどのリッチ・コンテンツなど、あらゆるコンテンツ・タイプの構造化データおよび非構造化データにすばやくアクセスできます。インターネットから直接またはクラウド・プラットフォーム内から、安全かつセキュアにデータを格納し、取得できます。パフォーマンスやサービスの信頼性を損なうことなく、シームレスにストレージを拡張できます。迅速、即時、頻繁にアクセスする必要があるホット・ストレージには、標準ストレージを使用します。長期間保持し、ほとんどまたはほとんどアクセスしないコールド・ストレージには、アーカイブ・ストレージを使用します。
- イベント
Oracle Cloud Infrastructureサービスでは、イベント(リソースの変更を記述する構造化メッセージ)が生成されます。イベントは、作成、読取り、更新または削除(CRUD)操作、リソース・ライフサイクル状態の変更、およびクラウド・リソースに影響するシステム・イベントに対して発行されます。
- ストリーミング
Oracle Cloud Infrastructure Streamingは、リアルタイムで消費と処理が可能な連続した大量のデータ・ストリームを収集するための、スケーラブルで耐久性の高い完全に管理されたストレージ・ソリューションを提供します。Streamingを使用すると、アプリケーション・ログ、運用テレメトリ、Webクリック・ストリーム・データなど、大量のデータを取り込むことができます。また、パブリッシュ/サブスクライブのメッセージング・モデルで、データが連続して順番に生成され、処理される他のユースケースでも使用できます。
- 関数
Oracle Cloud Infrastructure Functionsは、完全に管理された、スケーラビリティに優れたオンデマンドのFunctions-as-a-Service (FaaS)プラットフォームです。これは、Fn Projectのオープン・ソース・エンジンによって機能します。ファンクションを使用すると、コードをデプロイし、直接コールするか、イベントに応答してトリガーできます。Oracle Functionsでは、Oracle Cloud Infrastructure RegistryでホストされているDockerコンテナが使用されます。
- ロギングLoggingは、クラウド内のリソースから次のタイプのログへのアクセスを提供する高度にスケーラブルで完全管理型のサービスです:
- 監査ログ: Auditサービスによって発行されるイベントに関連するログ。
- サービス・ログ: APIゲートウェイ、イベント、ファンクション、ロード・バランシング、オブジェクト・ストレージ、VCNフロー・ログなどの個々のサービスによって発行されたログ。
- カスタム・ログ: カスタム・アプリケーション、他のクラウド・プロバイダまたはオンプレミス環境からの診断情報を含むログ。
推奨事項
- VCN
VCNを作成するときには、必要なCIDRブロックの数を決定し、VCN内のサブネットにアタッチする予定のリソースの数に基づいて各ブロックのサイズを決定します。標準プライベートIPアドレス空間内のCIDRブロックを使用します。
プライベート接続を設定する他のネットワーク(Oracle Cloud Infrastructure、オンプレミス・データ・センターまたは別のクラウド・プロバイダ)と重複しないCIDRブロックを選択します。
VCNを作成した後、そのCIDRブロックを変更、追加および削除できます。
サブネットを設計するときには、トラフィック・フローおよびセキュリティ要件を考慮してください。特定の層またはロール内のすべてのリソースを同じサブネットに接続し、セキュリティ境界として機能できます。
- クラウド・ガード
Oracleによって提供されるデフォルトのレシピをクローニングおよびカスタマイズして、カスタム・ディテクタおよびレスポンダ・レシピを作成します。これらのレシピを使用すると、警告を生成するセキュリティ違反のタイプと、そのレシピに対して実行できるアクションを指定できます。たとえば、表示がパブリックに設定されているオブジェクト・ストレージ・バケットを検出できます。
クラウド・ガードをテナンシ・レベルで適用して、範囲を広げ、複数の構成を維持する管理上の負担を軽減します。
管理対象リスト機能を使用して、特定の構成をディテクタに適用することもできます。
- OCI関数
このアーキテクチャのOCI関数は、Pythonを使用して開発されました。OCI Functionsは複数のプログラミング言語をサポートしており、任意の言語を使用してファンクションを開発し、デプロイできます。
- OCIストリーミング
ストリーム・プールは、VCNのプライベート・サブネットを使用して作成されます。また、このストリーム・プールを使用してストリームが作成されます。プライベートOSSストリームと同じVCNにファンクションを作成し、必要なすべてのアクセス権を持っていることを確認してください。
また、Streamingでは、即時利用可能なKafkaソースとシンク・コネクタを使用して、ファーストパーティ製品やサードパーティ製品と直接連携できます。Kafka Connectの使用の詳細は、詳細を参照してください。
- OCIオブジェクト・ストレージ
このアーキテクチャでは、Standard Object Storageを使用してファイルをアップロードします。サービスもトリガーできるように、「オブジェクト・イベントの出力」を有効にしてください。機密データにプライベート・バケットを使用することもお薦めします。
- OCIイベント
このアーキテクチャでは、OCIイベントは、OCI Object Storageのオブジェクト作成およびオブジェクト更新イベントの変更をリスニングするように構成されています。サービスは、オブジェクトがOCI Object Storageにアップロードされた後に起動され、処理のためにファンクションをコールします。
考慮事項
このリファレンス・アーキテクチャを実装する場合は、次の点を考慮することが重要です。
- パフォーマンス
OCIイベント、OCIファンクションおよびOCIストリーミングは、非常にスケーラブルです。予想されるファイルのサイズおよび数に基づいて、パーティションおよびストリームの数を調整することを検討してください。
- セキュリティ
ポリシーを使用して、OCIリソースにアクセスできるユーザーを制限します。
OCI Object Storageの場合、暗号化はデフォルトで有効になっており、オフにできません。
OCI Functionsにデプロイされたファンクションへのすべてのアクセスは、Oracle Cloud Infrastructure Identity and Access Management (IAM)を介して制御されます。これにより、ファンクション管理およびファンクション呼出しの両方の権限を特定のユーザーおよびユーザー・グループに割り当てることができます。
シークレットおよび機密データをOCI Vaultに格納することをお薦めします。OCIサービスでの認可に使用されるAPIキーおよび認証トークンの格納にOCI Vaultの使用を検討してください。
- 可用性
Oracleは、クラウド・ネイティブで完全に管理されているOCI Functions、OCI Events、OCI StreamingおよびOCI Loggingの高可用性を確保します。OCIストリーミングには、次の高可用性機能が含まれています:
- ログ・データの一定のフロー
- マルチスレッドで水平に拡張可能なサービス
- ほぼリアルタイムの取込み
- 短期的な停止に対する自己回復性
- 最適化による効率的なデータ使用
- コスト
ファンクションの実行中に使用したリソースに対してのみ支払います。
デプロイ
GitHubリポジトリには、この参照アーキテクチャを実装するOCI Functionsコードが含まれています。
- GitHubにアクセスします。
- リポジトリをクローニングするか、ローカル・コンピュータにダウンロードします。
README
ドキュメントの手順に従います。