OracleFunctionsのセットアップ手順を記載します。
Fn,OracleFunctionsについて、どんなものかメモ書きを掲載したのでよろしければご覧下さい。
・Oracle Functionsに関するメモ
参考:
クイックスタート
OCI設定
現在Phoenixリージョンのみサービスが提供されているため、OCIコンソール上でus-phoenix-1
を選択してください。
※2019/08/01現在、サービスが公開されているためどのリージョンでもよいです。
グループとユーザの作成
Oracle Functions を利用するユーザと、ユーザが所属するグループを作成します。
既存ユーザでもよいと思いますが、ユーザをグループに追加するのを忘れずにしてください。
・グループ作成
Identity > Groups > Create Groupより
Name: Fn-Group (任意)
Description: Fn-Group (任意)
上記入力し「Submit」を押す。
・ユーザ作成
Identity > Users > Create Userより
Name: fn-user (任意)
Description: fn-user (任意)
上記入力し「Submit」を押す。
ユーザ一覧より作成したユーザをクリックし、左下Groups > Add User to Groupより
先程作成したグループを選択し「Add」を押す。
コンパートメントの作成
コンパートメントも同様にOracleFunctions用のものを作成します。
Identity > Compartments > Create Compartmentより
Name: fn-compartment (任意)
Description: fn-compartment (任意)
VCNとSubnet作成
作成したコンパートメント内に VCNを作成します。
インターネットゲートウェイを作成し、ルートテーブルをインターネットゲートウェイへのトラフィックを許可するように設定します。
検証用であればチュートリアルのように、Create Virtual Cloud Network Plus Related Resources
で
自動で作成してもよいかもしれません。
IAMポリシーの作成
作成したグループにFaaS(Oracle Functions)サービスが操作できるようポリシーの設定を行います。
Identity > Policies > 左下COMPARTMENTでルートコンパートメントを選択 >Create Policyより
Name: fn-policy(任意)
Description: fn-policy(任意)
以下Policy Statementsを追加して「create」
Allow group <1で作成したグループ名> to manage repos in tenancy
Allow service FaaS to read repos in tenancy
左下COMPARTMENTで今回作成したコンパートメントを選択 > Create Policyより
Name: fn-policy(任意)
Description: fn-policy(任意)
以下Policy Statementsを追加して「create」
Allow group <1で作成したグループ名> to manage functions-family in compartment <2で作成したコンパートメント名>
Allow group <1で作成したグループ名> to manage vnics in compartment <2で作成したコンパートメント名>
Allow group <1で作成したグループ名> to inspect subnets in compartment <2で作成したコンパートメント名>
Allow service FaaS to use virtual-network-family in compartment <2で作成したコンパートメント名>
Auth tokenの生成
Identity > Users > 先程作成したユーザ選択 > 左下Auth Tokens > Generated Token
※GENERATED TOKENで表示されるパスワードは後程必要になるため必ずメモに控えて下さい!!
開発環境の構築
ファンクション開発環境を構築するためサーバをたてます。
サーバはクラウド上でもローカルの仮想環境でもよいとのこと。
今回PhoenixリージョンにOracle Linux Server 7.6を立て、簡単な初期設定(yum update、selinux、firewalld無効、タイムゾーン設定)をした後の作業です。
OCI CLIインストール
以下rootユーザで基本デフォルト設定のままセットアップしていきます。適宜環境に合わせてください。
・インストール
# bash -c "$(curl ?L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"
以下インストール先ディレクトリ、設定ファイルに関する質問が表示される。
===> In what directory would you like to place the install? (leave blank to use '/root/lib/oracle-cli'): そのままEnter
===> In what directory would you like to place the 'oci' executable? (leave blank to use '/root/bin'): そのままEnter
===> In what directory would you like to place the OCI scripts? (leave blank to use '/root/bin/oci-cli-scripts'): そのままEnter
===> Currently supported optional packages are: ['db (will install cx_Oracle)']
What optional CLI packages would you like to be installed (comma separated names; press enter if you don't need any optional packages)?: そのままEnter
===> Modify profile to update your $PATH and enable shell/tab completion now? (Y/n): y
===> Enter a path to an rc file to update (leave blank to use '/root/.bashrc'): そのままEnter
確認
# oci -v
2.5.19
・セットアップ
こちらも鍵の作成など一旦デフォルトで設定。
# oci setup config
以下設定ファイル、OCIDなど指定
Enter a location for your config [/root/.oci/config]: そのままEnter
Enter a user OCID: 今回作成したユーザのOCIDをコピー貼り付け (OCIコンソールメニューIdentity>Usersより確認)
Enter a tenancy OCID: fullenergy120のテナンシーIDをコピー貼り付け (OCIコンソール右上の人マークより確認)
Enter a region (e.g. ca-toronto-1, eu-frankfurt-1, uk-london-1, us-ashburn-1, us-gov-ashburn-1, us-gov-chicago-1, us-gov-phoenix-1, us-langley-1, us-luke-1, us-phoenix-1): us-phoenix-1
Do you want to generate a new RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: y (別でも作成できるが、ここで作成してしまう)
Enter a directory for your keys to be created [/root/.oci]: そのままEnter
Enter a name for your key [oci_api_key]: そのままEnter
Enter a passphrase for your private key (empty for no passphrase): 鍵にパスフレーズ必要なければそのままEnter
・ユーザにAPI Keyを追加
# cat ~/.oci/oci_api_key_public.pem
-----BEGIN PUBLIC KEY-----
~ 公開鍵の内容が表示される。
-----END PUBLIC KEY-----
この公開鍵をコピーして、今回作成したユーザにAPI Keyを設定します。
OCIコンソール上にて、
Identity > Users > 該当ユーザ選択 > Add Public Key > コピーした公開鍵を貼り付けて「Add」
dockerインストール
・リポジトリ設定
# vi /etc/yum.repos.d/docker.repo
以下記載
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/oraclelinux/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
・インストール
# yum install docker-engine
# dockerd --version
Docker version 18.09.1-ol, build c3ab8a8
・起動、自動起動設定
# systemctl start docker.service
# systemctl enable docker.service
FN CLIインストール・設定
・インストール
# curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
# fn version
Client version is latest version: 0.5.84
Server version: ?
・コンテキスト設定
コンテキスト名は任意。ここではfn-context。
コンテキスト作成
# fn create context fn-context --provider oracle
使用するコンテキスト指定
# fn use context fn-context
コンテキストの一覧と、使用するコンテキストにアスタリスクが表示される。
# fn ls contexts
コンパートメントID指定
# fn update context oracle.compartment-id 今回作成したコンパートメントのID
使用するエンドポイント指定
# fn update context api-url https://functions.us-phoenix-1.oraclecloud.com
※上記PHOENIXリージョンの場合、東京リージョンの場合は以下
https://functions.ap-tokyo-1.oraclecloud.com
Docker Registry と Oracle Functions で使用するリポジトリの指定
# fn update context registry phx.ocir.io/テナンシー名/任意のリポジトリ名
※上記OCIRのリージョンコード phx.ocir.io の場合。
東京リージョンの場合は nrt.ocir.io です。
プロファイル指定
# fn update context oracle.profile DEFAULT
※OCI CLIインストール時に設定したプロファイル名を指定。cat ~/.oci/config で確認。ここではDEFAULTを使用しているがFn用に作成したほうがよい。
# docker login phx.ocir.io
Username: テナンシー名/今回作成したユーザ名
Password: ユーザに追加したAuth Tokenのパスワード
Login Succeededと表示されればOK。
※root以外のユーザで設定した場合、dockerに関するエラーで認証に失敗する。
その場合そのユーザをdockerグループに追加し、docker再起動する。
usermod -g docker グループに追加したいユーザ
systemctl restart docker.service
テスト関数実行
ブラウザで以下指定してOracle Functionのコンソール画面を開きます。
https://console.us-phoenix-1.oraclecloud.com/functions/
テスト用にアプリケーションを作成します。
※Oracle Functionsはアプリケーションという枠をまず作成し、そこに複数の関数を作成して管理します。
Create Applicationより
NAME: test-go
VCN: 今回作成したVCN
SUBNETS:PHX-AD-1から3まで指定
上記で「create」します。
作成後、Fnコマンドで操作します。
アプリケーション一覧表示
# fn list apps
NAME ID
※作成したアプリケーションが表示される。
作業用ディレクトリ作成
# mkdir ~/fn-test/
# cd ~/fn-test/
Goの初期ファンクションを作成。
# fn init --runtime go helloworld-func
ファンクションをDockerImageとしてBuildし、OCIRにPush。
# cd helloworld-func
# fn -v deploy --app 作成したアプリケーション名(今回はtest-go)
※-v オプションをつけたほうがデプロイ内容、進捗が確認できてよいと思います。
デプロイした関数の確認
# fn list functions test-go
# ファンクション呼び出し実行
fn invoke test-go helloworld-func
"Hello World !' が表示されること。
※初回は少し時間かかります(dockerコマンドがいろいろ走ってる?)。2回目以降はすぐ表示されます。
関数を編集したい場合、編集後にfn deployでデプロイし直せば反映されます。
今回はGoのテスト関数でしたが、サポートされている言語(fn initのオプションで現在選択できるもの)は以下になります。
go, java, java11, java8, kotlin, node, python, python3.6, python3.7.1, ruby
また以下関連記事のリンクにてOracle Functions,Fnの検証、作成例を掲載しています。
是非ご覧になって下さい。
関連記事
・Oracle FunctionsでAPEXのRestful Serviceと連携
・Oracle FunctionsでTensorFlowによる画像分類
・Oracle FunctionsでEmail Deliveryと連携しメール送信
・Oracle FunctionsでObject Storage操作 (テキストを格納・取得+テキストをPDFに変換)
・Fn Project - Fn Server構築 (Oracle Linux7.6)
・Oracle FunctionsでOCI Go SDKを使いインスタンス操作
・Fn Project - FnとAWS Lambda連携(近日掲載)