OCIにおけるサーバレスAPI環境の構築方法~第2回~

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

今回はインスタンスの構築(後編)として、Fn Projectのインストールからセットアップまでを紹介したいと思います。

それでは構築を進めていきます。

Fn Projectのインストール

サーバにFn Projectをインストールします。

Fn ProjectとはOCIでFaaSの環境を構築するためのフレームワークで、Fn Projectを用いる事でサーバレスなアプリケーションの実行環境を構築する事ができます。

インストールとセットアップは以下の順で実施します。

  1. インストール
  2. コンテキストの作成と設定
  3. Tokenの登録
  4. アプリケーションの作成
  5. ファンクションの作成
  6. デプロイと動作確認
  7. トリガーの作成

それでは、Fn Projectのインストールからセットアップまでを進めていきます。

1. インストール

次のコマンドでインストールします。

インストールが完了するとFnというアスキーアートとインストールされたバージョンが表示されます。(※4)

※5 インストール完了時のアスキーアート

インストール完了時のアスキーアート

2. コンテキストの作成

次にコンテキストを作成します。
コンテキストを切り替える事で開発する環境を切り替える事ができます。
次のコマンドを実行してコンテキストと作成します。
OCI上に展開するのでoci、providerの引数にはOracle functionsで動かすためoracleと指定します。

  • 実行するコマンド
    $ fn create context oci --provider oracle

次に設定を行います。
設定はfnコマンドでも実施できますが、手間なので直接設定ファイルを作成してしまいます。

  • 実行するコマンド
    $ vi /ホームディレクトリ/.fn/contexts/oci.yaml
  • 書き込む内容
    api-url: https://functions.ap-tokyo-1.oraclecloud.com
    oracle.compartment-id: テナンシーOCID
    oracle.profile: DEFAULT
    provider: oracle
    registry: nrt.ocir.io/テナンシーOCID /function

保存して設定ファイルの作成は完了です。

3. Tokenの登録

次にOCIに接続するアカウントにTokenを登録します。
Tokenの登録はociコマンドで実行します。

  • 実行するコマンド
    oci iam auth-token create --user-id ユーザのOCID--description this_is_description

Tokenの登録が成功するとコンソールにJCONフォーマットでメッセージが表示されます。(※5)
“token”のところに書かれた文字は後で使用するのでコピーしておいてください。

※6 Token登録時の出力

Token登録時の出力

また、OCIのアカウントの詳細画面(※6)からもTokenが登録されたことが確認できます。

※7 アカウントの詳細画面

アカウントの詳細画面

次に登録したTokenでOCIのコンテナ・レジストリにログインできるか確認します。
dockerコマンド でOCIのコンテナへログインしてみます。

  • 実行するコマンド
    $ docker login nrt.ocir.io -u コンテナ・レジストリのネームスペース/OCIのアカウント

コマンドを実行するとパスワードを求められますので、③でコピーしたtokenの値を入力します。
これでDockerからOCIのコンテナ・レジストリにログインできるようになります。

ネームスペースはOCIのWebコンソールから確認できます。
以下を参照してください。(※7)

※8 コンテナ・レジストリの画面

コンテナ・レジストリの画面

4. アプリケーションの作成

ここからはFn Projectの設定になります。
Fn Projectで使用するアプリケーションを作成します。
アプリケーションの登録はOCIのWebコンソールからも行う事はできますが、OCIのコンテナ・レジストリにプッシュする前に動作確認するための環境を作成したいので、ここではOCIのWebコンソールを使用せずfnコマンドで作成します。
“3.アプリケーション”でアプリケーションの登録時にOCIのWebコンソールに表示されるスタート・ガイドと同じ事をここで実施します。

  • 実行するコマンド
    $ fn create app アプリケーション名

5. ファンクッションの作成

続いてファンクションを作成します。
ファンクションを作成すると引数で指定したファンクション名のディレクトリが作成され、その中にデプロイに必要なファイルが作成されます。
ランタイム言語としてjava、python、nodeといった言語がサポートされているのでpythonを選択します。

  • 実行するコマンド
    $ fn init --runtime python ファンクション名

作成が成功するとカレントディレクトリに、ファンクション作成時に引数で指定したファンクション名のディレクトリが作成されています。

ディレクトリ内には次の3つのファイルが作成されています。
func.py                :サンプルのpythonプログラム
func.yaml            :コンテナを生成する際の設定ファイル
requirements.txt:コンテナを生成する際にインストールするモジュールを指定するファイル

またdockerと同じでDockefileを利用する事ができるのでコンテナの設定やパッケージのインストールを行う事も可能です。

6. デプロイと動作確認

テストでサンプルのままイメージを作成してみます。
デプロイをするには別のターミナルを起動させ、新しいターミナルでfnサーバを起動させます。

  • 実行するコマンド
    $ fn start --log-level DEBUG

--log-level DEBUG を付けて実行するとコンテナ実行時にプログラムのエラーが表示されるのでテストする際はおススメです。

fnサーバを起動させると大量にメッセージが表示されるので、停止するのを待ちます。
メッセージの出力が停止したら次のデプロイコマンドを実行します。

  • 実行するコマンド
    $ fn --verbose deploy --app アプリケーション名 --local

デプロイが完了すると” Successfully”と表示されます。
この辺りはdockerと同じです。
デプロイが完了したらアクセスしてみます。

  • 実行するコマンド
    $ fn invoke アプリケーション名 ファンクション名

コンソールに”{"message": "Hello World"}”が出力されるはずです。
これでローカル環境のデプロイは完了しました。

7. トリガーの作成

Fn ProjectではトリガーというURLでアクセスさせる機能もありますので、その設定を行います。
トリガーを設定するとcurlでアクセスできるようになります。

  • 実行するコマンド
    $ fn create trigger アプリケーション名 ファンクション名local --type http --source URLのパス

トリガーが正常に作成できたらcurlでアクセスしてみます。
curlでアクセスすると⑥のfn invokeでアクセスした時と同じ結果が返ってくるはずです。

  • 実行するコマンド
    $ curl -H "Content-Type: application/json" -X POST 'http://localhost:8080/t/アプリケーション名/トリガー作成時に指定したパス'

次からはローカルにデプロイしたコンテナをOCIのコンテナ・レジストリへプッシュしてネットワーク経由でアクセスできるようにしていきます。

今回はここまでとなります。
次回はコンテナイメージをOCIのコンテナ・レジストリにプッシュ、コンテナイメージの登録を記事にします。


RECENT POST「技術情報」の最新記事


技術情報

OCVS・Horizon構築してみた②

技術情報

Sumologicで目にするOpen Telemetry Collectorとは(中編)

技術情報

Sumo Logic アカウントを持っていないユーザへのダッシュボードの共有方法は?

技術情報

Sumo Logic ダッシュボードやフォルダ共有について

OCIにおけるサーバレスAPI環境の構築方法~第2回~