为了获取一个私有化的 AWS Lambda,我尝试使用 OpenFaaS 来进行测试(使用swarm)
最近,我试用了OpenFaaS,为了使用自己的FaaS构建系统的想法。
打开FaaS。
几乎和这里一样。
docker swarm init
git clone https://github.com/openfaas/faas
cd faas
./deploy_stack.sh
-
- サーバが立ち上がって、Basic認証の user と password が表示されるのでチェック。
deploy_stack.sh の中を見ると、 docker stack deploy func –compose-file docker-compose.yml を最後で呼んでる。
Basic 認証が有効らしい export BASIC_AUTH=”true”
Basic 認証の情報が出力される echo “[Credentials]\n username: admin \n password: $secret\n echo -n “$secret” | faas-cli login –username=admin –password-stdin”
基本的认证信息以这样的形式输出。记住了。当访问管理界面时,在浏览器上或部署时都是必需的。
[Credentials]
username: admin
password: 9c6208072a2389f1a9451c7fefbd2545e39bdf0a1d6cad5fd83d84f045fae173
echo -n 9c6208072a2389f1a9451c7fefbd2545e39bdf0a1d6cad5fd83d84f045fae173 | faas-cli login --username=admin --password-stdin
当运行docker ps命令时,会看到类似这样的输出。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
98d484de2d2a openfaas/faas-swarm:0.4.4 "./faas-swarm" 50 seconds ago Up 49 seconds 8080/tcp func_faas-swarm.1.un383dnfpqk1h5cd2c7bdn7co
62a944864920 openfaas/gateway:0.9.10 "./gateway" 54 seconds ago Up 53 seconds 8080/tcp func_gateway.1.iqgnmze692cleburpvw5jh9pc
fcfbcd09c3bd prom/alertmanager:v0.15.0 "/bin/alertmanager -…" 58 seconds ago Up 57 seconds 9093/tcp func_alertmanager.1.04pes9jdabhxm9w8aapdxf2z4
eea4efca8daa prom/prometheus:v2.3.1 "/bin/prometheus --c…" About a minute ago Up About a minute 9090/tcp func_prometheus.1.bwl1j63bjmxv7ixl25j99ez3n
dc8c546038ef openfaas/queue-worker:0.5.4 "./app" About a minute ago Up About a minute 8080/tcp func_queue-worker.1.nnlvo3ixpc5rf5f65hzhdb2qh
893e162a290f nats-streaming:0.11.2 "/nats-streaming-ser…" About a minute ago Up About a minute 4222/tcp, 8222/tcp func_nats.1.g33o99phxe0gx3ubt4625ih57
安装 OpenFaaS 的命令行工具 (CLI)。
curl -sSL https://cli.openfaas.com | sh
在执行上述命令安装时,会出现以下提示(在 Mac 一般用户执行时)。因此,按照提示执行了两个命令。
=========================================================
== As the script was run as a non-root user the ==
== following commands may need to be run manually ==
=========================================================
sudo cp faas-cli-darwin /usr/local/bin/faas-cli
sudo ln -sf /usr/local/bin/faas-cli /usr/local/bin/faas
使用faas-cli version命令来检查版本。
___ _____ ____
/ _ \ _ __ ___ _ __ | ___|_ _ __ _/ ___|
| | | | '_ \ / _ \ '_ \| |_ / _` |/ _` \___ \
| |_| | |_) | __/ | | | _| (_| | (_| |___) |
\___/| .__/ \___|_| |_|_| \__,_|\__,_|____/
|_|
CLI:
commit: b24c5763d9b61e0c04018a722f8f2f765498f18a
version: 0.7.8
faas-cli 的帮助信息
Manage your OpenFaaS functions from the command line
Usage:
faas-cli [flags]
faas-cli [command]
Available Commands:
build Builds OpenFaaS function containers
cloud OpenFaaS Cloud commands
deploy Deploy OpenFaaS functions
describe Describe an OpenFaaS function
generate Generate Kubernetes CRD YAML file
help Help about any command
invoke Invoke an OpenFaaS function
list List OpenFaaS functions
login Log in to OpenFaaS gateway
logout Log out from OpenFaaS gateway
new Create a new template in the current folder with the name given as name
push Push OpenFaaS functions to remote registry (Docker Hub)
remove Remove deployed OpenFaaS functions
store OpenFaaS store commands
template Downloads templates from the specified github repo
up Builds, pushes and deploys OpenFaaS function containers
version Display the clients version information
Flags:
--filter string Wildcard to match with function names in YAML file
-h, --help help for faas-cli
--regex string Regex to match with function names in YAML file
-f, --yaml string Path to YAML file describing function(s)
Use "faas-cli [command] --help" for more information about a command.
功能创建
创建用于管理的目录。
mkdir functions
cd functions
新的功能
只是想尝试一下的话,
-
- faas-cli new の –prefix localhost:5000 はいらない
-
- Docker Registry もいらない
-
- faas-cli push もいらない
-
- faas-cli build の –tag latest はいらない
- new して build して、 OpenFaaS へのログインと deploy すればいい
只是那样而已。他似乎还有其他很多误会。
创建一个节点功能。由于本次使用了私有的Docker仓库,因此–prefix参数的指定十分重要。
faas-cli new hello-openfaas --lang node --prefix localhost:5000
用tree命令查看文件结构。
.
├── hello-openfaas
│ ├── handler.js
│ └── package.json
├── hello-openfaas.yml
└── template
猫 hello-openfaas.yml 已经打开。
provider:
name: faas
gateway: http://127.0.0.1:8080
functions:
hello-openfaas:
lang: node
handler: ./hello-openfaas
image: hello-openfaas:latest
猫表现出了对hello-openfaas/handler.js文件的兴趣。
"use strict"
module.exports = (context, callback) => {
callback(undefined, {status: "done"});
}
猫 hello-openfaas/package.json。
{
"name": "function",
"version": "1.0.0",
"description": "",
"main": "handler.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
尝试查看 faas-cli new 命令中除了可指定的 node 模板之外的其他模板。
faas-cli template pull
faas-cli new --list
那个结果是(截至2018年11月12日)。
Languages available as templates:
- csharp
- dockerfile
- go
- go-armhf
- java8
- node
- node-arm64
- node-armhf
- php7
- python
- python-armhf
- python3
- python3-armhf
- ruby
Docker注册表的目的是什么?
以下命令不考虑持久性等问题。仅供试用。
docker run -d -p 5000:5000 --name registry registry:latest
创建Docker镜像
faas-cli build -f hello-openfaas.yml --tag latest
在命令行中输入 “docker image ls” 进行确认。
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost:5000/hello-openfaas latest bd1a24eefc35 About a minute ago 72.2MB
将 Docker Image 推送到 Registry。
faas-cli push -f hello-openfaas.yml --tag latest
把应用程序部署到OpenFaaS
执行以下命令以登录到OpenFaaS:运行./deploy_stack.sh时显示的以echo开头的命令。
echo -n 9c6208072a2389f1a9451c7fefbd2545e39bdf0a1d6cad5fd83d84f045fae173 | faas-cli login --username=admin --password-stdin
部署~
faas-cli deploy -f hello-openfaas.yml
按下INVOKE按钮,即可执行Function并在响应体中显示结果。
也可以通过浏览器访问URL。
删除功能
faas-cli remove -f hello-openfaas.yml
可以通过画面上的垃圾桶进行删除。
打掃
也许有更好的方法来打扫。
# サーバをダウンする
docker stack rm func
docker rm -f registry
# docker secret の削除
docker secret rm basic-auth-user
docker secret rm basic-auth-password
# docker image の削除
docker rmi localhost:5000/hello-openfaas
我所感受到的
听起来不错。
如果要构建系统,也许可以在 Kubernetes 的集群上搭建。
虽然我没搭建过 Kubernetes。
Fargate 上的 OpenFaaS?这很有意思。https://github.com/ewilde/faas-fargate
关于如何将官方 AWS 部署到 EKS? 我有兴趣。https://aws.amazon.com/jp/blogs/opensource/deploy-openfaas-aws-eks/