6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OCI Functions のコードのみ関数(Code-only Functions)を動かしてみる(Oracle Cloud Infrastructure)

6
Posted at

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. 検証環境

下記記事の環境を使用します。

image.png

コマンド類は Private Subnet に配置した Compute で実行します。
本記事では Oracle Linux 9 の Platform Image で作成しています。

上記環境を利用することを前提としてマニュアルの「A. テナンシを設定します」は省略します。

4. Functions のアプリケーションの作成

左上のメニュ → Develper Services → Functions - Applications を選択します。
Create Applicationsボタンをクリックしてアプリケーションを作成します。

image.png

5. APIキーの設定

OCIコンソールの画面右上の人のアイコン → ログインユーザーのメールアドレス → Token and keysタブを選択します。

image.png

Generate API key pair が選択されている状態で Download private key および Download public key をクリックして秘密鍵/公開鍵をダウンロードします。

Addボタンを押すと OCI Functions を実行するための構成ファイルが出力されるため、テキストファイル等にコピーして保存します。

image.png

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 も利用可能です。

どんどん活用してくださいね彡(^)(^)

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?