コードのみの関数の作成
サポートされているランタイムを選択し、ファンクション・アーカイブを提供して、OCI Functionsでコード専用ファンクションを作成する方法をご確認ください。
コンテナ・イメージではなくアーカイブからファンクションをデプロイする場合は、コード専用ファンクションを作成します。
ファンクションを作成する前に、選択したランタイムおよびOCI Functionsアプリケーションのアーキテクチャに従って、ファンクション・ソースおよび依存関係をパッケージ化します。
コードのみの関数を作成する前に、次のものが必要です。
- コード専用関数が使用可能なOC1リージョンへのアクセス。
- 既存のOCI Functionsアプリケーション。
- Functionsリソースを作成および更新する権限。
- コードのみの関数(Go、Java、Node.jsまたはPython)に対してサポートされているOCI Functions管理ランタイム。
- 選択したランタイムおよびアプリケーション・アーキテクチャのアーカイブ要件に従うファンクション・アーカイブ。
- Object Storageをアーカイブ・ソースとして使用する場合は、アーカイブを含むバケットおよびオブジェクトにアクセスします。
- オブジェクト・ストレージをアーカイブ・ソースとして使用する場合、OCI Functionsアプリケーション・リソース・プリンシパルがアーカイブ・オブジェクトを読み取ることを許可するポリシー。
開始する前に
ランタイムのトピックを使用して、関数アーカイブをパッケージ化します。
コンソールの使用
コードのみの関数を作成するには:
- 「アプリケーション」リスト・ページで、ファンクションを作成するアプリケーションを選択します。リストページまたはアプリケーションの検索に関するヘルプが必要な場合は、Listing Applicationsを参照してください。
-
「Functions」タブを選択します。
「関数」リスト・ページが開きます。選択したアプリケーションのすべての関数が表に表示されます。
- 「アーカイブから作成」を選択し、次の詳細を指定します:
- 名前:新しいファンクションの名前。機密情報の入力は避けてください。
- ファイル・ソース:次の詳細を指定して、使用するアーカイブを指定します。
- オブジェクト・ストレージから選択:アーカイブを含むオブジェクト・ストレージ・コンパートメントおよびバケットを選択し、アーカイブの名前とバージョン(該当する場合)を指定します。最大ファイル・サイズは250MBです。
- デバイスからのアップロード:アーカイブ・ファイルを選択するか、ファイルをボックスにドラッグ・アンド・ドロップします。最大ファイル・サイズは25MBです。
- ランタイム: OCI Functionsで使用される管理対象実行環境を決定するために、サポートされているランタイムを選択します。
- ハンドラ:選択したランタイムにハンドラが必要な場合は、ハンドラを入力します。一部のランタイムでは、コードのみの関数にハンドラが必要です。ハンドラは、関数が呼び出されたときにOCI関数がコールする関数アーカイブ内のエントリ・ポイントを識別します。
Java、PythonおよびNode.jsコード専用関数の場合、関数の作成時にハンドラを指定する必要があります。
Goコード専用関数の場合は、個別のハンドラ値を指定しないでください。アーカイブには、必要な場所に
funcという名前のLinux実行可能ファイルが含まれている必要があります。
次の詳細を指定します。
- メモリー(MB):ファンクションが実行時に使用できるメモリーの最大量。
- 同期呼出しタイムアウト(秒):同期モードで呼び出されたときにファンクションを実行できる最大時間。同期モードでの関数の起動の詳細は、「関数の起動」を参照してください。
- デタッチされた起動構成:デタッチ・モードで起動した場合のファンクションの実行方法を指定します。
- デタッチされた起動タイムアウト(秒):デタッチ・モードで呼び出されたときにファンクションを実行できる最大時間。
- 成功宛先: (オプション)ファンクションがデタッチ・モードで起動されると、デタッチされた呼出しが成功したときに呼出しレコードを書き込む宛先。デタッチされた呼出しの結果に対してサポートされる宛先は、通知サービス、キュー・サービスおよびストリーミング・サービスです。選択した宛先に応じて、追加の詳細を入力するように求められます(たとえば、通知サービスの場合、トピック・コンパートメントおよびトピックを選択します)。宛先サービスに書き込むには、OCI FunctionsにIAM権限が必要です。必要な権限がまだ存在しない場合は、適切なIAMポリシーが作成されていることを確認するよう求められます(デタッチされた起動の成功および失敗の宛先のためのIAMポリシーの作成を参照)。
- 失敗宛先: (オプション)ファンクションがデタッチ・モードで起動されると、デタッチされた呼出しが失敗したときに呼出しレコードを書き込む宛先。デタッチされた呼出しの結果に対してサポートされる宛先は、通知サービス、キュー・サービスおよびストリーミング・サービスです。選択した宛先に応じて、追加の詳細を入力するように求められます(たとえば、通知サービスの場合、トピック・コンパートメントおよびトピックを選択します)。宛先サービスに書き込むには、OCI FunctionsにIAM権限が必要です。必要な権限がまだ存在しない場合は、適切なIAMポリシーが作成されていることを確認するよう求められます(デタッチされた起動の成功および失敗の宛先のためのIAMポリシーの作成を参照)。
デタッチ・モードでのファンクションの呼出しの詳細は、ファンクションの起動を参照してください。
- プロビジョニングされた同時実行性の有効化:実行インフラストラクチャを常に使用可能にする同時ファンクション呼出しの最小数を指定することで、ファンクションの起動時の初期遅延を最小限に抑えることができます。
このオプションを選択した場合は、「プロビジョニングされた同時実行ユニット(PCU)」の値を入力して、同時ファンクション呼出しの最小数を指定します。入力する実際のPCU値は10の倍数である必要があります。Memoryが256Mバイトに設定されている場合、PCU値は20の倍数である必要があります。Memoryが128Mバイトに設定されている場合、PCU値は40の倍数である必要があります。使用可能なPCUの合計数は、ファンクションのサイズ、テナンシの制限、およびテナンシ内の他のファンクションに対してプロビジョニングされた同時実行性が有効になっているかどうかによって異なります。プロビジョニングされた同時実行性の詳細は、「プロビジョニングされた同時実行性を使用した初期待機時間の削減」を参照してください。
- タグ: リソースを作成する権限がある場合、そのリソースにフリーフォーム・タグを適用する権限もあります。定義済タグを適用するには、タグネームスペースを使用する権限を持つ必要があります。タグ付けの詳細は、リソース・タグを参照してください。 タグを適用するかどうかわからない場合は、このオプションをスキップするか、管理者に問い合せてください。後でタグを適用できます。
- 「作成」を選択してファンクションを作成します。
コードのみの関数が作成されます。他の関数と同様に呼び出すことができます。
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 direct-archive fn-update-runtime-config --application-id <app-id> --display-name <display-name> --functions-runtime-name <functions-runtime-name> --memory-in-mbs <memory> --archive-file file:/<archive-file-path>
OCI CLIコマンドのフラグおよび変数オプションの完全なリストは、コマンドライン・リファレンスを参照してください。
Fn ProjectのCLIを使用する
時々、Fn Project CLIの新しいバージョンがリリースされます。最新バージョンがインストールされていることを定期的に確認することをお薦めします。詳細は、Fn Project CLIをアップグレードするステップを参照してください。
Fn Project CLIを使用する場合は、次の2つの方法でコード専用関数を作成できます。
-
明示的に、
fn createコマンドを使用します。このメソッドは、すでに関数アーカイブがあり、コマンドでアーカイブ・ソース、ランタイムおよびハンドラ・オプションを直接指定する場合に使用します。
詳細は、「fn createコマンドを使用したコード専用関数の明示的な作成」を参照してください。
-
暗黙的に、
fn init、fn buildおよびfn deployコマンドを使用します。この方法は、Fn Project CLIでローカル・ファンクション・ファイルを初期化し、アーカイブをパッケージ化して、ファンクション・ディレクトリからファンクションをデプロイする場合に使用します。
詳細は、「fn init、fn buildおよびfn deployコマンドを使用してコード専用関数を暗黙的に作成する方法」を参照してください。
fn createコマンドを使用したコード専用関数の明示的な作成
ファンクション・アーカイブをパッケージ化すると、Fn Project CLIを使用してコード専用ファンクションを作成できます。
直接アップロードされたアーカイブ・ファイルからコード専用関数を作成するには、次の構文を使用します。
fn create function <app-name> <function-name> \
--code-only \
--source-type direct \
--source-file <path-to-function-source.zip> \
--runtime-config-type function-update \
--runtime-name <runtime-name> \
--handler <handler>
オブジェクト・ストレージのアーカイブからコード専用関数を作成するには、次の構文を使用します:
fn create function <app-name> <function-name> \
--code-only \
--source-type object-storage \
--bucket-name <bucket> \
--namespace <namespace> \
--object-name <object-name.zip> \
--runtime-config-type function-update \
--runtime-name <runtime-name> \
--handler <handler>
例:
fn create function acmeapp acme-func \
--code-only \
--source-type object-storage \
--bucket-name MyBucket \
--namespace axaxnpcrorw5 \
--object-name hello-java.zip \
--runtime-config-type function-update \
--runtime-name java21.ol9 \
--handler com.example.fn.HelloFunction::handleRequest
使用可能なランタイムをリストするには、fn list runtimesと入力します。ランタイムのランタイム・バージョンをリストするには、fn list runtime-versions --runtime-name <runtime-name>と入力します。
Goコード専用関数の場合は、個別のハンドラ値を指定しないでください。アーカイブには、必要な場所にfuncという名前のLinux実行可能ファイルが含まれている必要があります。
fn init、fn buildおよびfn deployコマンドを使用してコードのみの関数を暗黙的に作成します。
Fn Project CLIの暗黙的な開発者フローを使用して、ローカル・ファンクション・ディレクトリからコード専用ファンクションを作成できます。このフローでは、Fn Project CLIは、func.yamlのファンクション・メタデータと現在のFn Project CLIコンテキストを使用して、ファンクションをパッケージ化およびデプロイします。
このフローは、Fn Project CLIでローカル・アーカイブ・パッケージおよびデプロイメント・ワークフローを管理する場合に使用します。
暗黙的な開発者フローを使用する前に、アクティブなFn Project CLIコンテキストが、ファンクションを作成するコンパートメントおよびリージョンに設定されていることを確認します。このコンテキストは、デプロイメント中にFn Project CLIがコード専用ファンクション・アーカイブを処理する方法にも影響します。
コードのみのファンクション・アーカイブにObject Storageを使用する場合は、Fn Project CLIコンテキストでObject Storageバケット名およびネームスペースを指定します。たとえば、次のように入力します:
fn update context object_storage_bucket_name <source-bucket-name>fn update context object_storage_namespace <object-storage-namespace>
object_storage_bucket_nameおよびobject_storage_namespace値がアクティブなFn Project CLIコンテキストに存在する場合、暗黙的な開発者フローでは、コードのみのファンクション・アーカイブにObject Storageを使用できます。かわりに直接アーカイブ・アップロードを使用するには、これらの値をコンテキストから削除するか、それらを含まない別のFn Project CLIコンテキストに切り替えます。
暗黙的な開発者フローを使用してコード専用ファンクションを作成するには:
-
次のように入力して、コードのみの関数ディレクトリを初期化します。
fn init --code-only --runtime-name <runtime-name> --runtime-config-type function-update -
次のように入力して関数アーカイブを構築します。
fn build -
次の情報を入力してファンクションをデプロイします。
fn deploy --app <app-name>
Fn Project CLIコンテキストが、コード専用ファンクション・アーカイブにObject Storageを使用するように構成されている場合:
fn deployと入力してファンクション・アーカイブを構築し、アーカイブをオブジェクト・ストレージにアップロードして、ファンクションをデプロイできます。fn pushと入力すると、ファンクションをデプロイせずにアーカイブをオブジェクト・ストレージにアップロードするだけで済みます。
APIの使用
CreateFunction操作を実行して、ファンクションを作成します。