こんにちは。t-tasakaです。
前回、こちらの記事でOracle Functionsの環境構築と、簡単なコードをデプロイして実行してみました。
Oracleの提供しているFaaS(Function as a Service,以下FaaS)であるOracle Functionsですが、Fn Projectをベースとしています。
Fn ProjectとOracle Functionsの概要について、改めてまとめてみようと思います。
目次
Fn Project とは
Fn Pojectは、オラクルが主導で開発しているオープンソースのFaaSプラットフォームです。FaaSは、Functionと呼ばれる単機能のプログラムを必要なタイミングで実行します。
実際の動作としては、Dockerにより関数を実行するためだけのコンテナを自動で構築し、実行し、削除まで行うようになっています。
公式GitHubには以下のように記載されています。
引用元:https://github.com/fnproject/fn
Some of its key features:
Open Source
Native Docker: use any Docker container as your Function
Supports all languages
Run anywhere
Public, private and hybrid cloud
Import Lambda functions and run them anywhere
Easy to use for developers
Easy to manage for operators
Written in Go
Simple yet powerful extensibility
Fn Projectのコンポーネントはいくつかありますが、構築と動作に必要なコンポーネントはFn ServerとFn CLIです。
Fn Serverについて
Fn Projectでは、Fn Serverが関数の管理、実行しています。関数だけでなく、Fn ServerもDockerイメージであり、DockerイメージをプルすることでFn Serverが利用できるようになります。
Fn CLIについて
Fnのパッケージをインストールすると、Fn CLIが使用できるようになります。Fn CLIは、
・Fn Serverの起動、停止
・Oracle Cloudをプロバイダーに指定したコンテキスト(Oracle Cloudに接続するための設定ファイル)の設定
・関数の呼び出し
を行うことができます。
Oracle Functions とは
Oracle FunctionsはOracleが提供しているFaaSであり、Fn Projectがベースとなっています。
Oracle Functionsでは、Fn Projectでの関数をOracle Cloudにデプロイして、実行します。実行時間による課金で、関数のホストとなるサーバを管理しなくて済みます。
引用元:https://www.oracle.com/jp/cloud-native/functions/
Oracle Cloud Functionsは、インフラストラクチャの管理を必要とせずに、アプリケーションを作成、実行、スケーリングできるようにするサーバーレス・プラットフォームです。Functionsは、Oracle Cloud Infrastructure、Platform Services、およびSaaSアプリケーションと統合されます。Functionsはオープン・ソースのFnプロジェクトに基づいているので、他のクラウドやオンプレミス環境に容易に移植できるアプリケーションを作成できます。Functionsに基づくコードの実行時間は短いことが普通であり、お客様は、使用したリソースについてのみ料金を支払います。
開発の流れ
Oracle Functionsの開発には、クライアント環境が必要です。
クライアント環境はローカルマシンでもOracle Cloudのインスタンスでも構いませんが、以下のタスクを実施されている必要があります。
- Oracle Functionsで使用するためのOracle Cloud Infrastructure API署名キーの設定
- Oracle Cloud Infrastructure CLI構成ファイルでのプロファイルの作成
- oci-curlのコピーの作成および構成
- Oracle Functionsで使用するためのDockerのインストール
- Fn ProjectのCLIのインストール
- Oracle Cloud Infrastructureに接続するためのFn ProjectのCLIコンテキストの作成
- oracle.profileパラメータを使用したFn ProjectのCLIコンテキストの設定
- Oracle Cloud Infrastructure Registryへのログインを有効にする認証トークンの生成
- Dockerの起動
- Oracle Cloud Infrastructure Registryへのログイン
関数の作成
Fn CLIのfn init
コマンドで関数の雛形の作成を行うことができます。--runtime
で言語を指定することで、それぞれの言語に対応した雛形が作成されます。
雛形が作成されると、FDK(Function Development Kit,以下FDK)が使用可能となります。
FDKは、関数の入出力周りや、ユニットテストなど、コンテナを扱いやすくしてくれます。
Java,Python,Node.js,Go,C#,RubyのFDKが用意されています。
引用元:https://github.com/fnproject/docs/blob/master/fn/general/introduction.md
Fn FDKs Makes Function Development Easy
The Fn platform has Function Development Kits (FDKs) which are a set of helper libraries that handle the system internals (protocols, parsing input and output, logic for function containers, etc.) automatically thereby making function development easier. Fn has FDKs for popular languages - Java, Node.js, Python, Go, and Ruby.
例えば、 fn init --runtime java javafn
としてjavaでの関数の雛形を作成した場合、以下のようなファイルが作成されます。(javafnという名前で関数を作成しています)
── javafn
├── func.yaml
├── pom.xml
└── src
├── main
│ └── java
│ └── com
│ └── example
│ └── fn
│ └── HelloFunction.java
└── test
└── java
└── com
└── example
└── fn
└── HelloFunctionTest.java
この中のfunc.yaml
は関数を動作させる際の定義を記したファイルです。
以下のようになっています。
schema_version: 20180708
name: javafn
version: 0.0.1
runtime: java
build_image: fnproject/fn-java-fdk-build:jdk11-1.0.123
run_image: fnproject/fn-java-fdk:jre11-1.0.123
cmd: com.example.fn.HelloFunction::handleRequest
runtimeを指定して生成された雛形はFDKを利用できるようになっており、例えばjavaのFDKのgithubをみると以下のような機能が挙げられています。
引用元:https://github.com/fnproject/fdk-java
Some of the FDK for Java features include:
Parsing input and writing output
Flexible data binding to Java objects
Function testing using JUnit rules
And more!
Oracle Functionsの実行
作成した関数をOracle Cloudにデプロイするには、contextと呼ばれる設定ファイルの作成が必要です。contextは接続先を管理するためのファイルです。
fn create context
コマンドでcontextを作成し、
・関数を保持するコンパートメントを指定
・APIエンドポイントを指定
・Oracle Functionsで使用するDockerレジストリのアドレスを追加
します。
以上の設定を行い、Oracle Cloud側でOracle Functionsに登録するアプリケーション名を設定し、関数のデプロイを
$ fn -v deploy --app [アプリケーション名]
を実行するとOracle Cloud上に関数をデプロイすることができます。
あとは fn invoke
コマンドや設定したトリガーの発火により、Oracle Functionsを実行できます。
まとめ
Fn ProjectとOracle Functionsについてまとめますと、
・Fn ProjectはオープンソースのFaaSサービス
・Oracle FunctionsはFn Serverによって構成されたマネージドなFn Server
・関数は小さなコンテナとして動作する
・Fn Serverはトリガーなどにより関数を呼び出し、実行させる
・Fn CLIによりFn Serverの操作、関数の雛形の作成などが可能
・FDKにより各言語での開発が容易になっている
・contextを設定して、Oracle Cloud上に関数を簡単にデプロイできる
ということになります。
Fn Projectには管理用のGUIやオーケストレーション用のコンポーネントもあるようです。こちらも試せたらと思います。
この記事がお役に立てれば幸いです。