シナリオ: 関数へのキュー・メッセージの送信

コネクタ・ハブを使用してキューをファンクションと統合します。

このシナリオでは、関数を作成し、その関数をコネクタ(コネクタ・ハブ)でターゲットとして参照して、キューからのメッセージを受信および処理します。

キュー・メッセージをファンクションに送信しています。

関数が受信したペイロードには、キューからのメッセージのみが含まれます。

関連チュートリアルについては、OCI関数およびOCIキューを使用した承認者に管理権限を公開せずにユーザー機能を認可を参照してください。

トラブルシューティングに関するヘルプは、コネクタのトラブルシューティングを参照してください。

必要なIAMポリシー

管理者グループのメンバーであれば、このシナリオを実行するために必要なアクセス権をすでに持っています。それ以外の場合は、ファンクション へのアクセス権が必要です。

コネクタを作成するワークフローには、ターゲット・サービスへの書込みのための権限を提供するために必要なデフォルト・ポリシーが含まれます。ポリシーを初めて使用する場合は、IAMポリシーの概要を参照してください。

キューの処理時のエラー処理

ノート

関数に送信されるキュー・メッセージのコンテキストでは、バッチ内のメッセージの処理中の部分的な失敗はサポートされていません。

キューからのメッセージのバッチを処理しているファンクションでエラーが発生すると、そのバッチ内のすべてのメッセージがキューに再度表示され、そのファンクションが正常に処理されたメッセージも含まれます。したがって、関数によってメッセージが複数回処理される可能性があります。任意のターゲットと同様に、コネクタは関数ターゲットが成功するまで無期限に再試行を続けます。詳細は、配信詳細を参照してください。

メッセージのバッチの処理中に障害が発生した場合でも、それらのメッセージの配信数は増加します。メッセージの配信数がキュー・レベルで定義された最大数に達すると、メッセージは配信不能キューに送信されます。詳細は、配信数を参照してください。

メッセージの再処理を防ぐには、関数をべき等にします。

キューおよび機能の設定

コネクタ(コネクタ・ハブ)を作成する前に、キューからデータを受信するキューおよびファンクションを設定する必要があります。

キューの手順については、キューの作成を参照してください。

