Oracle FunctionsのスクリプトをAPIGW経由で確認 Part2

 2022.03.22  株式会社テリロジー 技術統括部

こんにちは!テリロジーのY.Tです。
今回はOCIのOracleFunctionsを利用して作成したスクリプトの実行結果を、
OracleAPIGWに公開する具体的な手順についてご紹介したいと思います。
本手順ではOCI上に構築したUbuntu20のサーバに、Fnをインストールし、APIGWと連携させていきます。

Dockerのインストール

はじめに、Oracle Functionsで利用するDockerを以下のコマンドでインストールしていきます。

$ sudo apt install apt-transport-https ca-certificates curl software-properties-common $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" $ sudo apt update $ apt-cache policy docker-ce $ sudo apt install docker-ce $ sudo systemctl status docker $ docker version

IAMポリシーの設定とOCICLIのインストール

OCIコンソール上で、IAMポリシーを設定します。
まず、rootコンパートメントに以下のポリシーを作成します。

statements for the Oracle Functions service: Allow service FaaS to read repos in tenancy Allow service FaaS to use virtual-network-family in compartment <コンパートメント名>

オラクルファンクションを利用するユーザがテナントの管理者ではない場合は、以下のポリシーも指定します。

Allow group <グループ名> to manage repos in tenanc Allow group <グループ名> to use virtual-network-family in compartment <コンパートメント名> Allow group <グループ名> to manage functions-family in compartment <コンパートメント名> Allow group <グループ名> to read metrics in compartment <コンパートメント名>

FnからOCIRにアップロードするために利用するOCI CLIコマンドを、「OCI CLIの利用方法」の記事を参考にインストールします。

Fn設定

1.Fnのインストール

以下のコマンドでFnをインストールします。

$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh $ fn version

2.コンテキストの作成と設定

OCIに接続するためのYAML形式の設定ファイルを格納するためのディレクト、ファイルを作成するためのコンテキストを作成します。

$ fn create context <コンテキスト名> --provider oracle $ fn ls contexts $ fn use context <コンテキスト名> $ fn ls contexts $ cd ~/.fn/contexts $ vi <コンテキスト名>.yaml api-url: "<APIエンドポイント名>" oracle.compartment-id: <OCIコンソールのコンパートメントOCID> provider: oracle registry: "<OCIRエンドポイント名>/<テナント名>/<任意のレジストリ名>" ex)registry: "nrt.ocir.io/testtest/oci-function" oracle.profile: DEFAULT ※OCI CLIで指定したプロファイル名

<OCIRエンドポイント名>はオラクル公式ドキュメント「コンテナ・レジストリの準備」をご覧ください </ocirエンドポイント名>

3.アクセストークンの作成

$ oci iam auth-token create --user-id <ユーザOCID> --description function

※上記コマンド実行後、OCIコンソールからユーザ名 > 認証トークン へ推移し、作成されていることを確認

4.Dockerへのログイン

$ sudo docker login nrt.ocir.io -u <OCIR名>/<ユーザID>

※IDCSユーザの場合、<ユーザID>は以下のように指定します
ex)oracleidentitycloudservice/test@test.com
上記コマンド実行後に、パスワードを求められるため、3-3.アクセストークンの作成で作成したトークンを指定します。

FunctionとAppの作成

以下のコマンドで、FnのAppを作成していきます。

$ fn list apps ※Appがないことを確認

OCIコンソールで開発者サービス>アプリケーションから新規にAppを作成

$ fn list apps ※作成したAppが表示されることを確認 $ mkdir ~/fn_functions/ $ cd ~/fn_functions/

以下のコマンドでファンクションのテンプレートを作成します。
今回はPythonのテンプレートを作成します。

$ fn init --runtime <FDK> <ファンクション名> ex)fn init --runtime python testfunc
Tips!

Functionは、以下の言語で記述することができ、Functionを構成することから、FDK(Function Deployment Kit)と呼ばれています。

  • 公式でサポートされている言語:Go、Java、Python、Ruby、Node.js
  • コミュニティでサポートされている言語:C#、.NET Core

テンプレート作成後、以下の3つのファイルが作成されます。

  • func.py:実際に実行するスクリプトファイル
  • func.yaml:Functionの設定を記載するファイル
  • requirements.txt:Pythonが呼び出すモジュールなどを指定

また、Functionを利用できるようにするためのDockerFileが内部的に作成されます。
明示的にDockerFileを作成し、Functionの環境に適用することも可能です。

以下のコマンドでファンクションの実行結果をCLI上で確認します。

$ fn invoke piacodev_app piacodev-func

出力例){"message": "Hello World"}

以下のコマンドで先ほどOCIコンソール上に追加したAppにファンクションを追加します。
※ファンクションはOCIコンソールの開発者サービス>OCIRのルートコンパートメントに保存されます。

$ fn -v deploy --app piacodev_app

APIGW作成

OCIコンソールの開発者サービス>ゲートウェイ>ゲートウェイの作成からAPIGWを作成していきます。

  • 名前 :<任意のAPIGW名>
  • タイプ:パブリックorプライベートから選択

次に、作成したAPIGWの中で作成するデプロイメントを作成していきます。
デプロイメントでAPIエンドポイントのパスの作成やメソッド、アプリケーションを選択していきます。

  • 名前   :<デプロイメント名>
  • パス接頭辞   :<任意のパス>
  • コンパートメント :<コンパートメント名>
  • パス   :<任意のパス>
  • メソッド     :GET、POST
  • タイプ     :Oracle Functions
  • アプリケーション :<app名></app名>
  • ファンクション :<ファンクション名>

ブラウザからアクセスして確認

OCIコンソール上で作成したAPIGWから、デプロイメントのエンドポイントをコピーし、デプロイメントで指定したパスを設定します。

ブラウザからアクセスして確認

無事に確認できました!

まとめ

今回はAPIGWでのFunctionsを呼び出す具体的な方法についてご紹介しました。
次回はOCI MySQLサービスとOracle Functionsの連携方法についてご紹介したいと思います!
最後までお読みいただき、ありがとうございました🙇


RECENT POST「OCIサービス紹介」の最新記事


OCIサービス紹介

テリロジーが提供しているOCIの4つのサービス

OCIサービス紹介

Oracle FunctionsのスクリプトをAPIGW経由で確認 Part1

OCIサービス紹介

OCIのDNSサービス

OCIサービス紹介

OCI上のKubernetes(OKE) のカスタム作成方法

Oracle FunctionsのスクリプトをAPIGW経由で確認 Part2