OCI Functions は OCI のサーバーレス・アプリケーションを提供するサービスです。Functions のビルドや実行は Cloud Shell でやることが多いんですが、今回は OCI Compute の Oracle Linux 8 に環境を構築してみるやで。
彡(゚)(゚)
下記マニュアルの「C.ローカルホスト開発環境を設定する」を参考にしながら進めます。
ローカル・ホストでのファンクションのクイックスタート
https://docs.oracle.com/ja-jp/iaas/Content/Functions/Tasks/functionsquickstartlocalhost.htm#functionsquickstartlocalhost
環境構築のマニュアル本体は下記となります。
Compute や Network の構成は下記記事を前提としています。
1. podman と podman-docker のインストール
マニュアルでは Docker をインストールしていますが、Fn は podman をサポートしているので今回は podman をインストールします。
sudo dnf -y install podman
sudo dnf -y install podman-docker
docker versionコマンドで結果を確認します。
[opc@ays-prv-compute02 ~]$ docker version
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
Client: Podman Engine
Version: 4.9.4-rhel
API Version: 4.9.4-rhel
Go Version: go1.21.13 (Red Hat 1.21.13-2.module+el8.10.0+90407+20770c94)
Built: Tue Sep 24 15:46:08 2024
OS/Arch: linux/amd64
[opc@ays-prv-compute02 ~]$
2. OCI CLI のインストールと設定
OCI CLI をインストールして構成します。APIキーの登録など OCI CLI のセットアップは色々な記事があるので詳細は割愛します。
sudo dnf -y install oraclelinux-developer-release-el8
sudo dnf install python36-oci-cli
oci setup config
下記辺りを参照すると良いです。
インストールと設定完了後に動作を確認します。下記では Object Storage の namespace を取得しています。
[opc@ays-prv-compute02 ~]$ oci os ns get
{
"data": "xxxxxxxxxxxx"
}
[opc@ays-prv-compute02 ~]$
3. Fn Project CLI のインストール
下記マニュアルに従って Compute に Fn Project CLI をインストールします。
Fn ProjectのCLIのインストール
https://docs.oracle.com/ja-jp/iaas/Content/Functions/Tasks/functionsinstallfncli.htm
まずインストール前に .bashrc の PATH に /usr/local/bin を追加して読み込みます。ここにパスを通しておかないとこの後の fn のインストールでエラーになります。
cd ~
vi .bashrc
【.bashrc に export PATH="$PATH:/usr/local/bin" を追記】
source .bashrc
下記コマンドで fn をインストールします。
curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
インストール完了後に fn versionコマンドでバージョンを確認します。
[opc@ays-prv-compute02 ~]$ fn version
Client version is latest version: 0.6.34
Server version: ?
[opc@ays-prv-compute02 ~]$
4. Container Registry の作成
Functions のビルド・イメージを格納する Container Tegistry を作成します。左上のハンバーガー・メニュー → Developer Services → Containers&Artifacts → Container Registry で遷移して Create Repository で作成します。
5. Functions の Getting Started(Local setup) の実行
Functions の画面に遷移して Getting Started の Local setup を実行していきます。基本はコピペで OK ですが注意事項がある手順は補足します。
fn init の言語は何でも良いのですが、ここでは java を選択します。
fn init --runtime java my-func
ディレクトリが自動作成されるので移動します
cd my-func
コンテキストの作成と使用を宣言します。
fn create context ayu-compartment01 --provider oracle
fn use context ayu-compartment01
コンテキストのコンパートメントOCID と API URL をアップデートします。
fn update context oracle.compartment-id ocid1.compartment.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxx
fn update context api-url https://functions.us-phoenix-1.oraclecloud.com
コンテキストの使用リポジトリをアップデートします。
fn update context registry phx.ocir.io/<ネームスペース名>/<4. で作成したリポジトリ名>
リポジトリのログインに必要な認証トークンを発行します。下記マニュアルを参照して下さい。初めに発行すると再度参照できないので紛失しないようにして下さい。
dockerコマンドでリポジトリにログインします。ここの注意事項は OCI IAM Identity Domainでフェデレーションしているユーザーの場合、oracleidentitycloudservice をネームスペース名とユーザー名の間に挿し込む必要があります。 ハマリポイントでした…。
docker login -u '<ネームスペース名>/<ユーザー名>' phx.ocir.io
または
docker login -u '<ネームスペース名>/oracleidentitycloudservice/<ユーザー名>' phx.ocir.io
テナンシがOracle Identity Cloud Serviceとフェデレートされている場合は、/oracleidentitycloudservice/の書式を使用します。
アプリケーションをビルドするのですが、その前に Fn のコンテナエンジンを Docker から Podman に変更します。
Fn Projectでは、Dockerの代替としてPodmanもサポートされています……
(中略)…container-enginetype構成設定を~/.fn/config.yamlファイルに追加します。
マニュアル記載の通り ~/.fn/config.yaml を編集して保存します。
vi ~/.fn/config.yaml
【container-enginetype を podman に変更して保存】
アプリケーションをビルドして Functions にデプロイします。
fn deploy --app ayu-functions1
Functions にデプロイされたアプリケーションを実行します。
fn invoke ayu-functions1 my-func
以下のように Hello, world! が表示されれば成功です。
[opc@ays-prv-compute02 my-func]$ fn invoke ayu-functions1 my-func
Hello, world!
[opc@ays-prv-compute02 my-func]$
6. まとめ
やんごとなき事情により Compute(Oracle Linux) に Functions(fn) のビルド/実行環境を構築しました。Custom Image とかでもっと手軽に作りたいもんですが Cloud Shell や手元の WLS とかで事足りるから要らないのかな。
彡(^)(^)