関数の手順は、次のとおりです。

  • ノート

    「コネクタの作成」ページのフィールドの詳細は、コネクタの作成を参照してください。

    「コネクタ」リスト・ページで、「コネクタの作成」を選択します。リスト・ページの検索に関するヘルプが必要な場合は、コネクタのリストを参照してください。

    1. 基本的なコネクタ情報

    識別情報の入力

    • コネクタ名: 新しいコネクタのわかりやすい名前とオプションの説明を入力します。機密情報を入力しないでください。
    • コンパートメントの選択: 新しいコネクタを格納するコンパートメントを選択します。

    「次へ」を選択します。

    2. コネクタ・ソースの構成

    データを転送するコネクタのソース・メトリックを指定します。

    • ソースの選択: 「キュー」を選択します。
    • ソースの構成:
      • コンパートメント: 必要なキューを含むコンパートメントを選択します。
      • キュー: 必要なメッセージを含むキューを選択します。
        ノート

        コネクタのキューを選択するには、キューを読み取る権限が必要です。IAMポリシー(コネクタ・ハブの保護)を参照してください。
      • チャネル・フィルタ(「メッセージ・フィルタリング」の下) (オプション): キュー内のチャネルからのメッセージをフィルタするには、値を入力します。

        たとえば、チャネルIDでメッセージをフィルタするには、チャネルIDを入力します。

        サポートされている値については、GetMessages (キューAPI)のchannelFilterを参照してください。

      ノート

      コネクタのターゲットに転送されたメッセージは消費済とみなされます。キュー・サービスの要件を満たすために、コネクタは転送されたメッセージをソース・キューから削除します。詳細は、メッセージの消費を参照してください。
    • ポリシーの作成: 入力したソース構成に指定されたデフォルト・ポリシーを受け入れる場合に選択します

    「次へ」を選択します。

    3. コネクタ・タスクの構成

    「次へ」を選択します(このセクションはスキップします)。

    4. コネクタ・ターゲットの構成

    フィルタ処理したログ・データで使用するメトリック・ネームスペースおよびメトリック名を入力します。

    • ターゲット: 「ファンクション」を選択します。
    • ターゲットの構成: 次の情報を入力します。
      • コンパートメント: 必要なファンクションを含むコンパートメントを選択します。
      • ファンクション・アプリケーション: 必要なファンクションを含むファンクション・アプリケーションの名前を選択します。
      • Function: データの送信先のfunctionの名前を選択します。
      • 追加オプションの表示(オプション): このリンクを選択し、関数に送信されるデータのバッチごとに制限を指定します。手動設定を使用するには、バッチ・サイズ制限(KBまたはメッセージ数)およびバッチ時間制限(秒)の値を指定します。

        たとえば、5,000KBまたは10メッセージを選択して、バッチ・サイズを制限します。バッチ時間制限の例は5秒です。

      ファンクションのターゲットに関する考慮事項:

      • コネクタはソース・データをJSONリストとしてバッチでフラッシュします。最大バッチ(ペイロード)サイズは6MBです。
      • ファンクションは、1回の呼出しで6MBのデータと同期するように呼び出されます。データが6MBを超えると、コネクタが再びファンクションを呼び出して制限を超えるデータを移動します。このような呼出しは順次処理されます。
      • ファンクションは最大5分間実行できます。Delivery Detailsを参照してください。
      • Functionsターゲットからコネクタにデータを返さないでください。コネクタ・ハブは、ファンクション・ターゲットから返されたデータを読み取りません。
    • ポリシーの作成: 入力したターゲット構成に指定したデフォルト・ポリシーを受け入れる場合に選択します。

    「次へ」を選択します。

    コネクタ・プレビュー

    コネクタ構成を確認し、「作成」を選択します。

    作成プロセスが開始され、その進行状況が表示されます。完了すると、コネクタの詳細ページが開きます。

    1. コネクタのキュー・ソースを定義します: source.jsonという名前のファイルを保存します。

      キュー・ソースのJSONファイル・コンテンツの例:

      {
          "kind": "plugin",
          "pluginName": "QueueSource",
          "configMap": {
              "queueId": "<queue_OCID>"
          }
      }
    2. コネクタのFunctionsターゲットを定義します: target.jsonという名前のファイルを保存します。

      FunctionsターゲットのJSONファイルのコンテンツの例:

      {
          "kind": "functions",
          "functionId": "<function_OCID>",
          "batchSizeInKbs": "5000",
          "batchSizeInNum": "10",
          "batchTimeInSec": "60"
        }
    3. oci sch service-connector createコマンドを使用して、コネクタを作成します。

      スキャン可能性用の行が追加されたコマンドの例:

      oci sch service-connector create
        --compartment-id <compartment_OCID>
        --display-name "Queues to Functions"
        --source file://source.json
        --target file://target.json
  • CreateServiceConnector操作を実行してコネクタを作成します。

    リクエストの例:

    POST /20200909/serviceConnectors
    Host: service-connector-hub.us-phoenix-1.oraclecloud.com
    <authorization and other headers>
    {
      "displayName": "My Queue to Function Connector",
      "compartmentId": "<compartment_OCID>",
      "description": "My connector description",
      "source": {
        "kind": "plugin",
        "pluginName": "QueueSource",
        "configMap": {
          "queueId": "<queue_OCID>"
        }
      },
      "target": {
        "kind": "functions",
        "functionId": "<function_OCID>",
        "batchSizeInKbs": "5000",
        "batchSizeInNum": "10",
        "batchTimeInSec": "60"
      }
    }

新しいコネクタによるデータの移動の確認

コネクタを作成したら、データが移動していることを確認します。

  • コネクタでデータ・フローの詳細を取得するためのログの有効化
  • ターゲット・サービスで予想される結果を確認します。

データの移動を確認することで、コネクタに長時間障害が発生した場合に発生する自動非アクティブ化を回避できます。