コード専用関数の更新

アーカイブの置換、ハンドラの変更、ランタイム設定の更新など、OCI Functionsでコード専用関数を更新する方法をご覧ください。

アーカイブ、構成、ランタイム設定、ハンドラまたはタグを変更する必要がある場合は、コードのみの関数を更新します。

コードのみの関数をコンテナ・イメージベースの関数に変更することはできません。また、コンテナ・イメージベースの関数をコードのみの関数に変更することはできません。コードのみのファンクション・デプロイメント・モデルとイメージベースのファンクション・デプロイメント・モデルの間で変更するには、新しいファンクションを作成します。

コードのみの関数を更新する前に、次のものが必要です。

  • 既存のコード専用関数。
  • 関数を更新する権限。
  • ソースコードまたは依存関係を変更する場合の更新されたアーカイブ。
  • Object Storageを使用している場合は、バケット、オブジェクトおよびオブジェクト・バージョン(該当する場合)にアクセスします。
  • オブジェクト・ストレージを使用する場合、OCI Functionsアプリケーション・リソース・プリンシパルがアーカイブ・オブジェクトを読み取ることを許可するIAMポリシー。

アーカイブの更新

関数コードまたはその依存関係を変更した場合は、まず関数アーカイブを再構築または再パッケージ化します。次に、新しい関数アーカイブを参照するように関数定義を更新します。

コンソールの使用

ファンクション・アーカイブを再構築または再パッケージ化した後、コンソールを使用してファンクション定義を更新し、新しいファンクション・アーカイブを参照できます。

  1. 「アプリケーション」リスト・ページで、操作する関数を含むアプリケーションを選択します。リストページまたはアプリケーションの検索に関するヘルプが必要な場合は、Listing Applicationsを参照してください。
  2. 「Functions」タブを選択します。

    「関数」リスト・ページが開きます。選択したアプリケーションのすべての関数が表に表示されます。

  3. 更新する機能の「アクション」メニュー(3つのドット)から、「編集」を選択します。
  4. 「ソース・コードの変更」オプションを選択し、次のように「ファイル・ソース」の詳細を更新します。
    • オブジェクト・ストレージから選択:アーカイブを含むオブジェクト・ストレージ・コンパートメントおよびバケットを選択し、アーカイブの名前とバージョン(該当する場合)を指定します。最大ファイル・サイズは250MBです。
    • デバイスからのアップロード:アーカイブ・ファイルを選択するか、ファイルをボックスにドラッグ・アンド・ドロップします。最大ファイル・サイズは25MBです。
    • ランタイム: OCI Functionsで使用される管理対象実行環境を決定するために、サポートされているランタイムを選択します。
    • ハンドラ:選択したランタイムにハンドラが必要な場合は、ハンドラを入力します。一部のランタイムでは、コードのみの関数にハンドラが必要です。ハンドラは、関数が呼び出されたときにOCI関数がコールする関数アーカイブ内のエントリ・ポイントを識別します。

      Java、PythonおよびNode.jsコード専用関数の場合、関数の作成時にハンドラを指定する必要があります。

      Goコード専用関数は、個別のハンドラ値を使用しません。アーカイブには、必要な場所にfuncという名前のLinux実行可能ファイルが含まれている必要があります。

  5. 必要に応じて、他の関数プロパティを更新します。
  6. OCI Functionsサーバーのファンクションを更新するには、「変更の保存」を選択します。

CLIの使用

OCI CLIの使用

ファンクション・アーカイブを再構築または再パッケージ化した後、OCI CLIを使用してファンクション定義を更新し、新しいファンクション・アーカイブを参照できます。

  • 次のように入力して、コード専用関数が使用するオブジェクト・ストレージのアーカイブを更新します:

    oci fn function update archive-function --function-id <function-id> --bucket-name <bucket-name> --namespace <namespace> --object-name <object-name>
  • 次のように入力して、コード専用関数が使用するアップロード済アーカイブ・ファイルを更新します。

    oci fn function update archive-function --function-id <function-id> --archive-file file:/<archive-file-path>

