$30 off During Our Annual Pro Sale. View Details »

Oracle Funtions 概要

Oracle Funtions 概要

oracle4engineer
PRO

August 25, 2023
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. Oracle Functionsご紹介
    Subhead goes here on one line
    Name
    日本オラクル株式会社
    2023年5月

    View Slide

  2. Serverless とは?
    • クラウドの柔軟なコンピューティング・リソースをサービスとして必要な時に必要な分だけ利用
    • 開発者は、サーバー(=インフラストラクチャ)について意識しなくて良い
    • サーバーが存在しないことではなく、サーバーの管理が不要
    • ユーザーに価値を提供することに力を注ぐことができる
    Copyright © 2023, Oracle and/or its affiliates.
    2

    View Slide

  3. 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

    View Slide

  4. FaaS 採用のメリット
    Copyright © 2023, Oracle and/or its affiliates.
    必要な時に必要な分だけリソースを割り当てる従量課金制のため、コストの削減に繋がる可能性が高い
    コストの削減
    time time
    request request
    cost cost
    一般的なコストのかかり方 FaaS 採用時の
    コストのかかり方
    4

    View Slide

  5. FaaS 採用のメリット
    Copyright © 2023, Oracle and/or its affiliates.
    インフラストラクチャの構築が不要なため、実装者がアプリケーションの実装やユーザーに価値を提供することに集中できる
    開発までのリードタイム削減
    Hardware
    Operating
    System
    Language
    Runtime
    App
    Container
    Code
    Code
    従来
    FaaS 採用時
    UXの向上や、機能改善に充てることが可能!
    5

    View Slide

  6. FaaS 採用のメリット
    Copyright © 2023, Oracle and/or its affiliates.
    リクエストの数に合わせて、自動的にスケールするため、リクエストの増減に柔軟に対応しやすい
    スケーラビリティ
    User API Gateway
    Functions
    Functions
    Functions



    リクエストの数に応じて、
    自動的にスケール
    6

    View Slide

  7. 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

    View Slide

  8. コンテナベースのオープンソース “Fn Project”
    OSSベースのエコ・システム
    • https://fnproject.io/
    • 開発者のニーズを積極的に反映
    • ベンダーロックインの懸念不要
    場所を束縛されないポータビリティ
    • クラウドからオンプレまでどこでも稼働
    • 開発用PCでもそのまま稼働
    Copyright © 2023, Oracle and/or its affiliates.
    どこでも稼働する可搬性の高いFaaSアプリケーションを実現
    どこでも稼働
    開発者ニーズ
    の取り込み
    開発者
    Oracle Cloud
    Infrastructure
    (Managed)
    開発用端末
    3rd Patryクラウド オンプレミス環境
    8

    View Slide

  9. 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

    View Slide

  10. • Functionの実行前に決められた数(=PCUs*)の各種リソースの割り当てを事前に済ませておくことで初回実行時
    のレイテンシーを低減させるための機能
    • コールドスタート問題の対応策として有効
    • Provisioned Concurrencyを適用した、未使用のFunctionリソースに対しては、25%のリソース利用料が発生
    *: Provisioned Concurrency Units
    プロビジョニングされた並行性(Provisioned Concurrency)のサポート
    Copyright © 2023, Oracle and/or its affiliates.
    10

    View Slide

  11. 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

    View Slide

  12. • スケーラビリティに優れた実行基盤でビジネスロジックを実装
    • 適用例
    • SaaSの拡張機能の実装、モノリシックアプリケーションの分割、新規アプリケーションの開発、etc.
    ユースケース: Web, Mobile, IoTのビジネスロジック実行基盤
    Copyright © 2023, Oracle and/or its affiliates.
    12
    API Gateway
    Functions
    User
    Functions

    Autonomous
    Database
    Functions
    Functions
    ビジネスロジック
    認証

    View Slide

  13. • 手動で行っていた運用作業の一部を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

    View Slide

  14. • 監査ログ(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を用いて、
    クラウド操作を簡潔に実装

    View Slide

  15. • ファイルがアップロードされた事をトリガーとし、FunctionsでETL処理を実行
    • 軽量な処理かつ従量課金制によってコストを削減したい場合に特に有効
    ユースケース: イベントドリブンなETL処理
    Copyright © 2023, Oracle and/or its affiliates.
    15
    CSV, XML, JSON, etc.
    Object Storage
    Events Functions Autonomous
    Database
    Put
    ファイルアップロードイベントを
    トリガーにFunctionsを起動
    ファイル取得
    データベースへ書き込み
    ETL

    View Slide

  16. 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%のリソース利
    用料が発生

    View Slide

  17. フルマネージド、高スケーラビリティ、実行時のみ課金のサーバーレス実行環境
    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

    View Slide

  18. Copyright © 2023, Oracle and/or its affiliates.
    18
    Thank you

    View Slide

  19. View Slide

  20. Appendix
    20 Copyright © 2023, Oracle and/or its affiliates.

    View Slide

  21. 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倍以上

    View Slide

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

    View Slide

  23. 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 をトリガー

    View Slide

  24. (事前準備)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: ?

    View Slide

  25. (事前準備)開発環境の設定(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]
    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、動的グループ、ポリシーを用いて、認証・認可を行う

    View Slide

  26. 関数コードを実装する
    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());
    }
    }
    ひな形で作成されたメソッド(関数)内に
    処理を記述するだけ
    提供されているテストハーネスを活用し、
    生成されたテストケースメソッドに必要なテス
    トのロジックを記述していくだけ

    View Slide

  27. 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を
    自動的に実行

    View Slide