LoginSignup
16
5

More than 3 years have passed since last update.

Oracle Functions セットアップ

Last updated at Posted at 2019-07-22

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連携(近日掲載)

16
5
0

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
  3. You can use dark theme
What you can do with signing up
16
5