ノート:

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サービス間でデータを移動する際の相互作用を記述、実行およびモニタリングするための単一ペインを提供するクラウド・メッセージ・バス・プラットフォームです。

ノート:

目的

前提条件

タスク1: 動的グループの設定

OCIコンソールにログインし、ドメインに移動し、「動的グループ」をクリックして、次の情報を含むグループを作成します。

タスク2: ポリシーの作成

OCIコンソールに移動し、「ポリシー」に移動して、次の情報でポリシーを作成します。

タスク3: OCIコンテナ・レジストリの作成

  1. OCIコンソールに移動し、「開発者サービス」「コンテナおよびアーティファクト」に移動し、「コンテナ・レジストリ」を選択して「リポジトリの作成」をクリックし、ファンクション・イメージのプライベート・リポジトリを作成します。

    • リポジトリ名: lab/fn-java-event-to-atpと入力します。

      T3_1

  2. リポジトリを確認し、ネームスペースをノートにとります。

    T3_1

  3. 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
    

    T3_3

タスク4: データベースWalletを格納するためのOCIオブジェクト・ストレージ・バケットの作成

OCIコンソールに移動し、「ストレージ」「オブジェクト・ストレージおよびアーカイブ・ストレージ」「バケット」に移動し、「バケットの作成」をクリックして、データベース・ウォレットzipファイルを格納するためのWalletという名前の新しいバケットを作成します。

T4_1

タスク5: データベースWalletのダウンロードとOCIオブジェクト・ストレージ・バケットへの格納

ノート:このコード例は、ウォレットを使用してOracle Autonomous Databaseに安全に接続する方法を示しています。続行するには、ウォレット資格証明を構成し、このチュートリアルで使用するパスワードを確立する必要があります。

  1. OCIコンソールに移動し、「Oracle Database」に移動し、「Autonomous Database」をクリックしてATPを選択します。

    T4_1

  2. 「データベース接続」をクリックします。

    T4_1

  3. ウォレット・パスワードを入力し、ノート・ダウンします。このパスワードはアプリケーションで必要になります。

    T4_1

  4. タスク4で作成したOCIオブジェクト・ストレージ・バケットに移動し、「アップロード」をクリックして、ダウンロードしたウォレットzipファイルをアップロードします。

    T4_1

タスク6: Vault内のデータベース資格証明およびWalletパスワードの安全な格納

ノート:前提条件として、ボールトがすでに作成されていることを確認してください。

  1. OCIコンソールに移動し、「アイデンティティとセキュリティ」「Vault」に移動してボールトを選択します。

  2. 「シークレット」「シークレットの作成」をクリックし、次の情報を含むシークレットを作成します。

    シークレット名 Value
    MYRDBMS_WALLET_PASSWORD プレーン・テキストでのウォレット・パスワード
    MYRDBMS_DB_PASSWORD プレーン・テキストでのデータベース・パスワード

    T5_1

    ノート 「シークレット・タイプ・テンプレート」「プレーン・テキスト」を選択していることを確認してください。

MYRDBMS_DB_PASSWORDについてもこのプロセスを繰り返して、ファンクション構成に使用される両方のOCIDsを書き留めます。

T5_1

タスク7: イベント・メッセージを受信してATPデータベースに挿入するJava OCI関数の作成

ノートプライベート・サブネット(ストリーム・プールの同じサブネット)を選択してください。

  1. OCIコンソールに移動し、「開発者サービス」「ファンクション」「アプリケーション」に移動して、「アプリケーションの作成」をクリックします。

    T6_1

  2. Docker、OCI CLI、Fn Project CLIがインストールされているOCI Cloud Shellに移動し、次のコマンドを実行してファンクションを初期化します。

    ノート:タスクに従った場合、Dockerログイン・コマンドは、タスク3のDockerログ・ステップに進みます(実行されていない場合)。

  3. OCI Cloud Shellを使用しているため、現在のコンテキストは現在のコンテキストですでに設定されている必要があります。

    fn list context 
    

    T6_2

  4. 次のコマンドを実行して、タスク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
    

    T6_2

    ノート:このチュートリアルでは、ブラジル東部(サンパウロ)リージョンを使用しています。別のリージョンを使用している場合は、API URLおよびREGISTRYの場所を変更する必要があります。

  5. 次のコマンドを実行して、作成したアプリケーションがOCI Cloud Shellにリストされているかどうかを確認します。

    ノート: OCI Cloud Shellでネットワーク: パブリックが使用されていることを確認します

    fn list apps
    

    T6_2

  6. fn-java-event-to-atp.zipからJava関数のサンプル・コードを取得し、OCI Cloud Shellにアップロードしてから、ファイルの解凍に進みます。

  7. 右上のホイール・メニューをクリックし、「アップロード」を選択してファイルをアップロードします。

    T6_2

    T6_2

  8. 次のコマンドを実行してファイルを解凍します。

    # check your file is there
    ls -lrt
    # unzip the file
    unzip fn-java-event-to-atp.zip
    # check again
    ls -lrt
    

    T9_1

    ノート:この簡潔なJavaプロジェクトは、OCI Connector HubからJSONデータ入力を取得し、事前定義済の形式に従って解析し、抽出された情報をATPデータベースにシームレスに挿入します。適切なデータ挿入を確保するには、ATPデータベース内の必要なメッセージ形式および対応する表に関するガイダンスについて、次のステップを参照してください。

  9. 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
    

    T9_1

    T9_1

  10. OCIコンソールに移動し、「開発者サービス」「ファンクション」「アプリケーション」に移動して、アプリケーション(Myapp)を選択し、ファンクションをクリックします。

    T9_1

    T9_1

    ノートこのチュートリアルのJavaサンプル・コードでは、構成変数を使用してデータベース接続を確立します。正常な実行を保証するために、環境から適切な値を指定してください。

  11. 次の構成をすべて作成します。