また、オブジェクト・ストレージ内のアーカイブを使用してアップロードしたアーカイブ・ファイルを使用するコード専用関数を変更したり、その逆も可能です:

  • 次のように入力するかわりに、オブジェクト・ストレージ内のアーカイブを使用するコード専用関数を変更して、アップロードしたアーカイブ・ファイルを使用します:
    oci fn function update archive-function --function-id <function-id> --archive-file file:/<archive-file-path>
  • 次のように入力するかわりに、アップロードしたアーカイブ・ファイルを使用するコード専用関数を変更して、オブジェクト・ストレージのアーカイブを使用します:
    oci fn function update archive-function --function-id <function-id> --bucket-name <bucket-name> --namespace <namespace> --object-name <object-name>

Fn ProjectのCLIを使用する

ヒント

時々、Fn Project CLIの新しいバージョンがリリースされます。最新バージョンがインストールされていることを定期的に確認することをお薦めします。詳細は、Fn Project CLIをアップグレードするステップを参照してください。

ファンクション・アーカイブを再構築または再パッケージ化した後、Fn Project CLIを使用してファンクション定義を更新し、新しいファンクション・アーカイブを参照できます。

  • 次のように入力して、コード専用関数が使用するオブジェクト・ストレージのアーカイブを更新します:

    fn update function <app-name> <function-name> --code-only --source-type object-storage --bucket-name <bucket-name> --namespace <namespace> --object-name <object-name>
  • 次のように入力して、コード専用関数が使用するアップロード済アーカイブ・ファイルを更新します。

    fn update function <app-name> <function-name> --code-only --source-type direct --source-file <path-to-function-source.zip>

また、オブジェクト・ストレージ内のアーカイブを使用してアップロードしたアーカイブ・ファイルを使用するコード専用関数を変更したり、その逆も可能です:

  • 次のように入力するかわりに、オブジェクト・ストレージ内のアーカイブを使用するコード専用関数を変更して、アップロードしたアーカイブ・ファイルを使用します:
    fn update function <app-name> <function-name> --code-only --source-type direct --source-file <path-to-function-source.zip>
  • 次のように入力するかわりに、アップロードしたアーカイブ・ファイルを使用するコード専用関数を変更して、オブジェクト・ストレージのアーカイブを使用します:
    fn update function <app-name> <function-name> --code-only --source-type object-storage --bucket-name <bucket-name> --namespace <namespace> --object-name <object-name>

APIの使用

ファンクション・アーカイブを再構築または再パッケージ化した後、UpdateFunction API操作を実行して、新しいファンクション・アーカイブを参照するようにファンクション定義を更新します。

ハンドラの更新

Java、PythonおよびNode.jsコード専用関数の場合、関数が呼び出されたときにOCI関数がコールするアーカイブ内のエントリ・ポイントは、Handlerプロパティの値によって識別されます。アーカイブ内のエントリポイントが変更された場合は、それに応じて Handlerプロパティーの値を変更します。

たとえば、次の場合に Handlerプロパティーの値を変更します。

ランタイム アーカイブの変更 ハンドラ・プロパティ値の例
Java クラス名またはメソッド名の変更 com.example.NewFunction::handleRequest
Python ハンドラ・ファイルまたは関数名の変更 new_func.handler
Node.js ハンドラJavaScriptファイルの変更 new_func.js

Goコード専用関数ではハンドラが使用されないことに注意してください。Goコード専用関数の場合、アーカイブには、必要な場所にfuncという名前のLinux実行可能ファイルが含まれている必要があります。

Handlerプロパティーの値を変更する前に:

  • 新しいエントリ・ポイントがアーカイブに存在することを確認します。
  • Handlerプロパティーに指定した値が、実行時に必要な形式を使用していることを確認します。
  • 関数コードが変更された場合は、アーカイブを再構築または再パッケージ化します。

たとえば、ハンドラを変更した場合、コンソールを使用してHandlerプロパティの値を次のように変更できます。

  1. 「アプリケーション」リスト・ページで、操作する関数を含むアプリケーションを選択します。リストページまたはアプリケーションの検索に関するヘルプが必要な場合は、Listing Applicationsを参照してください。
  2. 「Functions」タブを選択します。

    「関数」リスト・ページが開きます。選択したアプリケーションのすべての関数が表に表示されます。

  3. 更新する機能の「アクション」メニュー(3つのドット)から、「編集」を選択します。
  4. 「ソース・コードの変更」オプションを選択し、必要に応じて「ハンドラ」プロパティの値を変更します。

    アーカイブも変更されている場合は、別のアーカイブをアップロードするか、別のObject Storageオブジェクトを選択します。

