OpenFaas の新規 Faunction を作成してみた。
プロジェクトを作成する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| $ faas-cli new helloworld --lang node 2020/10/08 23:29:19 No templates found in current directory. 2020/10/08 23:29:19 Attempting to expand templates from https://github.com/openfaas/templates.git 2020/10/08 23:29:22 Fetched 12 template(s) : [csharp dockerfile go java11 java11-vert-x node node12 php7 python python3 python3-debian ruby] from https://github.com/openfaas/templates.git Folder: helloworld created. ___ _____ ____ / _ \ _ __ ___ _ __ | ___|_ _ __ _/ ___| | | | | '_ \ / _ \ '_ \| |_ / _` |/ _` \___ \ | |_| | |_) | __/ | | | _| (_| | (_| |___) | \___/| .__/ \___|_| |_|_| \__,_|\__,_|____/ |_|
Function created in folder: helloworld Stack file written: helloworld.yml
Notes: You have created a new function which uses Node.js 12.13.0 and the OpenFaaS Classic Watchdog.
npm i --save can be used to add third-party packages like request or cheerio npm documentation: https://docs.npmjs.com/
For high-throughput services, we recommend you use the node12 template which uses a different version of the OpenFaaS watchdog.
|
ディレクトリー構成
1 2 3 4 5
| +- helloworld | +- handler.js | +- package.json +- helloworld.yml +- template
|
helloworld.yml
1 2 3 4 5 6 7 8 9
| version: 1.0 provider: name: openfaas gateway: http://127.0.0.1:8080 functions: helloworld: lang: node handler: ./helloworld image: helloworld:latest
|
helloworld/handler.js
1 2 3 4 5
| "use strict"
module.exports = async (context, callback) => { return {status: "done"} }
|
helloworld/package.json
1 2 3 4 5 6 7 8 9 10 11 12
| { "name": "function", "version": "1.0.0", "description": "", "main": "handler.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" }
|
ビルドする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
| $ faas-cli build -f helloworld.yml --tag latest [0] > Building helloworld. Clearing temporary build folder: ./build/helloworld/ Preparing: ./helloworld/ build/helloworld/function Building: helloworld:latest with node template. Please wait.. Sending build context to Docker daemon 10.24kB Step 1/24 : FROM openfaas/classic-watchdog:0.18.1 as watchdog 0.18.1: Pulling from openfaas/classic-watchdog ff01b6ed694a: Pulling fs layer ff01b6ed694a: Verifying Checksum ff01b6ed694a: Download complete ff01b6ed694a: Pull complete Digest: sha256:35bda3fcffdd89c21f990f240434799901c80627280eca86eec56db71b8bb30d Status: Downloaded newer image for openfaas/classic-watchdog:0.18.1 ---> 94b5e0bef891 Step 2/24 : FROM node:12.13.0-alpine as ship 12.13.0-alpine: Pulling from library/node 89d9c30c1d48: Pulling fs layer cb4880ccba47: Pulling fs layer abc31ffc07f9: Pulling fs layer 2137f333b9e3: Pulling fs layer 2137f333b9e3: Waiting abc31ffc07f9: Verifying Checksum abc31ffc07f9: Download complete 2137f333b9e3: Verifying Checksum 2137f333b9e3: Download complete 89d9c30c1d48: Verifying Checksum 89d9c30c1d48: Download complete 89d9c30c1d48: Pull complete cb4880ccba47: Verifying Checksum cb4880ccba47: Download complete cb4880ccba47: Pull complete abc31ffc07f9: Pull complete 2137f333b9e3: Pull complete Digest: sha256:ae1822c17b0087cb1eea794e5a293d56cc1fe01f01ef5494d0687c1ef9584239 Status: Downloaded newer image for node:12.13.0-alpine ---> 69c8cc9212ec Step 3/24 : COPY --from=watchdog /fwatchdog /usr/bin/fwatchdog ---> 0d8cef32e5ce Step 4/24 : RUN chmod +x /usr/bin/fwatchdog ---> Running in 84ddf13b5fbb Removing intermediate container 84ddf13b5fbb ---> b7ff78b8de4e Step 5/24 : RUN addgroup -S app && adduser app -S -G app ---> Running in 8c5280c36c8a Removing intermediate container 8c5280c36c8a ---> adf3b4c4ad47 Step 6/24 : WORKDIR /root/ ---> Running in bb7b88bcddaf Removing intermediate container bb7b88bcddaf ---> 964f0842c13f Step 7/24 : ENV NPM_CONFIG_LOGLEVEL warn ---> Running in dd2943d1faa7 Removing intermediate container dd2943d1faa7 ---> d96b345eea76 Step 8/24 : RUN mkdir -p /home/app ---> Running in 594a762249d0 Removing intermediate container 594a762249d0 ---> 083e98320980 Step 9/24 : WORKDIR /home/app ---> Running in 5a89fcb009ee Removing intermediate container 5a89fcb009ee ---> e531d77c5346 Step 10/24 : COPY package.json ./ ---> 7df42d225567 Step 11/24 : RUN npm i --production ---> Running in 494f5f11a208 npm WARN NodejsBase@1.0.0 No description npm WARN NodejsBase@1.0.0 No repository field.
added 1 package from 1 contributor and audited 1 package in 3.15s found 0 vulnerabilities
Removing intermediate container 494f5f11a208 ---> 913b9492cd65 Step 12/24 : COPY index.js ./ ---> 81889e9d110f Step 13/24 : WORKDIR /home/app/function ---> Running in 9c7866e8887b Removing intermediate container 9c7866e8887b ---> 786993c20bbd Step 14/24 : COPY function/*.json ./ ---> 90ff8572ec31 Step 15/24 : RUN npm i --production || : ---> Running in 02796559aa72 npm WARN function@1.0.0 No description npm WARN function@1.0.0 No repository field.
up to date in 1.098s found 0 vulnerabilities
Removing intermediate container 02796559aa72 ---> 14c02000daae Step 16/24 : COPY --chown=app:app function/ . ---> 78fc7a0cf672 Step 17/24 : WORKDIR /home/app/ ---> Running in 52899ad11fa2 Removing intermediate container 52899ad11fa2 ---> e7e44e1df539 Step 18/24 : RUN chmod +rx -R ./function && chown app:app -R /home/app && chmod 777 /tmp ---> Running in 5c73572cb3d0 Removing intermediate container 5c73572cb3d0 ---> f6775e90aba9 Step 19/24 : USER app ---> Running in 911209957ac3 Removing intermediate container 911209957ac3 ---> fcf1749a262c Step 20/24 : ENV cgi_headers="true" ---> Running in ea9063d5f220 Removing intermediate container ea9063d5f220 ---> 62fe360f6f83 Step 21/24 : ENV fprocess="node index.js" ---> Running in d8bd69571b46 Removing intermediate container d8bd69571b46 ---> 3a6b49cd10ac Step 22/24 : EXPOSE 8080 ---> Running in 0241fc8252d9 Removing intermediate container 0241fc8252d9 ---> 71d6a75cac8e Step 23/24 : HEALTHCHECK --interval=3s CMD [ -e /tmp/.lock ] || exit 1 ---> Running in 986fcb66d56a Removing intermediate container 986fcb66d56a ---> db0f922c3436 Step 24/24 : CMD ["fwatchdog"] ---> Running in 1a2ee6e69f1d Removing intermediate container 1a2ee6e69f1d ---> 4634303e208d Successfully built 4634303e208d Successfully tagged helloworld:latest Image: helloworld:latest built. [0] < Building helloworld done in 271.32s. [0] Worker done.
Total build time: 271.32s
|
OpenFaas では、リクエストとレスポンスを管理するために Watchdog という仕組みが提供されている。
実行ログから Wathcdog として classic-watchdog をイメージを使用していることがわかる。また、コンテナが起動すると Watchdog のコマンドである fwatchdog プロセスを起動して動作を管理していることもわかる。
Docker イメージが生成されていることを確認する
1 2 3
| $ sudo docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE helloworld latest 4634303e208d 2 minutes ago 96MB
|
OpenFaaS にデプロイする
1 2 3 4 5 6
| $ faas-cli deploy -f helloworld.yml Deploying: helloworld. WARNING! Communication is not secure, please consider using HTTPS. Letsencrypt.org offers free SSL/TLS certificates.
Deployed. 202 Accepted. URL: http://127.0.0.1:8080/function/helloworld.openfaas-fn
|
デプロイ結果を確認する
管理画面でデプロイ結果を確認する
ブラウザーで管理画面にアクセスすると、デプロイされていることを確認できる。
Function の一覧に作成した Function 名が表示されている
Function 名をクリックすると詳細が表示される
faas-cli list コマンドでデプロイ結果を確認する
コマンドラインからは、faas-cli list コマンドでデプロイされている Function の一覧が表示される。
1 2 3
| $ faas-cli list Function Invocations Replicas helloworld 1 1
|
Function を実行する
faas-cli invoke コマンドで Function を実行する
fass-cli invoke で Fucntion を実行できる。標準入力に与えた内容が FUnction に送られ、その結果が標準出力に表示される。
1 2 3
| $ faas-cli invoke helloworld Reading from STDIN - hit (Control + D) to stop. {"status":"done"}
|
管理画面で Function を実行する
Function の詳細画面にある[INVOKE] ボタンをクリックすると、Fucntion が実行され、結果が表示される。
curl で Function を実行する
curl で <OpenFaaS ゲートウェイ>/function/<Function 名> で Fucntion を実行できる。
curl 172.23.155.62:8080/function/helloworld
{“status”:”done”}
Fucntion に引数を渡すには、 -d オプションまたは –data オプションで指定する。
curl 172.23.155.62:8080/function/helloworld -d ‘key=value’
INVOKE 回数を確認する
faas-cli list で Function が INVOKE された回数を確認できる。
1 2 3
| $ faas-cli list Function Invocations Replicas helloworld 4 1
|
デプロイされた Function を削除する
デプロイできたの今度は、Function を削除してみる。
1 2 3
| $ faas-cli remove -f helloworld.yml Deleting: helloworld.openfaas-fn Removing old function.
|
Function の一覧から Function 名が削除されている。