· 

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

こんにちは!テリロジーのY.Tです。

今回はOCIのOracleFunctionsを利用して作成したスクリプトの実行結果を、

OracleAPIGWに公開する具体的な手順についてご紹介したいと思います。

本手順ではOCI上に構築したUbuntu20のサーバに、Fnをインストールし、APIGWと連携させていきます。

 

目次:

1.Dockerのインストール

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

3.Fn設定

4.FunctionとAppの作成

5.APIGWの作成と確認

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

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

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の利用方法」の記事を参考にインストールします。

3.Fn設定

3-1.Fnのインストール

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

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

$ fn version

3-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エンドポイント名>はオラクル公式ドキュメント「コンテナ・レジストリの準備」をご覧ください

 

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

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

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

 

3-4.Dockerへのログイン

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

※IDCSユーザの場合、<ユーザID>は以下のように指定します

ex)oracleidentitycloudservice/test@test.com

上記コマンド実行後に、パスワードを求められるため、3-3.アクセストークンの作成で作成したトークンを指定します。

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

5.APIGW作成

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

名前 :<任意のAPIGW名>

タイプ:パブリックorプライベートから選択

 

次に、作成したAPIGWの中で作成するデプロイメントを作成していきます。

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

名前   :<デプロイメント名>

パス接頭辞   :<任意のパス>

コンパートメント :<コンパートメント名>

パス   :<任意のパス>

メソッド     :GET、POST

タイプ     :Oracle Functions

アプリケーション :<App名>

ファンクション :<ファンクション名>

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

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

無事に確認できました!

まとめ

今回はAPIGWでのFunctionsを呼び出す具体的な方法についてご紹介しました。

次回はOCI MySQLサービスとOracle Functionsの連携方法についてご紹介したいと思います!

最後までお読みいただき、ありがとうございました🙇