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

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

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

ファンクションへのキュー・メッセージの送信。

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

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

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

必要なIAMポリシー

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

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

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

ノート

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

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

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

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

キューおよび機能の設定

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

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

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

    1. 「コネクタ」リスト・ページで、「コネクタの作成」を選択します。リスト・ページの検索に関するヘルプが必要な場合は、コネクタのリストを参照してください。
    2. 「コネクタの作成」ページで、新しいコネクタのわかりやすい名前と説明(オプション)を入力します。機密情報を入力しないでください。
    3. 新しいコネクタを格納するコンパートメントを選択します。
    4. 「コネクタの構成」で、「ソース」「キュー」を選択します。
    5. 「ターゲット」で、「ファンクション」を選択します。
    6. 「ソース接続の構成」で、必要なメッセージを含むキューを選択します:
      • コンパートメント: 必要なキューを含むコンパートメントを選択します。
      • キュー: 必要なメッセージを含むキューを選択します。
      • チャネル・フィルタ(「メッセージ・フィルタリング」の下) (オプション): キュー内のチャネルからのメッセージをフィルタするには、値を入力します。

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

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

      ノート

      コネクタのターゲットに転送されたメッセージは、「消費済」とみなされます。キュー・サービスの要件を満たすために、コネクタはソース・キューから転送されたメッセージを削除します。詳細は、メッセージの使用を参照してください。
    7. 「ターゲットの構成」で、キューからメッセージを送信するファンクションを構成します。
      • コンパートメント: 必要なファンクションを含むコンパートメントを選択します。
      • ファンクション・アプリケーション: 必要なファンクションを含むファンクション・アプリケーションの名前を選択します。
      • Function: データの送信先のfunctionの名前を選択します。
      • 追加オプションの表示: このリンクをクリックし、ファンクションに送信されるデータのバッチごとに制限を指定します。手動設定を使用するには、バッチ・サイズ制限(KBまたはメッセージ数)およびバッチ時間制限(秒)の値を指定します。

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

      注意事項:

      • コネクタはソース・データをJSONリストとしてバッチでフラッシュします。最大バッチ(ペイロード)サイズは6MBです。
      • ファンクションは、1回の呼出しで6MBのデータと同期するように呼び出されます。データが6MBを超えると、コネクタが再びファンクションを呼び出して制限を超えるデータを移動します。このような呼出しは順次処理されます。
      • ファンクションは最大5分間実行できます。Delivery Detailsを参照してください。
      • Functionsターゲットからコネクタにデータを返さないでください。コネクタ・ハブは、ファンクション・ターゲットから返されたデータを読み取りません。関数がエラーなしで正常に戻された場合、コネクタはバッチ内のメッセージを「消費済」として処理し、それらのメッセージをキューから削除します。
    8. デフォルト・ポリシーを受け入れます。各デフォルト・ポリシーに用意されている「作成」リンクを選択します。
    9. 「作成」をクリックします。
    作成プロセスが開始され、その進行状況が表示されます。完了すると、コネクタの詳細ページが開きます。
    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"
      }
    }

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

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

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

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