こんにちは。平田です。
OpenShiftでサーバレス(Function as a Service)を実現する仕組みであるOpenShift Cloud Functionsを試してみます。
OpenShift Cloud Functionsは、OpenShiftにサーバレス実行環境を追加するもので、オープンソースのサーバレス実行環境であるOpenWhiskを使用します。OpenWhisk on OpenShiftプロジェクトのREADMEを参考に、ローカルのminishift環境に導入します。
- minishift環境を起動します。私はRed Hat CDKのものを使いました。
minishift start --memory 4GB --username <Red Hatアカウント> --password <パスワード>
- 試した時点(2018年6月)ではminishiftにバグがあるらしく、ネットワーク設定を変更する手順が記載されているので、これを実行します。
minishift ssh -- sudo ip link set docker0 promisc on minishift openshift config set --patch \ '{"admissionConfig": {"pluginConfig": {"openshift.io/ImagePolicy": {"configuration": {"apiVersion": "v1", "kind": "ImagePolicyConfig", "resolveImages": "AttemptRewrite"}}}}}'
- サーバレス基盤であるOpenWhisk環境を構築するテンプレートを使い、必要なPodを作ります。
oc login $(minishift console --url) --username admin --password password oc new-project openwhisk oc process -f https://git.io/openwhisk-template | oc create -f -
- Podが起動すれば構築完了です。
構築したOpenWhisk環境で、Node.jsの関数を実行してみます。
- READMEの Using wsk を参考に、APIキーをセットします。READMEでは systemというユーザのキーをセットしていますが、手元の環境では動作しませんでした。ここではguestを使用します。
AUTH_SECRET=$(oc get secret whisk.auth -o yaml | grep "guest:" | awk '{print $2}' | base64 --decode) wsk property set --auth $AUTH_SECRET --apihost $(oc get route/openwhisk --template="{{.spec.host}}")
- 以下の内容で hello.js を作ります。
function main(params) { var name = params.name || 'World'; return {payload: 'Hello, ' + name + '!'}; }
- hello.jsを登録します。自己証明書の検証をスキップする -i オプションをつけています。
wsk action -i create hello hello.js
- 実行してみます。
wsk action -ir -p name Ironman invoke hello { "payload": "Hello, Ironman!" }