Fn Projectについて調べて見た。③
前回はfn invoke
で失敗しまいました。
原因はFn Serverのバージョンが古かった
調べても同じ様なバグ報告がなかったので、環境がおかしいと考えました。
Fn CLIはbrew
を使うことでアップデートできますが、Fn Serverのバージョンは7月にインストールした時点のバージョンから変わりません。
Fn CLIの内容を改めて確認しみました。
$ fn help Fn Command Line Tool - Version 0.5.15 ENVIRONMENT VARIABLES FN_API_URL Fn server address FN_REGISTRY Docker registry to push images to, use username only to push to Docker Hub - [[registry.hub.docker.com/]USERNAME] GENERAL COMMANDS version Display Fn CLI and Fn Server versions help, h Shows a list of commands or help for one command DEVELOPMENT COMMANDS build, bu Build function version bump, bm Bump function version call, cl Prompts for migration. deploy, dp Deploys a function to the functions server (bumps, build, pushes and updates functions and/or triggers). init, in Create a local func.yaml file invoke, iv Invoke a remote function migrate, m Migrate a local func.yaml file to the latest version push, p Push function to docker registry MANAGEMENT COMMANDS config, cf Set configuration for an object create, c Create a new object delete, d Delete an object get, g Get an object to retrieve its information inspect, i Retrieve properties of an object list, ls Return a list of created objects unset, un Unset elements of a created object update, up Update a created object use, u Select context for further commands SERVER COMMANDS build-server Build custom Fn server start Start a local Fn server stop Stop a function server GLOBAL OPTIONS --context value Use --context to select context configuration file --registry value Use --registry to select registry --verbose, -v Use --verbose to enable verbose mode for debugging --help, -h show help --version Display version FURTHER HELP: See 'fn <command> --help' for more information about a command. LEARN MORE: https://github.com/fnproject/fn
管理コマンドupdate
というのがあるではないですか。
節穴でした。(この時点でServerは0.3.495)
$ fn update server Using default tag: latest latest: Pulling from fnproject/fnserver 〜中略〜 Status: Downloaded newer image for fnproject/fnserver:latest 2018/10/11 23:59:08 Process finished gracefully $ fn version Client version is latest version: 0.5.15 Server version: 0.3.595
無事に更新ができました。
fn start
してfn invoke
を確認します。
$ fn deploy --app myapp --local Deploying fntest to app: myapp Bumped to version 0.0.15 Building image fntest:0.0.15 Updating function fntest using image fntest:0.0.15... $ fn invoke myapp fntest Hello, world!
やっと出ました!嬉しい!
Fn の更新手順
Fnを更新する際は以下の順番で更新した方が良いです。
brew upgrade fn
でFn CLIを更新fn update server
で Fn Serverを更新
Fn Projectについて調べて見た。②
前回はInstall Fnまでやりました。
今回はJavaのIntroductionをやります。
まずは Fn CLI の更新
fn run
を実行してもエラーになってしまいます。
そもそも何のコマンドだったか思い出せずGitHubを確認したら、run
コマンドは壊れてるらしいです。
約3ヶ月ぶりなので、まずはFn CLIを更新します。
(2018/10/6時点でver0.5.8)
$ brew upgrade fn
Functionの作成
$ fn init --runtime java --trigger http fntest Creating function at: /fntest Function boilerplate generated. func.yaml created.
実行後、以下の様にディレクトリ、ファイルが作成されます。
fntest ├── func.yaml ├── pom.xml └── src ├── main │ └── java │ └── com │ └── example │ └── fn │ └── HelloFunction.java └── test └── java └── com └── example └── fn └── HelloFunctionTest.java
func.yamlの中身
schema_version: 20180708 name: fntest version: 0.0.1 runtime: java build_image: fnproject/fn-java-fdk-build:jdk9-1.0.72 run_image: fnproject/fn-java-fdk:jdk9-1.0.72 cmd: com.example.fn.HelloFunction::handleRequest format: http-stream triggers: - name: fntest-trigger type: http source: /fntest-trigger
yamlにはFunctionに関するメタデータが含まれています。
Fn Introductionより抜粋
- schema_version–identifies the version of the schema for this function file.
- version–the version of the function.
- runtime–the language used for this function.
- cmd–the cmd property is set to the fully qualified name of the function class and the method that should be invoked when your javafn function is called.
- build_image–the image used to build your function’s image.
- run_image–the image your function runs in.
- format–the function uses JSON as its input/output method (see: Open Function Format).
- triggers–identifies the automatically generated trigger name and source. For example, this function would be executed from the URL http://localhost:8080/t/appname/gofn-trigger. Where appname is the name of the app chosen for your function when it is deployed.
Functionのバージョンや言語のほか、Functionが呼び出された時に実行されるメソッドなどが記載されています。
FunctionをDeploy。しかし、失敗。
$ fn deploy --app myapp --local Deploying fntest to app: myapp Bumped to version 0.0.5 Building image fntest:0.0.5 Updating function fntest using image fntest:0.0.5... Fn: Invalid format on Fn See 'fn <command> --help' for more information. Client version: 0.5.8
なぜかデプロイができません。
ビルドしてみます。
$ fn build Building image fntest:0.0.5 Function fntest:0.0.5 built successfully.
ビルドは成功します。
func.yamlで問題の切り分けをする。
以前(2018/7/2時点)のyamlとの違う点をいじってみました。
format http-stream
の箇所をformat http
に変更しています。
(versionは試行錯誤の跡ですw)
schema_version: 20180708 name: fntest version: 0.0.11 runtime: java build_image: fnproject/fn-java-fdk-build:jdk9-1.0.72 run_image: fnproject/fn-java-fdk:jdk9-1.0.72 cmd: com.example.fn.HelloFunction::handleRequest format: http triggers: - name: fntest-trigger type: http source: /fntest-trigger
デプロイしてみます。
$ fn deploy --app myapp --local Deploying fntest to app: myapp Bumped to version 0.0.11 Building image fntest:0.0.11 Updating function fntest using image fntest:0.0.11... Successfully created function: fntest with fntest:0.0.11 Successfully created trigger: fntest-trigger
成功しました。
format http-stream
に問題があるのか、やり方やインストール時に問題があったのかはわかりません。
チュートリアル通りにfn init
するとやはりformat http-stream
でfunc.yaml
が作成されます。
(client ver0.5.15で再確認済み)
Functionを呼び出す。しかし、失敗。
$ fn invoke myapp fntest Fn: Fn invoke url annotation not present, fnproject.io/fn/invokeEndpoint See 'fn <command> --help' for more information. Client version: 0.5.15
なぜすんなり行かないのか。
7月上旬にチュートリアルを一通りやった時には、こんな困らなかったのですが。
ソース読んでエラー発生箇所は分かりましたが、どうしたらいいのかサッパリです。
もう少し調べます。
備忘
fn invoke
format http-stream
JJUGナイトセミナー「Javaの言語仕様策定とリリースモデルを学ぼう」に行ってきた。
リリースモデルが変わったという話しはチラホラ耳にしていましたが、
ちゃんと知らなかったので、参加しました。
本日は3本立て。
「新しいJDKリリースモデル解説」by 伊藤 敬さん
www.slideshare.net
セミナーは今回用の更新版スライドだったと思います。
公開され次第、貼り直します。*1
OpenJDKとOracle JDKの関係を正しく理解していなかったので、 今回の説明で理解することができたのは良かったです。
リリースモデル変更による、 OpenJDKとOracle JDKのバイナリの状態やサポート内容について対比して説明されていたので、 非常にわかりやすかったです。
Oracle JDKは原則有償サポートですが、
「開発・テスト・試作・デモの利用目的であれば無償で利用可能になる予定」とのことでした。
※「予定」なので、変更の可能性がある点はご注意ください。
Oracle JDKのLTSに対応するバージョンの他に、OpenJDKと同様に各バージョンが有償でリリースされるようです。 てっきり、3年毎のバージョンアップだけかと思っていました。
Oracle Java SE Subscriptionについても話題がありました。
購入は年単位で購入する必要があり、購入するとライセンス、サポート、商用機能の利用が可能になるようです。
対象はデスクトップとサーバで、それぞれ料金体系が公開されています。
2018年7月17日現在はドルの料金表だけですが、近日中に円の料金表が公開されるとのことです。
質疑応答の内容です。間違っていたら指摘ください。
Q1. 有償サポートを打ち切った後のOracle JDKバイナリの使用権はどうなるのか?
A1. 確認します。
(2018/7/20追記)
FAQに記載がありました。
オラクル Java SE Subscription FAQ
サブスクリプションを更新しない場合はどうなりますか?
Java SE Subscription が終了した時点で、 Java SE Subscription が有効だった期間にダウンロードしたすべての商用ソフトウェアの権利とオラクル Premiere サポートへのアクセスが終了します。もし Java SE Subscription を継続する意思がない場合、 Java SE Subscription が終了する前に、使用中の Java SE アプリケーションをオラクルの OpenJDK バイナリ (GPLライセンス)に移行することをお勧めします。これによって中断することなく、引き続きアプリケーションを実行することができます。
Q2. Deprecatedになった機能はLTSのバージョンであればアップデートリリースはされるのか?
A2. わからない。多分だが、そのような状況にならないように考慮すると思います。
Q3. JREはどうなる?
A3. JREは無くなります。JDKに内容されているJREを使うことになる。なので、今後はJDKをインストールしてもらう。
「これからのJCPについてー活動内容のアップデート」 by Naoko Hamamoto さん
「JCP = Java Community Process」
「JSR = Java Specification Requests」
JCPとはJSRを通じてJava技術規格を開発、改定するためのオープンなプロセスです。
JSRは誰でも提案は可能ですが、Excecutive Community(EC)の投票による承認が必要です。
JCPの運営プロセスもJSRで決まり、現在改訂版を提案しているところ。(JSR387)
JCPへの参加は簡単に個人でもできるので、ぜひ参加してほしいとのこと。
Java新機能観察日記 by きしだなおきさん
www.slideshare.net
Javaの開発プロセスの実態の印象として、JCPはカヤの外の印象があるらしい。
理由としては、OpenJDKはコードをガンガン書いて仕様を固めていく感じになっていて、
仕様を決めてからコードという現在のJCPのプロセスに合っていない感じがある。
JCPのプロセス改定には「Code first」が盛り込まれているので、今後はもっとJCPが絡むようになるかもしれません。
この辺、浜本さんがどう考えているのか聞いてみたかったです。友人の誕生会に行くのに懇親会は欠席したので。。
最新の動向や決定までの裏事情なんかは、メーリスなどを見ることでわかるので楽しそう。
最後に
会社内でリリースモデルについての説明とかやってみようかなー。
後、Type-CからVGAに変換するアダプタは需要があって、普段使わなくても持っているといざという時にモテる。
type-cからvgaに変換するアダプタの需要を感じる…#jjug
— 怒Mが通る (@do_M_gaToru) 2018年7月17日
お客様の中にUSB Type-CをVGAに変換できるケーブルをお持ちの方はいらっしゃいませんかー #jjug
— TKD (@2017takeda) 2018年7月17日
お客様の中にType-CからVGAに変換できる方はいらっしゃいますかという緊急アナウンス #jjug
— baby氏 (@babywkb) 2018年7月17日
お客様の中でUSB Type-CからVGAへの変換コネクタをお持ちの方はいませんか!!??#jjug
— しんどー (@shindo_ryo) 2018年7月17日
*1:公開されたためスライドを差し替えました。2018/7/20