Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Oracle Funtions 概要

Oracle Funtions 概要

oracle4engineer

August 25, 2023
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. Serverless – Functions as a Service (FaaS) Copyright © 2023,

    Oracle and/or its affiliates. Bare Metal Virtual Machine Container Function Code App Container Language Runtime Operating System Hardware Code App Container Language Runtime Operating System Code App Container Code … ユーザーの管理するレイヤー 3
  2. FaaS 採用のメリット Copyright © 2023, Oracle and/or its affiliates. インフラストラクチャの構築が不要なため、実装者がアプリケーションの実装やユーザーに価値を提供することに集中できる

    開発までのリードタイム削減 Hardware Operating System Language Runtime App Container Code Code 従来 FaaS 採用時 UXの向上や、機能改善に充てることが可能! 5
  3. FaaS 採用のメリット Copyright © 2023, Oracle and/or its affiliates. リクエストの数に合わせて、自動的にスケールするため、リクエストの増減に柔軟に対応しやすい

    スケーラビリティ User API Gateway Functions Functions Functions … … … リクエストの数に応じて、 自動的にスケール 6
  4. Oracle Functions 拡張性・カスタマイズ性の高いオープンソース・ベースのフルマネージドFaaS Copyright © 2023, Oracle and/or its affiliates.

    オープンソースのFaaSエンジン “Fn Project”を採用 コンテナ技術をベースとした 高いカスタマイズ性 Oracle Cloud Infrastructure が提供する豊富なサービス群との連携 Pay per use • 実稼働分のみ料金が発生 • アイドルタイムには課金が発生しない Autonomous • リクエスト量に応じた自動スケール • プロビジョニングや管理のためのサーバは不 要 Event-driven • OCIのトリガーによってコードを実行 • API Gateway, Service Connector Hub, Events, Notifications 1 2 3 7
  5. コンテナベースのオープンソース “Fn Project” OSSベースのエコ・システム • https://fnproject.io/ • 開発者のニーズを積極的に反映 • ベンダーロックインの懸念不要

    場所を束縛されないポータビリティ • クラウドからオンプレまでどこでも稼働 • 開発用PCでもそのまま稼働 Copyright © 2023, Oracle and/or its affiliates. どこでも稼働する可搬性の高いFaaSアプリケーションを実現 どこでも稼働 開発者ニーズ の取り込み 開発者 Oracle Cloud Infrastructure (Managed) 開発用端末 3rd Patryクラウド オンプレミス環境 8
  6. FDK* 言語 デフォルト サポート対象 非推奨 Java 17 17, 11, 8

    - Python 3.9 3.9, 3.8, 3.7, 3.6 - Ruby 2.7 2.7 2.5 Go 1.15 1.15 1.11 Node.js 14 14 11 C# (.NET) 6.0 6.0, 3.1 - Oracle Functions でサポートされるプログラミング言語 Copyright © 2023, Oracle and/or its affiliates. 9 *FDK: Fn Project Function Development Kits • プロトコル、入出力の解析、関数コンテナのロジック等システム内部に関する処理をサポートするヘルパー・ライブラリ • 最新の対応状況につきましては、こちらをご参照ください • https://docs.oracle.com/ja-jp/iaas/Content/Functions/Tasks/languagessupportedbyfunctions.htm
  7. Oracle Functionsを使用した連携 Oracle Cloudサービスとの連携による多彩なユースケースの実現 Copyright © 2023, Oracle and/or its

    affiliates. Analytics ERP Data HCM CX Supply Chain Integration Mobile Business Insight Collaboration Custom Apps Data Mgmt Container Engine For Kubernetes Streaming Logging Notifications Monitoring Events API Gateway Functions Cloud アプリケーション(SaaS) Cloud プラットフォーム(PaaS) Cloud インフラストラクチャ(IaaS) 11
  8. • 手動で行っていた運用作業の一部をFunctions + OCI SDKを用いて、自動化 • 実行分のみの課金のため、コストを抑えながら効率的な運用を実現 ユースケース: 運用の自動化 Copyright

    © 2023, Oracle and/or its affiliates. 13 Virtual Machine Monitoring Notifications Email Delivery Functions METRICS ALARMS メモリ使用率 メモリ使用率 ≥ 80% コンピュートシェイプの変更(スケールアップ) VM.Standard2.1 → VM.Standard2.2 User
  9. • 監査ログ(Audit Logs)を元に、企業のセキュリティポリシーやガバナンスルールを適用する • 適用例 • Public IPを持つインスタンスが作成された場合、そのインスタンスをシャットダウンする • 可視性がpublicなバケットが作成された場合、そのバケットを削除する

    • etc. ユースケース: セキュリティポリシーやガバナンスルールの適用 Copyright © 2023, Oracle and/or its affiliates. 14 Virtual Machine Functions Virtual Cloud Network Container Engine For Kubernetes Compartments Auditing Object Storage Autonomous Database Data Flow Streaming MySQL Database Service … Service Connector Hub トリガー Audit Logs Virtual Machine Virtual Cloud Network Container Engine For Kubernetes Compartments Object Storage Autonomous Database Data Flow Streaming MySQL Database Service … セキュリティポリシー、 ガバナンスルールに応じた操作 セキュリティポリシー、 ガバナンスルールの設定 OCI SDKを用いて、 クラウド操作を簡潔に実装
  10. • ファイルがアップロードされた事をトリガーとし、FunctionsでETL処理を実行 • 軽量な処理かつ従量課金制によってコストを削減したい場合に特に有効 ユースケース: イベントドリブンなETL処理 Copyright © 2023, Oracle

    and/or its affiliates. 15 CSV, XML, JSON, etc. Object Storage Events Functions Autonomous Database Put ファイルアップロードイベントを トリガーにFunctionsを起動 ファイル取得 データベースへ書き込み ETL
  11. Oracle Functions の課金モデル(2022年12月現在) 大幅な無料枠と安価な課金体系によるユーザー負担の軽減 Copyright © 2023, Oracle and/or its

    affiliates. リソース利用* リクエスト数 ¥19.838 以降、10,000 GB-秒ごと ¥28.00 以降、100万リクエストごと 無料 月間200万リクエスト 無料 月間 400,000 GB-秒 例)1,024MB(1GB)のメモリを10,000秒利用した場合: 1 x 1 x ¥19.838 別途OCIR(Oracle Cloud Infrastructure Resitry)の費用が必要 16 * Provisioned Concurrencyを適用した、未使用 のFunctionリソースに対しては、25%のリソース利 用料が発生
  12. フルマネージド、高スケーラビリティ、実行時のみ課金のサーバーレス実行環境 Oracle Functions Copyright © 2023, Oracle and/or its affiliates.

    17 ▪ ユースケース • ビジネスロジック実装/イベント・ドリブン型開発の効率化 ▪ 特徴 • フルマネージドなサーバレス実行基盤(FaaS) • オープンソースの Fn Project がベースでベンダーロックインなし • 複数のプログラミング言語をFDKとしてサポート • 最大5分間の実行時間をサポート • Provisioned Concurrencyによる初回実行時間の大幅な改善 • シンプルな開発フローとテストハーネスの提供 ▪ 価格(2022年12月現在) • 最初の200万リクエストは無料、以降100万リクエストごとに¥28.00 • 最初の400,000 GBは無料、以降10,000 GB-秒ごとに¥19.838 (※Provisioned Concurrencyを適用した、未使用のFunctionリソースに 対しては、25%のリソース利用料が発生) Oracle Cloud Infrastructure API Gateway Events Functions Functions User Functions … Autonomous Database Functions Web, Mobile, IoTのビジネスロジック実行基盤として活用 クラウドサービス間の連携やマイクロバッチとして活用 OCI SDK等を活用し、 効率的に開発 Oracle Cloud Infrastructure スケーラビリティに優れた実行基盤 でビジネスロジックを実行 Functions
  13. Dynamic Business Change with Serverless Oracle Cloud Integration • カンザス州最大の電力会社

    • 100万人以上の家庭、商業、工業顧客にサービスを提供 • 40以上の発電所と16,000メガワットの発電能力を有する Industry: Energy Copyright © 2023, Oracle and/or its affiliates. 21 前提 • 改修前の顧客管理システムは、クローズドなベンダーのプラット フォーム上で構築されていた • 1年以内に見込まれる顧客数の倍増に対応するだけの柔軟性 と拡張性はシステムには備わっていなかった ビジネス課題 • 顧客ごとに異なる(84タイプ)データ構造の統合 • 動的に拡張し、2倍の顧客数、大量の通信イベント(ハリケー ンによる停電など)をサポート ソリューション • OIC(Oracle Integration Cloud) + Oracle Functions 成果 • 10週間という短期間で実証、設計、構築、テストを実施 • 3か月で本番稼働(テスト完了から2週間後) • パフォーマンスは、ピーク時・平常時で目標の2倍以上
  14. Oracle Functions のセットアップの流れ 22 Copyright © 2023, Oracle and/or its

    affiliates. フルマネージドにより、わずか 2 ステップが FaaS の構築が可能 ユーザー必要な操作 OCIR(Oracle Cloud Infrastructure Registry) にDockerイメージをpush Oracle Functionsの トリガーを設定 トリガー起因で Oracle Functionsが起動 実行時間に 対して課金
  15. Oralce Functions 開発の一連の流れ 23 Copyright © 2023, Oracle and/or its

    affiliates. • Function のひな形を Fn CLI で作成し、それをベースに実装を進める • Fn CLI や FDK を活用し、開発を効率化 わずか数ステップでひな形の作成から開発環境へのデプロイまでを完了 $ fn init --runtime java fn-java # Java の Function のひな形を作成 $ cd fn-java $ fn create app my-app # Application を作成 $ fn deploy --app my-app # Function を function server にデプロイ $ fn invoke my-app fn-java # Function をトリガー
  16. (事前準備)Fn CLIをインストールする 24 Copyright © 2023, Oracle and/or its affiliates.

    Fn CLIをインストールする インストールがされていることを確認する $ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh $ fn version Client version is latest version: 0.6.13 Server version: ?
  17. (事前準備)開発環境の設定(context)を実施する 25 Copyright © 2023, Oracle and/or its affiliates. 開発環境の設定(context)を作成する

    $ fn create context --help MANAGEMENT COMMAND fn create context - Create a new context USAGE fn [global options] create context [command options] <context-name> DESCRIPTION This command creates a new context for a created application. COMMAND OPTIONS --provider value Context provider --api-url value Context api url --registry value Context registry provider 概要 default ローカル開発用 oracle リクエスト署名、秘密鍵、ユーザー・グループ、ポリシーを用いて、認証・認可を行う oracle-ip インスタンスOCID、動的グループ、ポリシーを用いて、認証・認可を行う
  18. 関数コードを実装する 26 Copyright © 2023, Oracle and/or its affiliates. コマンド一つでアプリケーションのひな形を提供

    メソッド(関数)とテストコードが自動生成される シンプルなCLI操作とFDK(Function Development Kit)の提供 $ fn init --runtime java fn-java public class HelloFunction { public String handleRequest(String input) { String name = (input == null || input.isEmpty()) ? "world" : input; System.out.println("Inside Java Hello World function"); return "Hello, " + name + "!"; } } import com.fnproject.fn.testing.*; import org.junit.*; import static org.junit.Assert.*; public class HelloFunctionTest { @Rule public final FnTestingRule testing = FnTestingRule.createDefault(); @Test public void shouldReturnGreeting() { testing.givenEvent().enqueue(); testing.thenRun(HelloFunction.class, "handleRequest"); FnResult result = testing.getOnlyResult(); assertEquals("Hello, world!", result.getBodyAsString()); } } ひな形で作成されたメソッド(関数)内に 処理を記述するだけ 提供されているテストハーネスを活用し、 生成されたテストケースメソッドに必要なテス トのロジックを記述していくだけ
  19. Function のデプロイ~トリガー 27 Copyright © 2023, Oracle and/or its affiliates.

    デプロイ先のアプリケーションを作成 Function のデプロイ Function のトリガー $ fn create app my-app $ fn deploy --app my-app $ fn invoke my-app fn-java Hello world! Function のビルド、プッシュ、設定の アップデートがコマンド一つで実行可能! User Functions Container Registry コンテナイメージ push $ fn deploy 設定 Invoke Events: • Events, Notifications, Service Connector Hub • 署名付き HTTP リクエスト • Fn CLI • OCI CLI • OCI SDK bump, build, push, updateを 自動的に実行