OCI Functions のコードのみ関数(Code-only Functions)がリリースされました。
本記事では OCI Functions のコードのみ関数(Code-only Functions)を動かしてみます。
彡(^)(^)
1. OCI Functions のコードのみ関数(Code-only Functions)とは
従来の OCI Functions はコンテナのイメージを基に作成して、ビルド、レジストリへのプッシュ、実行環境へのデプロイを行う必要がありました。
2026年9月に Go, Java, Node.js, Python の4言語で、コードのみのデプロイメントを作成できるようになりました。これらの言語ではコンテナのイメージは必須ではなくなりました。
詳細は下記ブログおよびマニュアルを参照して下さい。
Code-only Deployment for OCI Functions is now Generally Available
https://blogs.oracle.com/cloud-infrastructure/oci-functions-code-only-deploymentコードのみの関数について
https://docs.oracle.com/ja-jp/iaas/Content/Functions/Tasks/functions-codeonly-about.htm
2. 本記事のゴール
本記事では下記マニュアルの手順を実行して、コードのみ関数が動作することを確認します。
Functions QuickStart on Local Host Using Archives (Code-only Functions)
https://docs.oracle.com/en-us/iaas/Content/Functions/Tasks/functionsquickstart_codeonly_localhost.htm
3. 検証環境
下記記事の環境を使用します。
コマンド類は Private Subnet に配置した Compute で実行します。
本記事では Oracle Linux 9 の Platform Image で作成しています。
上記環境を利用することを前提としてマニュアルの「A. テナンシを設定します」は省略します。
4. Functions のアプリケーションの作成
左上のメニュ → Develper Services → Functions - Applications を選択します。
Create Applicationsボタンをクリックしてアプリケーションを作成します。
5. APIキーの設定
OCIコンソールの画面右上の人のアイコン → ログインユーザーのメールアドレス → Token and keysタブを選択します。
Generate API key pair が選択されている状態で Download private key および Download public key をクリックして秘密鍵/公開鍵をダウンロードします。
Addボタンを押すと OCI Functions を実行するための構成ファイルが出力されるため、テキストファイル等にコピーして保存します。
Private Compute で Functions の実行に必要なファイル群を作成します。
cd
mkdir .oci
cd .oci
vi code_only_functions_key.pem
chmod go-rwx ~/.oci/code_only_functions_key.pem
ls -la ~/.oci/code_only_functions_key.pem
cat config
下記は実行結果のサンプルです。構成ファイルのリージョンや秘密鍵のパスは適宜編集して下さい。
[opc@ayu-prvcomp2 ~]$ mkdir .oci
[opc@ayu-prvcomp2 ~]$ cd .oci
[opc@ayu-prvcomp2 .oci]$ vi code_only_functions_key.pem
[opc@ayu-prvcomp2 .oci]$ chmod go-rwx ~/.oci/code_only_functions_key.pem
[opc@ayu-prvcomp2 .oci]$ ls -la /home/opc/.oci/code_only_functions_key.pem
-rw-r--r--. 1 opc opc 1716 Sep 30 12:13 /home/opc/.oci/code_only_functions_key.pem[opc@ayu-prvcomp2 .oci]$ vi config
[opc@ayu-prvcomp2 .oci]$ cat config
[DEFAULT]
user=ocid1.user.oc1..
fingerprint=xx:
tenancy=ocid1.tenancy.oc1..
region=ap-tokyo-1
key_file=/home/opc/.oci/code_only_functions_key.pem
6. Fn Project CLIのインストール
今回は Oracle Linux 9 の Compute で作業しているため、マニュアル記載の下記コマンドを実行します。
curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
実行結果のサンプルは以下の通りです。
[opc@ayu-prvcomp2 ~]$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
fn version 0.6.70
______
/ ____/___
/ /_ / __ \
/ __/ / / / /
/_/ /_/ /_/`
[opc@ayu-prvcomp2 ~]$
バージョンを確認します。
fn version
実行結果のサンプルは以下の通りです。
[opc@ayu-prvcomp2 ~]$ fn version
Client version: 0.6.70
Version check: Client version is latest version: 0.6.70
Server version: ?
7. Fn Project CLIコンテキスト・プロバイダーの設定
以下のコマンドでコンテキストを作成します。コンテキスト名の部分は任意の文字列を指定してください。
fn create context ayu-code-only-context --provider oracle
実行結果のサンプルは以下の通りです。
[opc@ayu-prvcomp2 ~]$ fn create context ayu-code-only-context --provider oracle
Successfully created context: ayu-code-only-context
作成したコンテキストの使用を宣言します。
fn use context ayu-code-only-context
実行結果のサンプルは以下の通りです。
[opc@ayu-prvcomp2 ~]$ fn use context ayu-code-only-context
Now using context: ayu-code-only-context
~/.oci/configに設定したプロファイルを指定します。今回は DEFAULT を指定
fn update context oracle.profile DEFAULT
実行結果のサンプルは以下の通りです。
[opc@ayu-prvcomp2 ~]$ fn update context oracle.profile DEFAULT
Current context updated oracle.profile with ayu-code-only-profile
コンテキストのコンパートメントOCIDをセットします。
fn update context oracle.compartment-id ocid1.compartment.oc1........
実行結果のサンプルは以下の通りです。
[opc@ayu-prvcomp2 ~]$ fn update context oracle.compartment-id ocid1.compartment.oc1.......
Current context updated oracle.compartment-id with ocid1.compartment.oc1........
8. JDK21 と Maven のインストール
マニュアル手順のサンプルアプリは JDK21 と Maven に依存しているため、両方をインストールします。
sudo dnf install java-21-openjdk-devel
sudo dnf install maven
インストール後にパスを通してバージョンを確認します。
export JAVA_HOME=/usr/lib/jvm/java-21/
export PATH="$JAVA_HOME/bin:$PATH"
java -version
mvn -version
[opc@ayu-prvcomp2 hello-java]$ java -version
openjdk version "21.0.12.1" 2026-08-18 LTS
OpenJDK Runtime Environment (Red_Hat-21.0.12.1.1-1.1) (build 21.0.12.1+1-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-21.0.12.1.1-1.1) (build 21.0.12.1+1-LTS, mixed mode, sharing)
[opc@ayu-prvcomp2 hello-java]$ mvn -version
Apache Maven 3.6.3 (Red Hat 3.6.3-23)
Maven home: /usr/share/maven
Java version: 21.0.12.1, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-21-openjdk-21.0.12.1.1-1.2.0.1.el9.x86_64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "6.1
9. サンプルアプリケーションの作成と実行
サンプルアプリケーションを作成します。
fn init --code-only --runtime-name java21.ol9 --runtime-config-type function-update hello-java
下記は実行ログです。
[opc@ayu-prvcomp2 ~]$ fn init --code-only --runtime-name java21.ol9 --runtime-config-type function-update hello-java
Creating function at: ./hello-java
Function boilerplate generated.
func.yaml created.
Maven でビルドします。マニュアルには無い手順ですがやらないとエラーになりました。
mvn clean package
fn CLI でビルドします。コマンドがマニュアルと微妙に異なります。
fn build --app helloworld-app
下記は実行ログです。
[opc@ayu-prvcomp2 hello-java]$ fn build --app helloworld-app
Code-only function packaged successfully: /home/opc/hello-java/hello-java.0.0.2.zip
ビルドしたアプリケーションをデプロイします。
fn -v deploy --app helloworld-app
下記は実行ログです。
[opc@ayu-prvcomp2 hello-java]$ fn -v deploy --app helloworld-app
Bumped to version 0.0.3
Tracking work request ocid1.functionsworkrequest.oc1.ap-tokyo-1.aaaaaaaauobpnvuvb26vxorvp3gklslje7ijc6axmluaxjhggiimsexpjedq
Work request ocid1.functionsworkrequest.oc1.ap-tokyo-1.aaaaaaaauobpnvuvb26vxorvp3gklslje7ijc6axmluaxjhggiimsexpjedq status: ACCEPTED (0%)
Work request ocid1.functionsworkrequest.oc1.ap-tokyo-1.aaaaaaaauobpnvuvb26vxorvp3gklslje7ijc6axmluaxjhggiimsexpjedq status: IN_PROGRESS (50%)
Work request ocid1.functionsworkrequest.oc1.ap-tokyo-1.aaaaaaaauobpnvuvb26vxorvp3gklslje7ijc6axmluaxjhggiimsexpjedq status: SUCCEEDED (100%)
Work request ocid1.functionsworkrequest.oc1.ap-tokyo-1.aaaaaaaauobpnvuvb26vxorvp3gklslje7ijc6axmluaxjhggiimsexpjedq completed successfully
fn invoke でデプロイしたアプリケーションを実行します。
fn invoke helloworld-app hello-java
下記は実行ログです。
Hello, world!
サンプルアプリケーションが実行できました。
彡(^)(^)
10. まとめ
初めの設定はひと手間ですがコンテナの管理が不要なのはありがたいです。
本記事ではマニュアル手順通りの Java でしたが、冒頭で説明した通り Go, Node.js, Python も利用可能です。
どんどん活用してくださいね彡(^)(^)