コードのみのファンクション・ランタイムの管理

ランタイム更新モードを設定して、コードのみのファンクション・ランタイムを管理する方法を確認します。

管理されたランタイム更新

コードのみの関数では、管理対象ランタイムが使用されます。OCI Functionsは、管理対象ランタイム・パッチ適用を所有し、更新されたランタイム・バージョンを公開します。実行時更新モードを設定して、コード専用関数が新しい互換性のあるランタイム・バージョンに移動するタイミングを制御します。

管理対象ランタイム更新には、オペレーティング・システムの更新、言語ランタイム更新、ファンクション開発キット(FDK)の更新、セキュリティ修正およびその他のプラットフォーム管理ランタイム変更を含めることができます。ファンクション・コードおよびパッケージ化された依存性は、ファンクションが使用するランタイム・バージョンと互換性があることをテストする責任があります。

OCI Functionsは、管理対象ランタイム(オペレーティング・システム更新、言語ランタイム更新、FDK更新、セキュリティ修正、その他のプラットフォーム管理ランタイム変更を含む)の維持を担当します。ファンクション・コード、アプリケーションの依存性、およびランタイム更新との互換性の検証を担当します。

サポートされるコード専用ファンクション・ランタイム

コードのみの関数では、次の管理対象ランタイムがサポートされます。

  • Go (Goコード専用関数の場合、静的にリンクされた自己完結型のLinux実行可能バイナリを提供し、OCI FunctionsはサポートされているOracle Linuxランタイム環境を提供します)
  • Java
  • Node.js
  • Python

RubyおよびC#はコード専用関数ではサポートされていません。

サポートされているランタイム・バージョンについては、OCI関数でサポートされる言語を参照してください。

ランタイム更新モード

実行時更新モードは、コードのみの関数が管理対象の実行時更新を採用する方法を制御します。コードのみの関数を作成するときに、実行時更新モードを指定します。必要に応じて、後でファンクションを更新してランタイム更新モードを変更できます。

実行時更新モード 説明 使用条件
機能更新 ファンクションを更新すると、このファンクションは、現在サポートされている互換性のあるランタイム・バージョンに移動します。ファンクションは、ファンクションを更新するまで新しいランタイム・バージョンには移動しません。 ファンクションでは、通常のファンクション更新の一部として、より新しい互換性のあるランタイム・バージョンを採用する必要があります。
手動 ファンクションは、ランタイム・バージョンを明示的に変更する(またはランタイム更新モードを変更する)まで、サポートされている特定のランタイム・バージョンに固定されます。 関数が使用するランタイム・バージョンを正確にテストおよび制御します。

ファンクション更新モードは、完全自動ランタイム・アップグレードとは異なります。ファンクション更新モードでは、ファンクションを更新したときにのみ、ファンクションは新しい互換性のあるランタイム・バージョンに移動します。

ランタイム更新は、選択したランタイムの互換性のあるランタイム・バージョンにのみ適用されます。Pythonランタイムの場合、互換性のある更新には、選択したPythonマイナー・バージョンのパッチ・バージョンが含まれます。JavaおよびNode.jsランタイムの場合、互換性のある更新には、選択したランタイム・ファミリのマイナー・バージョンとパッチ・バージョンが含まれます。Goコード専用関数の場合、OCI FunctionsはサポートされているOracle Linuxランタイム環境を提供しますが、コンパイル済のGo実行可能ファイルを提供します。

ファンクションを特定のランタイム・バージョンに保持する必要がある場合は、手動モードを使用します。たとえば、本番ファンクションを更新する前に別の環境で新しいランタイム・バージョンをテストする場合は、手動モードを使用します。

ノート

関数に指定するランタイム・バージョンは、選択したランタイムに属している必要があり、アクティブである必要があります。完全自動ランタイム・アップグレードはサポートされていません。関数更新モードでは、関数を更新するときにのみ、関数をより新しい互換性のあるランタイム・バージョンに移動します。手動モードでは、変更するまで、選択したランタイム・バージョンに関数が保持されます。

実行時のライフサイクルと非推奨

