Doker for WindowsでFn Projectを動かしてみた
Doker for WindowsでFn Projectを動かした時のメモ
Fn Project
特徴
- 「JavaOne 2017」の基調講演で、Oracleが発表したJava対応のオープンソースサーバレスプラットフォーム
- 特徴
- 簡単
- 複雑なfunctionを実装するためのCLIを提供
- 構成
- Function Server(Docker)上にFunction(Docker)が乗っかる(Docker on Docker)
- 起動するとFunctionのコンテナが立ち上がり一定時間後に消える
Function Serverの同期処理シーケンス
(非同期処理の場合はMQが使用される)
FnProject CLI toolのDownloadと設定
windowsの場合は下記からfn.exeを適当な場所へDownloadし、PATHを通す。
PATHが通っているかの確認
> fn --version fn version 0.5.0
Fnction Serverの起動
ここではAPIのMetadataを格納するDBのファイルを"C:\mnt\docker\fnserver\data"へ置くように設定する。 (何も指定しないとSQLighのようだ)
docker run --rm --name fnserver -it -d -v /var/run/docker.sock:/var/run/docker.sock -v /c/mnt/docker/fnserver/data:/app/data -p 8080:8080 fnproject/fnserver
Fnction Serverの起動確認
> curl http://localhost:8080 {"goto":"https://github.com/fnproject/fn","hello":"world!"}
Functionの作成
JavaでのFunctionの作成方法
> fn init --runtime java --trigger http javafn Creating function at: /javafn Function boilerplate generated. func.yaml created. > tree /f フォルダー パスの一覧: ボリューム Windows ボリューム シリアル番号は 00000215 2E6B:1EF1 です C:. └─javafn │ func.yaml │ pom.xml │ └─src ├─main │ └─java │ └─com │ └─example │ └─fn │ HelloFunction.java │ └─test └─java └─com └─example └─fn HelloFunctionTest.java
FunctionはデフォルトではCold StandbyだがJavaでFunctionを作成するとHot Standbyで作成される。 Functionの定義ファイル"func.yaml"のformatがhttpだとHot Standbyのようだ。ちなみにアイドルタイムはデフォルトは30秒。 docs/hot-functions.md at master · fnproject/docs · GitHub
schema_version: 20180708 name: javafn version: 0.0.1 runtime: java build_image: fnproject/fn-java-fdk-build:jdk9-1.0.70 run_image: fnproject/fn-java-fdk:jdk9-1.0.70 cmd: com.example.fn.HelloFunction::handleRequest format: http triggers: - name: javafn-trigger type: http source: /javafn-trigger
作成したFunctionのデプロイ
作成されたFunctionのディレクトリでおこなう
> fn --verbose deploy --app javaapp --local
Functionの呼び出し
> fn invoke javaapp javafn Hello, world! > curl -d Java http://localhost:8080/t/javaapp/javafn-trigger Hello, Java!
ダッシュボード
fn project用のUIが用意されている。 github.com
UIの起動
docker run --rm --name ui -it -d --link fnserver -p 4000:4000 -e "FN_API_URL=http://fnserver:8080" fnproject/ui
おまけ
Fnction ServerとUIを同時に動かすdocker-composeはこんな感じです。
docker-compose.yaml
version: '2' services: fnserver: image: fnproject/fnserver container_name: fnserver ports: - '8080:8080' volumes: - "/var/run/docker.sock:/var/run/docker.sock" - "/c/mnt/docker/fnserver/data:/app/data" fnui: image: fnproject/ui container_name: fnui ports: - '4000:4000' environment: FN_API_URL: "http://fnserver:8080" depends_on: - fnserver
docker-composeの起動
> set COMPOSE_CONVERT_WINDOWS_PATHS=1 > docker-compose up -d Creating network "fnproject_default" with the default driver Creating fnserver ... done Creating ui ... done