Fn Projectをベースとし、Oracle Cloud上で管理されるFaaS(Fanctions as a Service)プラットフォームが、Oracle Functionsです。 FaaSのため、必要なインフラの調達や管理をクラウドサービスに任せられるほか、データベース、メッセージング、認証など開発に必要な機能がサービスとして提供されるので、開発者はプログラミングに専念できるようになります。 また、Dockerを用いたプラットフォームであるため、既存のDockerイメージを使用することも可能です。
今回はOracle Functionsの概要やメリット、構築手順をご紹介したいと思います。
Oracle Functionsとは
Oracle Functionsは、オラクル社が提供するオープンソースのFaaSプラットフォームであるFn Projectのマネージドサービスです。
オラクル社ではOracle Functionsを下記の様に定義しています。
Oracle Cloud Infrastructure Functionsは、完全に管理された、マルチテナントでスケーラビリティが高いオンデマンドのFunctions- as- a- Serviceプラットフォームです。エンタープライズグレードのOracle Cloud Infrastructure上に構築されており、Fn Projectオープン・ソース・エンジンによって強化されています。OCIファンクション(ファンクションのみ、および以前はOracle Functionsと呼ばれていた)は、ビジネス・ニーズにあわせてコードの作成に焦点を当てる場合に使用します。
関連内容はこちら
Oracle Functionsのメリット
Oracle Functionsは拡張性やカスタマイズ性の高いオープンソース・ベースのフルマネージドFaaSです。
Oracle Functionsを採用する代表的なメリットを3つご紹介します。
- コストの削減
実稼働分のみに料金が発生し、アイドルタイムには課金が発生しません。必要な時に必要な分だけリソースを割り当てられる従量課金制のため、コストの削減につながる可能性が高くなります。 - 開発までのリードタイム削減
インフラストラクチャーの構築が不要なため、実装者はアプリケーションの実装や機能改善など、ユーザーに価値を提供することに集中できます。これにより、開発までのリードタイムの削減に貢献します。 - スケーラビリティ
リクエスト量に応じた自動スケールが行われるため、リクエストの増減に柔軟に対応できます。自動なため、プロビジョニングや管理のためのサーバは不要です。
FaaSとその他クラウドサービスとの違い
Faasとは「Function as a Service」の略で、サーバレスでアプリケーション開発ができる環境を提供するサービスです。
FaaSのメリットには上述以外にも、クラウドからオンプレまでどこでも稼働するといった、場所に束縛されないポータビリティも挙げられます。FaaSの他にもアプリ開発を円滑化するクラウドサービスとしてPaaSやIaaS、CaaSなどがありますが、FaaSはこうしたメリットからECサイトのような利用量の増減が激しい状況での利用に適しているといえます。
FaaSとその他のクラウドサービスとの違いを以下で見ていきましょう。
- PaaS
PaaSとは「Platform as a Service」の略で、OSやミドルウェアをサービスとして提供します。SaaSのようにアプリケーションまで提供されるわけではありませんが、それ以外はすべて提供されるため、アプリ開発に専念できます。PaaSは、処理すべきリクエストがあるたびにアプリケーション全体を起動します。一方、FaaSは処理が発生したときのみ反応します。ECサイトのような利用量の増減が激しい状況では、柔軟に自動スケールするFaaSが適しているでしょう。 - CaaS
CaaSとは「Container as a Service」の略で、コンテナオーケストレーションとも呼ばれます。アプリケーションを構築するための環境という点ではPaaSやIaaS、FaaSと同じです。ただし、CaaSはアプリケーションの携帯性を高めるという特徴があります。アプリを開発する際にPaaSのようなクラウドサービスを利用すると、アプリ自体がそのサービスに依存したものになります。そのため、別の環境でアプリを利用しようとすると不都合が生じるでしょう。しかし、CaaSの特徴であるコンテナ化と呼ばれる技術を使えば、環境に依存せず利用できるアプリを開発することが可能です。ただし、自由度が高くなる反面、開発者が管理すべき項目も増加します。 - IaaS
IaaSとは「Infrastructure as a Service」の略で、サーバやストレージなどのインフラをサービスとして提供します。FaaSやPaaS、CaaSよりも汎用性が高く、OSやミドルウェアを自由に選択してアプリケーションの構築が可能です。ただし、開発者が管理すべき部分が多いので運用負荷がかかります。大規模なプログラムを実行したい場合はIaaSが適しているといえるでしょう。
環境構築してみた
Oracle Functionsを構築する事前準備として、インターネット接続ができるVCNを作成しておきます。
また、以下情報を確認しておきます。
- リージョン名(東京はap-tokyo-1)
- リージョンコード(東京はnrt)
- コンパートメントOCID
- ユーザーOCID、ユーザーネーム
- テナンシOCID、テナンシネームスペース
1. OCIに対してポリシーの設定を行います。
2つのポリシーによって、Oracle FunctionsからのVCN(ネットワーク)の使用およびファンクションを格納するレジストリの使用を許可します。
- Allow service FaaS to use virtual-network-family in tenancy
- Allow service FaaS to read repos in tenancy
2. Cloud Shellのセットアップ
2-1. 以下の手順で、cloud shellで利用したいfnコマンドがインストール済みであることを確認します。
2-2. 表示されたCloud shellで以下コマンドを実行します。
$fn --version
バージョンが表示されれば完了です。
3. 必要な情報の作成
3-1. 認証tokenの作成
3-1-1. Oracle Functionsを管理するOracle提供のプライベートDockerレジストリにログインするための認証tokenを作成するため、画面右上の人型のマークが表示されている箇所をクリックしユーザー名をクリックします。
3-1-2. ユーザー詳細画面左リソースメニューから「認証トークン」をクリックし、「トークンの生成」をクリックします。
3-1-3. トークン生成画面で名前を入力し、「トークンの生成」をクリックします。
3-1-4. トークン生成後表示されるトークンをコピーしておきましょう。
3-2. Oracle Functions CLI contextの作成と設定
3-2-1. Oracle Functionsをデプロイするため以下のコマンドを実行し、今選択されているcontextを確認します。
$ fn list context
3-2-2. 以下のコマンドを実行し、ご自身がご利用されているリージョンのcontextを選択します。
$ fn use context <region-context>
3-2-3. コンテキストに、 fn update コマンドを使用して以下の項目を設定します。
コンパートメントID
$ fn update context oracle.compartment-id [compartment-ocid]
APIエンドポイント
$ fn update context api-url https://functions.ap-tokyo-1.oraclecloud.com
OCIR(Oracleが提供するプライベートDockerレジストリで、Oracle Functionsの管理を行うものです)
$ fn update context registry nrt.ocir.io/[tenancy-namespace]/[context名]
3-2-4. 以下のコマンドを実行し、Oracle Functionsで使用するprofile名を設定します。(今回はDEFAULTを使用します)
$ fn update context oracle.profile "DEFAULT"
3-3. ログイン確認
3-3-1.以下のコマンドでログインを試します。
$ docker login nrt.ocir.io
ログイン時以下の情報を入力します。
ユーザー名:ネームスペース/ユーザー名
パスワード:3-1-4で作成した認証トークン
3-3-2. ログイン後、以下が表示されればログイン成功です。
$ Login Succeeded
以上で環境の作成は完了です。
ファンクションを作成し機能を試してみる
1. Oracle functionsアプリケーションの作成
ここからOracle functionsで使用するアプリケーションを作成します。
1-1. コンソール画面から「ファンクション」をクリックします。
1-2. アプリケーションの中の「アプリケーションの作成」をクリックします。
1-3. 必要な情報を記載し、作成をクリックします。
以上で、実行環境の構築は完了です。
2. ファンクションの作成
ここからファンクションの作成を行います。
会社名が表示されるファンクションを作成していきます。「2.Cloud Shellのセットアップ」で準備したCloud Shellを利用します。
2-1. 以下コマンドを使用し、ファンクションのひな形を作成します。
$ fn init --runtime java [ファンクション名]
–runtime:使用する言語を指定します。今回はjavaを指定します。
2-2. ファンクションへ移動します。
$ cd [ファンクション名]
2-3.ファンクションのデプロイをします。
$ fn deploy --app [アプリ名]
--app:4で作成したアプリケーション名を指定します。
2-4. アプリケーションの一覧を取得し、存在することを確認します。
$ fn list apps
3. Oracle Functionsの実行
3-1. 以下コマンドをOCICLIで実行し、ファンクションが実行されることを確認します。
$ fn invoke [アプリ名] [ファンクション名]
実行後、以下の「Hello、World!」が表示されれば成功です。
2-1で作成したひな形の中にある「HelloFunction.java」ファイルに「Hello,World」の記載があります。文字列を変更することで違う文言を表示することができます。
おわりに
Oracle Functionsの概要や構築手順などをご紹介しました。
構築については公式のチュートリアルを確認したものになるため、そちらも参考にしていただければと思います。
サーバレスの状態からアプリケーションが開発可能で、インフラストラクチャーを維持する必要なく管理ができることから、開発者は開発に専念できる便利なサービスです。一度試してみてはいかがでしょうか。
- カテゴリ:
- エンジニアリング