秘密名/キー 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という名前の新しい表を作成します。

  1. ウォレットをダウンロードしたOracle Autonomous Databaseを選択し、「データベース・アクション」ドロップダウン・メニューをクリックして、「SQL」をクリックします。

    T9_1

  2. 次の表作成DDLコマンドを実行します。

    ノートこの演習では、データベース接続にADMINユーザーを使用します。違う場合は、自分のユーザー名に置き換えてください。

    CREATE TABLE "ADMIN"."MY_TABLE" 
    ( "CODE" VARCHAR2(50 BYTE), 
    	"NAME" VARCHAR2(500 BYTE)
    ) ;
    

    T9_1

タスク9: ストリームで新しいメッセージが到着したときにファンクションを起動するためのOCIコネクタ・ハブの設定

データを格納するための関数と新しい表を作成したので、すべてをまとめて接続します。これを行うには、OCIストリーミングからOCI Connector Hubを介して、最後にOCI Functionsにフローするパイプラインを設定します。

  1. OCIコンソールに移動し、「分析とAI」「メッセージング」に移動して、「コネクタ・ハブ」をクリックします。

  2. 「コネクタの作成」をクリックし、次の情報を入力します。

    • コネクタ名: StreamingToFNと入力します。
    • ソース: 「ストリーミング」を選択します。
    • ターゲット: 「関数」を選択します。

    ノート前提条件として、myfirststreamという名前のストリーム・プールおよびストリームがすでに作成されていることを確認してください。

    T9_1

  3. 「ソースの構成」で、「ストリーム・プール」および「ストリーム」を選択します。

    T9_1

  4. 「ターゲットの構成」で、「ファンクション・アプリケーション」としてMyAppを選択し、「ファンクション」として「fn-java-event-to-atp」を選択します。

    T9_1

ノート 「コネクタの作成」ページで提案されているように、追加のポリシーを作成する必要がある場合があります。

タスク10: OCIストリーミングでのメッセージの作成およびパイプラインの動作の確認

ノート提供されているJavaコード・サンプルは、特定のJSON構造内のメッセージを処理するように設計されています。このJSONを解析して必要なデータを抽出し、MY_TABLE表に挿入します。予想されるJSON形式から逸脱すると、解析エラーが発生し、データベースの挿入が成功しません。

JSONサンプル・メッセージ:

{"code": "001", "name":"Larry"}

ステップに従います。

  1. OCIコンソールに移動し、「アナリティクスとAI」「メッセージング」「ストリーミング」に移動して、ストリーム(myfirststream)を選択し、「テスト・メッセージの作成」をクリックします。

  2. 「データ」で、サンプルJSONメッセージを入力し、「生成」をクリックします。

    T9_1

    注意ストリーム・パイプラインの最初の実行でコールド・スタートが発生し、かなりの遅延が発生する場合があります。これは、コネクタ・ハブが最初にメッセージを送信しようとしたときに発生する機能の初期化の結果です。

タスク11: データベースに到着したデータの検証

  1. ウォレットをダウンロードしたOracle Autonomous Databaseを選択し、「データベース・アクション」ドロップダウン・メニューをクリックして、「SQL」をクリックします。

    T9_1

  2. 次の問合せを実行します。

    select * from admin.my_table;
    

    T9_1

トラブルシューティングとヒント

承認

その他の学習リソース

docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。