OCI Functionsは、サポートされているコード専用ファンクション・ランタイムの管理対象ランタイム・バージョンを公開します。基礎となる言語ランタイムまたはオペレーティング・システムがサポートされているライフサイクルの終わりに達すると、ランタイム・バージョンは非推奨になり、廃止される可能性があります。

非推奨日は、OCI Functionsがランタイム・バージョンの更新、セキュリティ・パッチおよびアクティブ・サポートの提供を停止した日付です。廃止日は、ランタイム・バージョンがプラットフォームから削除され、新しいデプロイメントで使用できなくなる日付です。

ランタイム・バージョンを選択または固定する前に、管理対象ランタイムで使用される言語ランタイムおよびオペレーティング・システムのライフサイクル情報を確認します。

  • Java、PythonおよびNode.jsコード専用関数の場合、言語ランタイムおよびOracle Linuxランタイム環境のライフサイクル情報を確認します(コード専用関数でサポートされている言語を参照)。
  • Goコード専用関数の場合は、Oracle Linuxランタイム環境のライフサイクル情報を確認します。Goコード専用関数は、静的にリンクされた自己完結型のLinux実行可能バイナリを使用するため、OCI関数は起動時にGo言語ランタイムを提供しません。Oracle Linux 9のライフサイクル日付については、Oracle Linuxサポートのライフサイクル情報を参照してください。

ランタイム・ライフサイクル日付および各ライフサイクル・フェーズで許可されるアクションは変更される可能性があります。ファンクションの作成、ファンクションの更新またはファンクションのランタイム・バージョンへの固定を行う前に、サポートされているランタイム情報を確認します。

次の表に、ランタイム・ライフサイクルの様々なフェーズでのOCI関数の動作を要約し、サポートされているすべてのランタイム・バージョンで各フェーズで許可または制限されるアクションを示します。廃止日は廃止から6か月後に予定されており、OCIコンソールおよびFn Project CLIを介して通知が提供されます。

処理 実行時の非推奨化前 実行時の非推奨と廃止の間 実行時デコミッション後
新しいファンクションの作成またはデプロイメント 許可 使用不可 使用不可
既存の関数の更新 許可 許可 サポートされているランタイムを使用するように関数を変更する場合を除き、許可されません
既存の関数の呼出し 許可 許可 許可
関数のリスト、読取りおよび削除 許可 許可 許可
サポートとパッチ セキュリティおよびバグ修正を含む完全なサポート サポートなし サポートなし

実行時更新後のロールバック

コードのみの関数では、サポートされているライフサイクル・フェーズにあるアクティブなランタイム・バージョンを使用できます。OCI Functionsはランタイム更新を管理しますが、ソフトウェア更新と同様に互換性のリスクは残ります。

本番ファンクションがファンクション更新モードを使用し、新しいランタイム・バージョンに移動した後に失敗を開始する場合、ファンクションを手動モードに切り替え、そのファンクションを操作した最新バージョンなど、以前に公開されたアクティブな互換性のあるランタイム・バージョンを選択することで、影響を軽減できます。

手動モードに切り替えた後、調査とガイダンスのサポート・リクエストを開きます。問題の調査中は、この機能を手動モードで操作を続行できます。Oracle Supportは、報告された問題を評価し、適切な進路に関するガイダンスを提供します。これには、必要に応じて新しいランタイム・バージョンの採用に関する支援が含まれます。

コンソールの使用

コンソールを使用してランタイム更新モードを設定するには

  1. 「アプリケーション」リスト・ページで、操作する関数を含むアプリケーションを選択します。リストページまたはアプリケーションの検索に関するヘルプが必要な場合は、Listing Applicationsを参照してください。
  2. 「Functions」タブを選択します。

    「関数」リスト・ページが開きます。選択したアプリケーションのすべての関数が表に表示されます。

  3. 更新する機能の「アクション」メニュー(3つのドット)から、「編集」を選択します。
  4. ランタイム・バージョン管理構成で、ファンクションの実行時更新モードを設定します:

    • 「ファンクション更新」モードを選択して、ファンクションの更新時に、ファンクションを最新の互換性のあるランタイム・バージョンに移動します。
    • 「手動」モードを選択して、関数を特定のランタイム・バージョンに固定します。「手動」を選択した場合は、選択したランタイムの有効なランタイム・バージョンを選択します。
  5. OCI Functionsサーバーのファンクションを更新するには、「変更の保存」を選択します。

