コードのみの関数について
コンテナ・イメージではなくアーカイブからOCI関数に関数を作成する方法であるコード専用関数について説明します。
概要
OCI Functionsは、2つのデプロイメント・モデルをサポートしています。
- 関数アーカイブを使用するコード専用関数。
- コンテナ・イメージベースの関数。
コードのみの関数では、コードと依存関係をアーカイブに指定し、サポートされている管理対象ランタイムを選択します。OCI Functionsは、アーカイブが選択したランタイムおよびアプリケーション・アーキテクチャに必要なフォーマットおよびディレクトリ構造を使用していることを確認し、ファンクションの実行に使用される実行環境を管理します。
コード専用関数により、OCI Functionsは、オペレーティング・システムや言語ランタイム(該当する場合)を含む実行環境を管理します。OCI Functionsは、サポートされているランタイム・バージョンを時間の経過とともに公開し、ランタイム更新モードを設定して、ファンクションがこれらのバージョンを採用する方法を制御します。
次の場合にコード専用関数を使用します。
- 標準のFunctionsランタイムの最も単純なオンボーディング・パスが必要です。
- コンテナ・イメージを作成せずにファンクション・コードをデプロイする場合。
- このファンクションは、サポートされている管理対象ランタイムのいずれかで実行できます。
- OCI Functionsでランタイムを管理する必要があります。
- コードと依存関係を必要なアーカイブ構造にパッケージ化できます。
- カスタムOS構成またはパッケージ、カスタム・ランタイムまたはカスタム・ベース・イメージは必要ありません。
コンテナ・イメージベースの関数は、次の場合に使用します。
- オペレーティング・システム、パッケージ、ランタイムまたはイメージの内容を完全に制御する必要があります。
- この関数には、管理対象ランタイムで使用できないカスタム・システム・ライブラリまたはツールが必要です。
- カスタム・ベース・イメージが必要です。
- 最終デプロイメント・アーティファクトをコンテナ・イメージとしてどのように構築、スキャン、署名および公開するかを完全に制御する必要があります。
- デプロイメント・プロセスの一環として、イメージの脆弱性スキャンまたはイメージ署名を管理する必要があります。
コード専用関数のアーカイブは、次のいずれかの方法で指定できます。
関数を作成または更新するときに、アーカイブ・ファイルを直接アップロードします。最大25MBのアーカイブには、直接アーカイブ・アップロードを使用します。
アーカイブをオブジェクト・ストレージに格納し、バケット、ネームスペースおよびオブジェクト名を指定してファンクションを作成または更新します。最大250MBのアーカイブには、Object Storageアーカイブ・ソースを使用します。
イメージベースの関数と比較したコード専用関数
| エリア | コード専用関数 | イメージベースの関数 |
|---|---|---|
| デプロイメント・アーティファクト | ZIPファイルなどのアーカイブ・ファイルです。Javaの場合は、単純関数にJARを使用するか、リソースまたはネイティブ依存関係を含める場合はZIPを使用します。Java JARはuber/fat JARである必要があります。 | コンテナ・イメージ |
| コンテナ・イメージを構築します | いいえ | はい |
| イメージをOCIRにプッシュします | いいえ | はい |
| ランタイム | サポートされている管理対象ランタイムを選択します | ランタイムがイメージに含まれます |
| ランタイム管理 | OCI Functionsで管理される実行環境 | イメージの一部としてユーザーが管理 |
| 最適な | 標準ランタイム、オンボーディングの簡素化、運用管理の簡素化、アーカイブベースのワークフロー | カスタム・ランタイム、カスタムOSパッケージ、特殊な依存関係、カスタム・ビルド/署名/スキャン・パイプライン |
| お客様の責任 | コードを正しくパッケージ化し、依存関係を含めて、ランタイムを選択し、関数をテストします。 | イメージの構築、ベース・イメージの管理、OS/ランタイムへのパッチ適用、イメージのプッシュ、テスト機能 |
ファンクション・アーカイブに含めるコードと依存関係は、ユーザーが担当します。組織のセキュリティ・ポリシーに従って、ファンクション・コードおよびパッケージ化された依存関係をスキャンします。OCI Functionsは、選択したランタイム更新モードに従って、コード専用関数の実行環境を管理します。
コードのみの関数は、次のランタイムをサポートします。
- Go (Goコード専用関数の場合、静的にリンクされた自己完結型のLinux実行可能バイナリを提供し、OCI FunctionsはサポートされているOracle Linuxランタイム環境を提供します)
- Java
- Node.js
- Python
RubyおよびC#はコード専用関数ではサポートされていません。
コードのみの関数は、OC1リージョンで使用できます。
コードのみの関数は、x86、ARM、およびマルチアーキテクチャーアプリケーションをサポートします。アーカイブ・レイアウトは、OCI Functionsアプリケーションのアーキテクチャと一致する必要があります。アーカイブ構造は、ランタイム・アーキテクチャとアプリケーション・アーキテクチャによって異なる場合があります。
制限
| 制限 | 値 |
|---|---|
| 直接アーカイブ・アップロード・サイズ | 25MB |
| オブジェクト・ストレージ・アーカイブのソース・サイズ | 250MB |
| サポートされるアーカイブ形式 | ZIP Javaの場合、JARは単純な関数でもサポートされます。Java JARはuber/fat JARである必要があります。 |
コードのみの関数とイメージベースの関数の間の変更
コードのみの関数をコンテナ・イメージベースの関数に変更することはできません。また、コンテナ・イメージベースの関数をコードのみの関数に変更することはできません。コードのみのファンクション・デプロイメント・モデルとイメージベースのファンクション・デプロイメント・モデルの間で変更するには、新しいファンクションを作成します。
オブジェクト・ストレージ・アーカイブへのアクセスを有効にするために必要なIAMポリシー
オブジェクト・ストレージに格納されているアーカイブを使用してコード専用ファンクションを作成または更新する場合、OCI Functionsアプリケーション・リソース・プリンシパルがアーカイブ・オブジェクトを読み取ることができるように、アーカイブが存在するテナンシにIAMポリシーが存在する必要があります。例:
Allow any-user to read objects in compartment <compartment-name> where all {request.principal.type = 'fnapp', request.principal.compartment.id = '<compartment-ocid>', target.object.name = '<object-name-containing-the-archive>', target.bucket.name = '<bucket-name>'}