ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了するときに、これらの値をクラウド環境に固有の値に置き換えます。
OCI Functionsを使用したOracle Autonomous Transaction Processingデータベースへのデータのストリーミング
イントロダクション
このチュートリアルでは、Oracle Cloud Infrastructure (OCI)サービスを使用してリアルタイムのデータ・ストリーミング・パイプラインを構築およびデプロイする方法を学習します。パイプラインは、OCI Connector HubとOCI Functionsを活用して、OCIストリームからOracle Autonomous Databaseにデータをストリーミングします。この関数は、Javaで記述され、OCIサービスへのセキュアなアクセスのためのリソース・プリンシパル認証方法と、Oracle Autonomous Databaseとの接続を確立するためのデータベース・ウォレットを使用します。
OCI Streaming: OCIには、クラウドでデータを処理するための様々なツールがあり、OCI Streamingは、高スループットのリアルタイム・データ・ストリーム向けに調整されたそのようなサービスの1つです。OCI Streamingを活用することで、開発者は、データ・ストリームを効率的に取り込んで処理し、配布するスケーラブルで信頼できるデータ・パイプラインを構築できます。
OCI Functions: OCI Functionsは、完全に管理された、高度にスケーラブルなオンデマンドのFunctions-as-a-Serviceプラットフォームです。エンタープライズグレードのOCI上に構築されており、Fn Projectオープン・ソース・エンジンによって強化されています。OCI Functionsは、ビジネス・ニーズを満たすためのコードの作成に集中したい場合に使用します。
リソース・プリンシパル認証:リソース・プリンシパルを使用して、OCIリソースを認証およびアクセスできます。リソース・プリンシパルは、OCI FunctionsがOCIストリーミングなどの他のOCIサービスに対して自身を認証できるようにする一時セッション・トークンとセキュアな資格証明で構成されます。
OCIコネクタ・ハブ: OCIコネクタ・ハブは、OCIサービス間でデータを移動する際の相互作用を記述、実行およびモニタリングするための単一ペインを提供するクラウド・メッセージ・バス・プラットフォームです。
ノート:
- このチュートリアルは、教育および研究の目的でのみ設計されています。これは、学習者が制御された設定で実験し、実用的な経験を得るための環境を提供します。このチュートリアルで使用するセキュリティ構成と慣行は、実際のシナリオには適していない可能性があることに注意してください。
- 現実世界のアプリケーションのセキュリティに関する考慮事項は、多くの場合、はるかに複雑で動的です。したがって、本番環境でここに示した手法または構成のいずれかを実装する前に、包括的なセキュリティ評価およびレビューを実施することが不可欠です。このレビューでは、アクセス制御、暗号化、監視、コンプライアンスなど、セキュリティのすべての側面を網羅し、システムが組織のセキュリティ・ポリシーおよび標準に準拠していることを確認する必要があります。
- 演習環境から実際のデプロイメントに移行する場合、セキュリティは常に最優先事項です。
目的
- メッセージをリアルタイムで処理するシームレスなデータ・ストリーミング・パイプラインを構築します。新しいメッセージがOCIストリームに公開されると、OCI Functionsによって自動的に転送および処理され、データがOracle Autonomous Transaction Processing (ATP)データベースにロードされます。このエンドツーエンドのソリューションは、OCIサービスを使用した効率的なデータ取込みと変換を示し、ストリーミングシステムとデータベースシステム間のセキュアでスケーラブルな統合を保証します。
前提条件
-
Oracle Cloud Infrastructure:
-
管理レベルのアクセス権限を持つOracleアカウント。
-
リソースを作成するためのコンパートメント。
ノート:コンパートメント名およびコンパートメントIDを書き留めます。
-
プライベート・サブネットを持つVCN。詳細は、Virtual Cloudネットワークの作成を参照してください。
ノート: VCN OCIDおよびサブネット名は、ストリーム・プールおよびファンクションで必要になります。
-
VCNからプライベート・サブネットにストリーム・プールを作成します。詳細は、ストリーム・プールの作成を参照してください。
-
前に作成した同じストリーム・プールに
myfirststream
という名前のストリームを作成します。詳細は、ストリームの作成を参照してください。 -
Oracle Autonomous Database。詳細は、Oracle Autonomous Databaseを参照してください。
-
シークレットを格納するためのOCI Vault。詳細は、Vaultの作成を参照してください。
-
OCIコンテナ・レジストリへのログインを有効にするOCI認証トークン。詳細は、Oracle Cloud Infrastructure Registryへのログインを有効にする認証トークンの生成を参照してください。
-
-
OCIクラウド・シェル環境:
- OCI Cloud Shellを導入するには、OCI Cloud Shellが必要です。OCI Cloud Shellがない場合は、かわりにBastionホストを使用できます。詳細は、要塞の概要を参照してください。
タスク1: 動的グループの設定
OCIコンソールにログインし、ドメインに移動し、「動的グループ」をクリックして、次の情報を含むグループを作成します。
-
グループ名:
MyFunctions
と入力します。ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}
タスク2: ポリシーの作成
OCIコンソールに移動し、「ポリシー」に移動して、次の情報でポリシーを作成します。
-
ポリシー名:
FunctionsPolicies
と入力します。Allow dynamic-group MyFunctions to {STREAM_INSPECT, STREAM_READ, STREAM_CONSUME, STREAM_PRODUCE} in compartment YOUR-COMPARTMENT-NAME Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME Allow dynamic-group MyFunctions to read objects in compartment YOUR-COMPARTMENT-NAME Allow dynamic-group MyFunctions to read secret-bundles in compartment YOUR-COMPARTMENT-NAME
タスク3: OCIコンテナ・レジストリの作成
-
OCIコンソールに移動し、「開発者サービス」、「コンテナおよびアーティファクト」に移動し、「コンテナ・レジストリ」を選択して「リポジトリの作成」をクリックし、ファンクション・イメージのプライベート・リポジトリを作成します。
-
リポジトリ名:
lab/fn-java-event-to-atp
と入力します。
-
-
リポジトリを確認し、ネームスペースをノートにとります。
-
OCI CLIおよびDockerがインストールされているOCI Cloud Shellを開き、レジストリでログインを続行します。リージョンの正しいURLを確認します。このチュートリアルでは、レジストリURLが
gru.ocir.io
であるブラジル東部(サンパウロ)を使用しています。ノート:「前提条件」セクションで作成したユーザー認証トークンが必要です。
docker login gru.ocir.io Username: <your container namespace>/youruser Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
タスク4: データベースWalletを格納するためのOCIオブジェクト・ストレージ・バケットの作成
OCIコンソールに移動し、「ストレージ」、「オブジェクト・ストレージおよびアーカイブ・ストレージ」、「バケット」に移動し、「バケットの作成」をクリックして、データベース・ウォレットzipファイルを格納するためのWallet
という名前の新しいバケットを作成します。
タスク5: データベースWalletのダウンロードとOCIオブジェクト・ストレージ・バケットへの格納
ノート:このコード例は、ウォレットを使用してOracle Autonomous Databaseに安全に接続する方法を示しています。続行するには、ウォレット資格証明を構成し、このチュートリアルで使用するパスワードを確立する必要があります。
-
OCIコンソールに移動し、「Oracle Database」に移動し、「Autonomous Database」をクリックしてATPを選択します。
-
「データベース接続」をクリックします。
-
ウォレット・パスワードを入力し、ノート・ダウンします。このパスワードはアプリケーションで必要になります。
-
タスク4で作成したOCIオブジェクト・ストレージ・バケットに移動し、「アップロード」をクリックして、ダウンロードしたウォレットzipファイルをアップロードします。
タスク6: Vault内のデータベース資格証明およびWalletパスワードの安全な格納
ノート:前提条件として、ボールトがすでに作成されていることを確認してください。
-
OCIコンソールに移動し、「アイデンティティとセキュリティ」、「Vault」に移動してボールトを選択します。
-
「シークレット」、「シークレットの作成」をクリックし、次の情報を含むシークレットを作成します。
シークレット名 Value MYRDBMS_WALLET_PASSWORD
プレーン・テキストでのウォレット・パスワード MYRDBMS_DB_PASSWORD
プレーン・テキストでのデータベース・パスワード ノート 「シークレット・タイプ・テンプレート」で「プレーン・テキスト」を選択していることを確認してください。
MYRDBMS_DB_PASSWORD
についてもこのプロセスを繰り返して、ファンクション構成に使用される両方のOCIDsを書き留めます。
タスク7: イベント・メッセージを受信してATPデータベースに挿入するJava OCI関数の作成
ノートプライベート・サブネット(ストリーム・プールの同じサブネット)を選択してください。
-
OCIコンソールに移動し、「開発者サービス」、「ファンクション」、「アプリケーション」に移動して、「アプリケーションの作成」をクリックします。
-
Docker、OCI CLI、Fn Project CLIがインストールされているOCI Cloud Shellに移動し、次のコマンドを実行してファンクションを初期化します。
ノート:タスクに従った場合、Dockerログイン・コマンドは、タスク3のDockerログ・ステップに進みます(実行されていない場合)。
-
OCI Cloud Shellを使用しているため、現在のコンテキストは現在のコンテキストですでに設定されている必要があります。
fn list context
-
次のコマンドを実行して、タスク3で作成したコンテナ・レジストリからイメージをプルできるようにファンクション設定を更新します。
fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/lab fn list context
ノート:このチュートリアルでは、ブラジル東部(サンパウロ)リージョンを使用しています。別のリージョンを使用している場合は、API URLおよびREGISTRYの場所を変更する必要があります。
-
次のコマンドを実行して、作成したアプリケーションがOCI Cloud Shellにリストされているかどうかを確認します。
ノート: OCI Cloud Shellでネットワーク: パブリックが使用されていることを確認します
fn list apps
-
fn-java-event-to-atp.zipからJava関数のサンプル・コードを取得し、OCI Cloud Shellにアップロードしてから、ファイルの解凍に進みます。
-
右上のホイール・メニューをクリックし、「アップロード」を選択してファイルをアップロードします。
-
次のコマンドを実行してファイルを解凍します。
# check your file is there ls -lrt # unzip the file unzip fn-java-event-to-atp.zip # check again ls -lrt
ノート:この簡潔なJavaプロジェクトは、OCI Connector HubからJSONデータ入力を取得し、事前定義済の形式に従って解析し、抽出された情報をATPデータベースにシームレスに挿入します。適切なデータ挿入を確保するには、ATPデータベース内の必要なメッセージ形式および対応する表に関するガイダンスについて、次のステップを参照してください。
-
OCI Cloud Shellで、次のコマンドを実行してコードを作成し、ファンクションをデプロイします。
fn deploy --app MyApp # After deploy complete, check the function is there: fn list functions MyApp |grep fn-java-event-to-atp
-
OCIコンソールに移動し、「開発者サービス」、「ファンクション」、「アプリケーション」に移動して、アプリケーション(
Myapp
)を選択し、ファンクションをクリックします。ノートこのチュートリアルのJavaサンプル・コードでは、構成変数を使用してデータベース接続を確立します。正常な実行を保証するために、環境から適切な値を指定してください。
-
次の構成をすべて作成します。
秘密名/キー | Value |
---|---|
WALLET_BUCKET | ウォレット |
WALLET_OBJECT | zipファイルの名前 |
BUCKET_NAMESPACE | バケット・ネームスペース |
DB_USER | データベースのユーザー名 |
DB_SERVICE_NAME | データベース接続の詳細で見つかったデータベース・サービス名 |
DB_PASSWORD_OCID_VAULT | シークレットOCIDの貼付け |
DB_WALLET_PASSWORD_OCID_VAULT | シークレットOCIDの貼付け |
タスク8: ATPデータベースでの新規表の作成
ストリーミングからデータを受信するために、ATPデータベースにMY_TABLE
という名前の新しい表を作成します。
-
ウォレットをダウンロードしたOracle Autonomous Databaseを選択し、「データベース・アクション」ドロップダウン・メニューをクリックして、「SQL」をクリックします。
-
次の表作成DDLコマンドを実行します。
ノートこの演習では、データベース接続にADMINユーザーを使用します。違う場合は、自分のユーザー名に置き換えてください。
CREATE TABLE "ADMIN"."MY_TABLE" ( "CODE" VARCHAR2(50 BYTE), "NAME" VARCHAR2(500 BYTE) ) ;
タスク9: ストリームで新しいメッセージが到着したときにファンクションを起動するためのOCIコネクタ・ハブの設定
データを格納するための関数と新しい表を作成したので、すべてをまとめて接続します。これを行うには、OCIストリーミングからOCI Connector Hubを介して、最後にOCI Functionsにフローするパイプラインを設定します。
-
OCIコンソールに移動し、「分析とAI」、「メッセージング」に移動して、「コネクタ・ハブ」をクリックします。
-
「コネクタの作成」をクリックし、次の情報を入力します。
- コネクタ名:
StreamingToFN
と入力します。 - ソース: 「ストリーミング」を選択します。
- ターゲット: 「関数」を選択します。
ノート前提条件として、
myfirststream
という名前のストリーム・プールおよびストリームがすでに作成されていることを確認してください。 - コネクタ名:
-
「ソースの構成」で、「ストリーム・プール」および「ストリーム」を選択します。
-
「ターゲットの構成」で、「ファンクション・アプリケーション」としてMyAppを選択し、「ファンクション」として「fn-java-event-to-atp」を選択します。
ノート 「コネクタの作成」ページで提案されているように、追加のポリシーを作成する必要がある場合があります。
タスク10: OCIストリーミングでのメッセージの作成およびパイプラインの動作の確認
ノート提供されているJavaコード・サンプルは、特定のJSON構造内のメッセージを処理するように設計されています。このJSONを解析して必要なデータを抽出し、
MY_TABLE
表に挿入します。予想されるJSON形式から逸脱すると、解析エラーが発生し、データベースの挿入が成功しません。
JSONサンプル・メッセージ:
{"code": "001", "name":"Larry"}
ステップに従います。
-
OCIコンソールに移動し、「アナリティクスとAI」、「メッセージング」、「ストリーミング」に移動して、ストリーム(
myfirststream
)を選択し、「テスト・メッセージの作成」をクリックします。 -
「データ」で、サンプルJSONメッセージを入力し、「生成」をクリックします。
注意ストリーム・パイプラインの最初の実行でコールド・スタートが発生し、かなりの遅延が発生する場合があります。これは、コネクタ・ハブが最初にメッセージを送信しようとしたときに発生する機能の初期化の結果です。
タスク11: データベースに到着したデータの検証
-
ウォレットをダウンロードしたOracle Autonomous Databaseを選択し、「データベース・アクション」ドロップダウン・メニューをクリックして、「SQL」をクリックします。
-
次の問合せを実行します。
select * from admin.my_table;
トラブルシューティングとヒント
-
ファンクションのログを有効にし、エラーがないか確認します。ロギングの詳細は、ファンクション・ログの格納および表示を参照してください。
-
「前提条件」の項の説明に従って、すべてのポリシーが設定されていることを確認します。
-
OCI Connectorハブのログを有効にします。詳細は、コネクタ・ハブのログを参照してください。
関連リンク
承認
- 著者 - Joao Tarla (Oracle LAD Aチーム・ソリューション・エンジニア)
その他の学習リソース
docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Stream Data to Oracle Autonomous Transaction Processing Database using OCI Functions
G25949-01
February 2025
Copyright ©2025, Oracle and/or its affiliates.