CLIの使用

OCI CLIの使用

OCI CLIを使用して、コード専用ファンクションの作成時にランタイム更新モードを設定できます。例:

  • ファンクション更新実行時更新モードを使用する(およびオブジェクト・ストレージに格納されているアーカイブを使用する)コード専用ファンクションを作成するには、次のように入力します:

    oci fn function create archive-function object-storage fn-update-runtime-config --application-id <app-id> --bucket-name <bucket-name> --display-name <display-name> --functions-runtime-name <functions-runtime-name> --memory-in-mbs <memory> --namespace <namespace> --object-name <object-name>
  • 手動実行時更新モードを使用する(およびオブジェクト・ストレージに格納されているアーカイブを使用する)コード専用関数を作成するには、次のように入力します:

    oci fn function create archive-function object-storage manual-runtime-config --application-id <app-id> --bucket-name <bucket-name> --display-name <display-name> --functions-runtime-name <functions-runtime-name> --functions-runtime-version-id <functions-runtime-version-id> --memory-in-mbs <memory> --namespace <namespace> --object-name <object-name>

OCI CLIを使用して、既存のコード専用関数の実行時更新モードを変更することもできます。

  • 次のように入力して、既存のコード専用ファンクションの実行時更新モードを「手動」から「ファンクション更新」に変更します。

    oci fn function update archive-function --function-id <function-ocid> --runtime-config FUNCTION_UPDATE --functions-runtime-name <runtime-name>  --handler <handler>
  • 次のように入力して、既存のコード専用関数の実行時更新モードを「関数の更新」から「手動」に変更します。

    oci fn function update archive-function --function-id <function-ocid> --runtime-config MANUAL --functions-runtime-name <runtime-name> --functions-runtime-version-id <runtime-version-ocid> --handler <handler>

Fn ProjectのCLIを使用する

ヒント

時々、Fn Project CLIの新しいバージョンがリリースされます。最新バージョンがインストールされていることを定期的に確認することをお薦めします。詳細は、Fn Project CLIをアップグレードするステップを参照してください。

Fn Project CLIを使用すると、ファンクションの作成または更新時に--runtime-config-typeオプションを使用して、コード専用ファンクションの実行時更新モードを設定できます。例:

  • ファンクション更新実行時更新モードを使用するようにコード専用ファンクションを更新するには、次のように入力します。

    fn update function <app-name> <function-name> \
      --code-only \
      --runtime-config-type function-update \
      --runtime-name <runtime-name>
  • 手動実行時更新モードを使用するようにコード専用関数を更新するには、次のように入力します。

    fn update function <app-name> <function-name> \
      --code-only \
      --runtime-config-type manual \
      --runtime-name <runtime-name> \
      --runtime-version-id <runtime-version-ocid>

    ランタイム・バージョンのOCIDを確認するには、次のように入力します。

    fn list runtime-versions --runtime-name <runtime-name> --output json

APIの使用

CreateFunctionおよびUpdateFunction API操作を実行して、コード専用関数の実行時更新モードを設定および変更します。

トラブルシューティング

問題おそらく原因推奨される修正
ファンクションの更新に失敗アーカイブが必要なランタイムまたはアーキテクチャ構造と一致しません実行時固有のトピックを使用してアーカイブを再パッケージ化します。
オブジェクト・ストレージ・アーカイブを読み取れませんオブジェクト・ストレージ読取りポリシーがないか、正しくありませんOCI Functionsアプリケーション・リソース・プリンシパルのポリシーを追加または修正します。
更新後のハンドラ・エラーハンドラ値がパッケージ・コードと一致しなくなりましたハンドラを更新するか、アーカイブを再パッケージ化します。
ランタイム・バージョンのエラーランタイム・バージョンが選択されたランタイムと一致しないか、アクティブではありません有効なランタイム・バージョンを選択してください。
デプロイメント・モデルの変更は使用できません コードのみのデプロイメント・モデルとイメージベースのデプロイメント・モデルの間の変更はサポートされていません必要なデプロイメント・モデルで新しいファンクションを作成します。