OCI Functionsの動作
ファンクションをデプロイした場合とファンクションをコールした場合のOCI関数の動作を確認します。
ファンクションをOCIファンクションにデプロイした場合の処理
ファンクションのコードを記述し、デプロイの準備ができたら、単一のFn ProjectのCLIコマンドを使用して、すべてのデプロイ操作を順番に実行できます:
- ファンクションからDockerイメージを作成する
- func.yamlファイルに次のようなファンクション定義を指定する:
- ファンクションを実行できる最大時間
- ファンクションで消費できるメモリーの最大量
- 指定されたDockerレジストリにイメージをプッシュする
- ファンクションのメタデータ(メモリーと時間の制限、Dockerレジストリ内のイメージへのリンクを含む)をFnサーバーにアップロードする
- コンソールに表示されるファンクション・リストへファンクションを追加する
ファンクションをOCIファンクションにデプロイする前述のプロセスを図に示します。
イメージがDockerレジストリにアップロードされたら、そのイメージを更新するのはユーザーの責任です。たとえば、新しい言語バージョンがサポートされている場合(詳細は、ファンクション開発キット(FDK)を参照してください)。
ファンクションを呼び出した場合の処理 🔗
OCI Functionsにデプロイしたファンクションを次により呼び出すことができます:
- FnプロジェクトのCLI。
- Oracle Cloud Infrastructure SDK。
- ファンクションの呼出しエンドポイントへの署名付きHTTPリクエスト。すべてのファンクションに呼出しエンドポイントがあります。
- その他のOracle Cloudサービス(イベント・サービスでイベントによりトリガーされるなど)または外部サービス。
ファンクションが初めて呼び出されると、OCIファンクションは最初にIAMサービスによりリクエストを検証します。リクエストが認証チェックと認可チェックに合格したと仮定すると、次にOCIファンクションはリクエストをFnサーバーに渡し、ファンクション定義を使用して次のことを行います:
- DockerレジストリからプルするファンクションのDockerイメージを識別する
- ファンクションのイメージをそのファンクションが属するアプリケーションに関連付けられているサブネットのインスタンスのコンテナとして実行することで、ファンクションを実行する
ファンクションがコンテナ内部で実行されている場合、そのファンクションは、同じサブネットで実行されている他のリソースやサービス(たとえば、Database as a Service)に対して読取りおよび書込みが可能です。このファンクションは、他の共有リソース(たとえば、オブジェクト・ストレージ)および他のOracle Cloud Servicesとの間で読取りおよび書込みを行うこともできます。func.yamlファイルまたはコンソールでタイムアウトを設定して、ファンクションを実行できる最大時間を指定できます。
OCI Functionsは、ファンクションのログをOracle Cloud Infrastructureまたは外部ロギングの宛先に保存します。
ファンクションの実行が終了し、アイドル状態の期間が経過すると、Dockerコンテナは削除されます。コンテナが削除される前に、OCIファンクションが同じファンクションに対する別のコールを受信すると、2番目のリクエストは同じ実行中のコンテナにルーティングされます。OCI Functionsが、実行中のコンテナ内で現在実行中のファンクションに対するコールを受け取ると、OCI Functionsは水平方向にスケーリングして、両方の受信リクエストを処理し、2番目のDockerコンテナを開始します。
OCI Functionsでは、メトリック・チャートでファンクションの呼出しに関する情報を示します。
ファンクションを呼び出す前述のプロセスを図に示します。