こんにちは!テリロジーの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
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の連携方法についてご紹介したいと思います!
最後までお読みいただき、ありがとうございました🙇
- カテゴリ:
- OCIサービス紹介