Oracle Cloud Infrastructureドキュメント

Oracle Functionsのしくみ

このトピックでは、ファンクションのデプロイ時およびファンクションの起動時のOracle Functionsの動作について説明します。

Oracle Functionsへのファンクションのデプロイ時の処理

ファンクションのコードを記述し、デプロイの準備が整ったら、Fn Project CLIコマンドを1つ使用してすべてのデプロイ操作を順番に実行できます:

  • ファンクションからのDockerイメージの作成
  • 次のようなfunc.yamlファイルでファンクションの定義を指定します:
    • ファンクションの実行最大許容時間
    • このファンクションで使用できるメモリーの最大量
  • イメージを指定されたDockerレジストリにプッシュしています
  • ファンクションのメタデータ(メモリーと時間の制限、Dockerレジストリのイメージへのリンクなど)をFn Serverにアップロード
  • コンソールに表示されるファンクションのリストへのファンクションの追加

Oracle Functionsにファンクションをデプロイする前のプロセスを図に示します。

このイメージは次のプロセスを示しています: : ファンクションからDockerイメージを構築し、そのイメージをDockerレジストリにプッシュし、func.yamlファイルを作成して、ファンクション定義をFn Serverにアップロードして、コンソールに表示します。

ファンクションの呼出し時の処理

Oracle Functionsにデプロイしたファンクションを起動する場所を次に示します:

  • Fn Project CLI。
  • Oracle Cloud Infrastructure SDK。
  • ファンクション呼出しエンドポイントへの署名付きHTTPリクエスト。 すべてのファンクションには、呼出しエンドポイントがあります。
  • その他のOracle Cloudサービス(「イベント」サービスのイベントによってトリガーされるなど)または外部サービスからのサービス。

ファンクションが初めて呼び出される場合、Oracle Functionsは最初にIAMサービスによるリクエストを検証します。 リクエストが認証チェックと認可チェックをパスした場合、Oracle FunctionsはリクエストをFn Serverに渡します。このサーバーは、ファンクション定義を使用して次のことを行います:

  • Dockerレジストリから取得するファンクションのDockerイメージを識別
  • このファンクションを実行するには、ファンクションが属するアプリケーションに関連付けられているサブネット内のインスタンス上で、ファンクション・イメージをコンテナとして実行

ファンクションがコンテナ内で実行している場合、このファンクションは、同じサブネット(たとえば、Database as a Service)内で実行している他のリソースおよびサービスへの読取りと書込みを行うことができます。 このファンクションは、他の共有リソース(たとえば、「オブジェクト・ストレージ」)およびその他のOracle Cloud Servicesからの読取りと書込みが可能です。 func.yamlファイルまたはコンソールでタイムアウトを設定して、ファンクションを実行できる最大時間を指定できます。

Oracle Functionsでは、Oracle Cloud Infrastructureまたは外部のロギング先にファンクション・ログが格納されます。

ファンクションの実行が終了し、アイドル状態の期間が経過すると、Dockerコンテナが除去されます。 コンテナが削除される前にOracle Functionsが同じファンクションへの別のコールを受信すると、2番目のリクエストは実行中の同じコンテナにルーティングされます。 実行中のコンテナ内で現在実行中のファンクションへのコールをOracle Functionsが受信した場合、Oracle Functionsは水平に拡張して着信リクエストと2番目のDockerコンテナの両方が処理されます。

Oracle Functionsでは、メトリック・チャートのファンクション呼出しに関する情報が表示されます。

上のファンクション起動プロセスがダイアグラムに表示されます。

このイメージは、Fn Serverにデプロイされたファンクションが、他のOracle Cloud Infrastructureサービス(IAM、オブジェクト・ストレージ、DBaaS)、ツール(OCIコンソール、Fn Project CLI)および外部サービス(IaaS、PaaS、SaaS)とどのように相互作用するかを示しています。 ファンクションは、VCN内のサブネット内のインスタンスのコンテナとしてデプロイされたため表示されます。