search
LoginSignup
5

More than 3 years have passed since last update.

posted at

updated at

Oracle Functions セットアップ

OracleFunctionsのセットアップ手順を記載します。

Fn,OracleFunctionsについて、どんなものかメモ書きを掲載したのでよろしければご覧下さい。
・Oracle Functionsに関するメモ

参考:
クイックスタート

OCI設定

現在Phoenixリージョンのみサービスが提供されているため、OCIコンソール上でus-phoenix-1を選択してください。
※2019/08/01現在、サービスが公開されているためどのリージョンでもよいです。

グループとユーザの作成

Oracle Functions を利用するユーザと、ユーザが所属するグループを作成します。
既存ユーザでもよいと思いますが、ユーザをグループに追加するのを忘れずにしてください。

・グループ作成
Identity > Groups > Create Groupより
キャプチャ.PNG
Name: Fn-Group (任意)
Description: Fn-Group (任意)
上記入力し「Submit」を押す。

・ユーザ作成
Identity > Users > Create Userより
キャプチャ2.PNG
Name: fn-user (任意)
Description: fn-user (任意)
上記入力し「Submit」を押す。

ユーザ一覧より作成したユーザをクリックし、左下Groups > Add User to Groupより
先程作成したグループを選択し「Add」を押す。
キャプチャ3.PNG

コンパートメントの作成

コンパートメントも同様にOracleFunctions用のものを作成します。
Identity > Compartments > Create Compartmentより
キャプチャ4.PNG
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より
キャプチャ5.PNG
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
Inkedキャプチャ6_LI.jpg
※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/
キャプチャ7.PNG

テスト用にアプリケーションを作成します。
※Oracle Functionsはアプリケーションという枠をまず作成し、そこに複数の関数を作成して管理します。
Create Applicationより
キャプチャ8.PNG
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連携(近日掲載)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5