OCIファンクションを実装して、OCI Object Storageへのアップロード時にOracle NoSQL表を更新します
クラウド・ネイティブ、イベントドリブン、サーバーレス・アーキテクチャは、クラウド・コンピューティングのリソースとサービスを利用してスケーラビリティ、効率性、柔軟性を最大限に高めるアプリケーションを構築およびデプロイするためのアプローチです。
このリファレンス・アーキテクチャでは、Oracle Cloud Infrastructure EventsおよびOCI Functionsのシームレスな統合を示し、OCI Object Storageバケットでオブジェクトを作成または変更したときにOracle NoSQL Database Cloud Service (Oracle NoSQL)表を自動的に更新します。これは、OCI Object Storageバケットでファイルが追加または変更されるたびに、Oracle NoSQL表のデータを解析および更新する一般的なビジネス・シナリオに対応します。
OCI Eventsは、さまざまなクラウド・リソースの状態変化に基づいてタスクを自動化するための堅牢なソリューションを提供します。これにより、OCI Streaming、OCI Functions (イベント・データを処理し、他のOCIサービスと統合して多様なアクションを実行するための貴重なツールとして機能)、OCI Notificationsなどの特定のOCIサービスにイベントを提供するルールを作成できます。
さらに、OCIファンクションでは、OCIイベントから受信したペイロード・データを処理するコードを組み込み、特定のビジネス要件に基づいてOracle NoSQL表の更新を適応させることができます。
このリファレンス・アーキテクチャは、OCI FunctionsとOCI Eventsを組み合せて利用して、OCI Object Storageバケットでオブジェクトが作成または変更されたときにOracle NoSQL表を更新する包括的な概要を提供します。
アーキテクチャ
このリファレンス・アーキテクチャでは、OCIファンクションおよびOCIイベントを使用して、OCI Object Storageでファイルが作成または更新されるたびにOracle NoSQL表を更新する方法を示します。
アーキテクチャ図は、ファイル・アップロードから指定されたOCI Object Storageバケットへのデータ・フローを示しています。イベント・サービス・トリガーは、指定したイベント・ルール条件に基づいてアクティブ化するように構成されます。次に、発行されたイベントは、アップロードされたファイルからデータを抽出し、ビジネス要件に従って追加処理を実行し、最終的に処理済データでOracle NoSQL表を更新できる関数を起動します。このアプローチは、イベント駆動型アーキテクチャを活用し、リアルタイムのデータ処理を促進することで、大きなメリットをもたらします。ターゲット表を更新する前にデータを前処理し、データ整合性を確保するために必要な健全性チェックを実行する必要がある場合、非常に重要であることがわかります。
OCI Object Storageバケットでファイルが作成または更新されるたびにOracle NoSQL表でデータを解析および更新する必要があるビジネス・ユース・ケースは、次のアプローチを使用して実現できます:
- OCIイベントでイベント・ルールを設定して、OCIオブジェクト・ストレージ・バケットでオブジェクトが作成または更新されるたびにOCI関数をトリガーします。
- イベント・ルールによってトリガーされるイベントを受信する関数を作成します。この関数は、Oracle NoSQL表のデータの解析および更新を処理します。
- 関数内で、OCI Object Storageバケット内のオブジェクトからデータを解析するために必要なロジックを実装します。
- 適切なOCI SDKまたはAPIを使用して、Oracle NoSQLサービスと対話し、解析されたデータに基づいてOracle NoSQL表のレコードを挿入または更新します。
OCIイベント、OCIファンクションおよびOracle NoSQLサービスを組み合せることで、OCI Object Storageバケットでファイルが作成または更新されるたびに、Oracle NoSQL表のデータを解析および更新するプロセスを自動化できます。このアプローチにより、OCI Object StorageとOracle NoSQL間の効率的で合理化されたデータ処理および同期が可能になります。
次の図は、このリファレンス・アーキテクチャを示しています。
object-storage-function-nosql-diagram-oracle.zip
始める前に
- ファンクション・アプリケーションを設定し、OCIコンソールを使用してOracle NoSQL表を作成します。
- ファンクション・アプリケーションの環境変数を構成するために必要な値を収集します。
- ユーザーID
認証に使用するユーザーのOCID。
- テナントID
テナンシOCIDユーザー・プロファイルにあります。
- 指紋
OCI APIの認証に使用されます。
- リージョン
要求を作成するリージョンの識別子。
- API秘密キー
API秘密キー・ファイルの場所。
- コンパートメントのOCID
Oracle NoSQL表が作成されるコンパートメントOCID。
- NoSQL表
サンプル表の個人表。次の属性で作成します。
- ユーザーID
主キー | 列名 | タイプ | 共有キー | null以外 |
---|---|---|---|---|
はい | id | INTEGER | はい | はい |
いいえ | 名前 | STRING | いいえ | いいえ |
いいえ | 時代 | INTEGER | いいえ | いいえ |
いいえ | 性別 | STRING | いいえ | いいえ |
アーキテクチャには、次のコンポーネントがあります。
- テナント
テナンシは、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 Functionsは、完全に管理された、スケーラビリティに優れたオンデマンドのFunctions-as-a-Service (FaaS)プラットフォームです。これは、Fn Projectのオープン・ソース・エンジンによって機能します。ファンクションを使用すると、コードをデプロイし、直接コールするか、イベントに応答してトリガーできます。Oracle Functionsでは、Oracle Cloud Infrastructure RegistryでホストされているDockerコンテナが使用されます。
- ロギングLoggingは、クラウド内のリソースから次のタイプのログへのアクセスを提供する高度にスケーラブルで完全管理型のサービスです:
- 監査ログ: Auditサービスによって発行されるイベントに関連するログ。
- サービス・ログ: APIゲートウェイ、イベント、ファンクション、ロード・バランシング、オブジェクト・ストレージ、VCNフロー・ログなどの個々のサービスによって発行されたログ。
- カスタム・ログ: カスタム・アプリケーション、他のクラウド・プロバイダまたはオンプレミス環境からの診断情報を含むログ。
- Oracle NoSQL
Oracle NoSQL Database Cloud Serviceは完全管理型のデータベース・クラウド・サービスであり、単純な問合せに対するレスポンスのレイテンシを予測可能な1桁ミリ秒にする必要があるデータベース操作向けに設計されています。Oracle Cloudアカウントに対して認証されたユーザーは、Oracle NoSQL表を作成し、表のスループットとストレージ要件を指定できます。Oracleがユーザーにかわって要件を満たすようにリソースを予約して管理し、容量をプロビジョニングします。容量は、スループットの読取りおよび書込みユニットを使用して、ストレージ・ユニット用にGBを使用して指定します。
推奨事項
- VCN
VCNを作成するときには、必要なCIDRブロックの数を決定し、VCN内のサブネットにアタッチする予定のリソースの数に基づいて各ブロックのサイズを決定します。標準プライベートIPアドレス空間内のCIDRブロックを使用します。
プライベート接続を設定する他のネットワーク(Oracle Cloud Infrastructure、オンプレミス・データ・センターまたは別のクラウド・プロバイダ)と重複しないCIDRブロックを選択します。
VCNを作成した後、そのCIDRブロックを変更、追加および削除できます。
サブネットを設計するときには、トラフィック・フローおよびセキュリティ要件を考慮してください。特定の層またはロール内のすべてのリソースを同じサブネットに接続し、セキュリティ境界として機能できます。
- クラウド・ガード
Oracleによって提供されるデフォルトのレシピをクローニングおよびカスタマイズして、カスタム・ディテクタおよびレスポンダ・レシピを作成します。これらのレシピを使用すると、警告を生成するセキュリティ違反のタイプと、そのレシピに対して実行できるアクションを指定できます。たとえば、表示がパブリックに設定されているオブジェクト・ストレージ・バケットを検出できます。
クラウド・ガードをテナンシ・レベルで適用して、範囲を広げ、複数の構成を維持する管理上の負担を軽減します。
管理対象リスト機能を使用して、特定の構成をディテクタに適用することもできます。
- 関数
このアーキテクチャのOCI関数は、Pythonを使用して開発されました。OCI Functionsは複数のプログラミング言語をサポートしており、任意の言語を使用してファンクションを開発し、デプロイできます。
- Oracle NoSQL
適切なコンパートメントにOracle NoSQL表を作成し、OCI Identity and Access Management (IAM)ポリシーを使用してアクセスを管理していることを確認します。表を作成する前に、読取りおよび書込みの容量を正確に見積もることが重要です。詳細なガイダンスについては、Oracleのドキュメントを参照し、推奨事項を確認してください。
この解答では、「person」という名前のサンプル表が例として使用されています。機能および表名は、特定の要件に従ってカスタマイズしてください。
- OCIオブジェクト・ストレージ
このアーキテクチャでは、Standard Object Storageを使用してファイルをアップロードします。イベント・サービスをトリガーできるように、「オブジェクト・イベントの出力」を有効にしてください。機密データにプライベート・バケットを使用することもお薦めします。
- OCIイベント
このアーキテクチャでは、OCIイベント・サービスは、OCIオブジェクト・ストレージでオブジェクト作成イベントおよびオブジェクト更新イベントの変更をリスニングするように構成されます。サービスは、オブジェクトがOCIファンクションにアップロードされた後に起動され、処理のためにファンクションをコールします。
考慮事項
このリファレンス・アーキテクチャをデプロイする場合は、次の点を考慮してください。
- パフォーマンス
OCIイベント、OCIファンクションおよびOracle NoSQLは、スケーラビリティの高いマネージド・サービスです。Oracle NoSQLサービスは、オンデマンドのスループットとストレージ・プロビジョニングを提供します。
プロビジョニングする前に、Oracle NoSQL Database Cloud Serviceのスループットおよびストレージ容量を見積もってください。
- セキュリティ
ポリシーを使用して、OCIリソースにアクセスできるユーザーを制限します。
OCI Object Storageの場合、暗号化はデフォルトで有効になっており、オフにできません。
シークレットおよび機密データをOCI Vaultに格納することをお薦めします。OCIサービスでの認可に使用されるAPIキー、DBユーザー名、パスワードおよび認証トークンの格納にOCIファンクションの使用を検討してください。
- 可用性
Oracleは、クラウド・ネイティブで完全に管理されているOCIイベント、OCIファンクション、Oracle NoSQLおよびOCIロギングの高可用性を保証します。
- コスト
ファンクションの実行中に使用したリソースに対してのみ支払います。
デプロイ
GitHubリポジトリには、この参照アーキテクチャを実装するOCI Functionsコードが含まれています。
- GitHubにアクセスします。
- リポジトリをクローニングするか、ローカル・コンピュータにダウンロードします。
README
ドキュメントの手順に従います。