オープンソースFaaSの比較

オープンソースFaaSが色々あって、どれを選んだらよいのかわからなかったので比較してみます。

## 観点

- API Gateway
    - そもそも連携可能か?
    - API Gatewayの実装に何を使うか?
        - Nginx?
        - Envoy?
- 動作環境
    - Kubernetes?
- 対応言語
- 対応Trigger
    - Kubernetes Event?
    - Slack?
- Web UI
- 運用
    - データベース、キャッシュ、ジョブキューにマネージドサービスを利用できるか?

参考: http://redmonk.com/jgovernor/2017/10/03/another-fn-container-native-serverless-framework/

## Apache OpenWhisk

![](http://tuan-flask.herokuapp.com/service/star?url=https://github.com/apache/incubator-openwhisk&type=watch|star|folk)

参考: https://thenewstack.io/behind-scenes-apache-openwhisk-serverless-platform/

- API Gateway
    - 実装はNginxを利用
    - Adobeが開発中
        - https://github.com/adobe-apiplatform/apigateway
- 動作環境
    - Kubernetes (IBM Bluemixがデファクトのよう)
- 対応Trigger
    - cli呼び出し
        - https://console.bluemix.net/docs/openwhisk/openwhisk_triggers_rules.html#openwhisk_triggers
    - フィード
        - https://console-regional.ng.bluemix.net/docs/openwhisk/openwhisk_catalog.html#openwhisk_catalog_cloudant
        - ここでタイプ「フィード」に対応しているもの
            - github webhook
            - Cloudantデータベースの変更
- 運用
    - 以下を自前で運用する必要がある
        - Kafka
        - CouchDB
        - Consul

# Kubeless

![](http://tuan-flask.herokuapp.com/service/star?url=https://github.com/kubeless/kubeless&type=watch|star|folk)

- API Gateway
    - KubernetesのIngressを利用
        - Ingress Controller(Nginx, Istio等)は別に選べるので、特定のミドルウェアにロックインされない
- 動作環境
    - Kubernetes
- [対応Trigger](https://github.com/kubeless/kubeless#usage)
    - HTTP Endpoint呼び出し
    - Kafkaトピック
    - スケジュール
- 運用
    - KubernetesクラスタさえあればOK
        - 標準的なK8Sオブジェクト以外のステートはK8SのCRDに保存するので、他のデータストアなど運用する必要がない
        - https://github.com/kubeless/kubeless/tree/master/docs

# Fission

![](http://tuan-flask.herokuapp.com/service/star?url=https://github.com/fission/fission&type=watch|star|folk)

Platform9というKubenetesのマネージドサービスをやってる会社のOSS

- API Gateway
    - Kubernetes Ingressで対応予定(betaまでに)
        - https://github.com/fission/fission/issues/164
- 動作環境
    - Kubernetes
- 対応言語
    - Binary
    - Go
    - .NET
    - NodeJS
    - Perl
    - PHP7
    - Python 3
    - Ruby
- [対応Trigger](https://github.com/fission/fission#fission-concepts)
    - HTTPエンドポイント

## OpenFaaS

https://github.com/openfaas/faas

![](http://tuan-flask.herokuapp.com/service/star?url=https://github.com/openfaas/faas&type=watch|star|folk)

Kubernetes向けのデプロイメントは https://github.com/openfaas/faas-netes

![](http://tuan-flask.herokuapp.com/service/star?url=https://github.com/openfaas/faas-netes&type=watch|star|folk)

- API Gateway
    - Kubernetesの場合Ingressで実装しているので、Ingress Controller(Nginx, Istioなど)は選べる?
        - デフォルトはnginx
- 動作環境
    - Kubernetes
    - Docker Swarm
- 対応言語
    - DockerイメージにできるものならなんでもOK(大体のFaaSはそうかもだけど)
    - サンプル集
        - https://github.com/openfaas/faas/tree/master/sample-functions/BaseFunctions
        - Node.js
        - Python
        - Golang
- 対応Trigger
    - HTTPエンドポイント（同期・非同期）
        - https://github.com/openfaas/faas/tree/master/docs#gateway
        - 現状ではGatewayのHTTPエンドポイントしかトリガーがないみたい
        - workerがGatewayを呼び出すことで、色々なTriggerを実現していく流れらしい（下記）
    - [Kafka Topic(3rd party)](https://github.com/ucalgary/ftrigger)
        - 公式の開発状況
            - https://github.com/openfaas/faas/pull/311
    - [NATS Streaming](https://github.com/openfaas/nats-queue-worker)
    - [AWS SNS/SQS予定あり](https://github.com/openfaas/faas/issues/263)