Kotlin + gRPCでio.grpc.Contextをつかってログ出力を横断処理してみた

アスペクト指向プログラミング(AOP)をgRPC Serverではどう扱うか考えていきたい。 横断的な関心事といえば認証やログ出力である。 gRPCクライアントのメタデータに認証トークンを添えてリクエストを行いgRPC Serverのinterceptorで横断的に認証を完了させ…

Kotlin + gRPCでdropwizard/metricsをつかってメトリクスを取得してみた

今回のエントリはKotlin + gRPC(FWはSpringBoot 2.0.0.M1)のアプリケーションでgRPCのリクエストタイムやエラー回数などのメトリクスを計測する方法をまとめていく。 dropwizard/metrics メトリクス計測のライブラリには dropwizard/metricsをつかってみた…

Kotlin + gradleでgRPCプロトコル定義ファイル(.proto)のvendoringにprotodepをつかってみた

gRPCのプロトコル定義ファイル(.proto)の管理を考えていきたい。gRPCを導入するプロジェクトであれば.protoファイルの運用方法は課題である。 プロトコル定義ファイル(.proto)の運用課題 gRPCはプロトコル定義ファイル(.proto)から生成したプログラム…

ALBのアクセスログからAPIのレスポンスタイムを監視する

サービスのAPIのレスポンスタイムを監視することは運用において大事なことである。APIのレスポンスタイムを計測してモニタリングする方法は多様に考えられるが、このエントリでは次の図のようにALBのアクセスログをfluentdが収集してモニタリングツールと連…

Spring5.0 + KotlinのRouterFunctionのテストはどうすればよいか? 試してみた

引き続きSpring5.0(Spring Boot 2.0) + KotlinのWebアプリケーションを試している。今回はRouterFunctionをつかってHTTPルーティングを定義したときにテストコードはどう書くのか?気になったのでまとめてみた。 Router Function Router FunctionはSpring5…

Spring5.0 + KotlinではDoma、Request Interceptorあたりはどうなっているのか調べてみた

Spring5.0のリリースが迫るなか、プロジェクトへ導入に向けて色々と調べている。インタセプターなどのSpring Frameworkにおける作法はどうなっているか、便利に使えていたライブラリとの相性はどうなのか、などをアウトプットしていく。 次の2つのはてな?…

Spring5.0 + Kotlinで1つのjarにHTTPサーバーとgRPCサーバーを相乗りさせてみた

Spring Boot 2.0.0 M1がリリースされました。以前のエントリで試した当時は 2.0.0.BUILD-SNAPSHOTでありHTTPサーバーが起動している状態でgRPCクライアントを動かすとエラーになっていた。 2.0.0 M1のリリースに伴いHTTPサーバーとgRPCサーバーが1つのjarに…

http4kをベースにサーバーサイド Kotlinの関連ライブラリをつかってみた

Google I/O 2017でKotlinがAndroidアプリ開発言語に選定された。Androidに限らずサーバーサイドでもメインの言語としてKotlinは選択できて、いくつかのサービス開発の経験を経てきた。これまでSpring BootをメインのFrameworkに置いて開発をしてきたけど、こ…

FCMでWeb Push。Firebase Javascript SDKを使ったプッシュ通知とトピック送信を試した。

FirebaseのFirebase Cloud Messaging(FCM)を試している。今回のエントリではFCMのJavaScriptライブラリを使ってブラウザにプッシュ通知やトピックにメッセージを送信する方法をまとめていく。 FCMではトピックや端末グループへのメッセージングなどの機能…

Web PushをFCMとVAPIDで認証してブラウザにプッシュ通知を送る

Web Pushを試している。調べていく過程で2つの認証方式を用いてプッシュ通知を送信できることが分かった。1つはFirebase Cloud Messaging(FCM)を使い取得したサーバーキーを認証に使い送信する方法とVoluntary Application Server Identification for We…

KotlinでgRPC。grpc-javaのTLS with JDKとTLS with OpenSSLの使い方をまとめた。

grpc-java/SECURITY.mdを読み進めるとTLSを有効にしたgRPCサーバの起動には2つのプロトコルプロバイダーを選択できる。 JDKとOpenSSLがその2つである。それぞれを有効にする方法は異なりドキュメントも豊富ではない。この機会にまとめていきたいというのが…

PagerDutyとAsanaをzapierをつかって連携させてみた

zapierをつかってPagerDutyとAsanaを連携させる方法をまとめます。 zapier.com モチベーション PagerDutyのIncidentをSlackに通知をして、その対応をAsanaでタスク化して運用をするうえで Asanaのタスク化を自動化させたい。そんなときzaiperは zap という単…

KotlinでgRPC。SSL/TLSを有効にする方法をまとめた。

前回のエントリではgrpc/grpc-javaをベースにkotlinでgRPCを試しました。今回はSSL/TLSを有効にする方法をまとめていきます。grpc/grpc-java/SECURITY.mdを参照しながら進めました。 証明書を準備する 手元に適当な証明書がなかったのでgrpc-go/testdataにあ…

KotlinでgRPC。実運用にも活かせるWEBアプリケーション構成で試してみた。

KotlinでgRPCを試していきます。protocol buffersがkotlinに対応していないのでjavaに生成したものを使います。次のようなアプリケーション構成でKotlinを使ったgRPC通信を試してみました。 アプリケーション構成 エンドクライアントからのアクセスはGateway…

supersetをシュッと起動できるDockerfile(認証方式をGoogle API OAuth2に変更)をつくってみた、あと触ってみた所感など

ダッシュボードツールのsupersetをシュッと起動できるDockerfileを作りました。といってもsupersetのDockerfileはgithub.comに見かけるので認証方式をGoogle API OAuth2.0に変更したDockerfileを作りました。あとsupersetを触ってみての感想など導入に向けて…

go-grpc-prometheusでgRPCのmetricsをPrometeusとGrafanaでモニタリングしてみた

gRPC Ecosystemの1つにgo-grpc-prometheusがあります。今回は「gRPC Ecosystemのgo-grpc-prometheusを試してみました」エントリです。 go-grpc-prometheus github.com go-grpc-prometheusはgRPCのmetricsをPrometheusでモニタリングできるログ出力をサポー…

Terraform 0.9がリリース。0.8.xから0.9.xのStateマイグレーション手順をまとめました。

HashiCorpからTerraform 0.9がリリースされました。「よし、最新バージョンにあげよう。」と作業をはじめましたがremoteコマンドが使えない。どうやら0.9からはremoteコマンドが廃止されたようです。このエントリではTerraform 0.9にバージョンアップをして0…

gRPC streamingをつかうとマイクロサービスの責務が整理できるし省コネクションでメリットあるよね、という話

今回はgRPCをマイクロサービス間通信に導入することってメリットあるよね、というエントリです。 定期的に処理を実行してくれるバッチはよくあるものですがバッチの駆動をgRPCを使って次のような構成で動かしました。 Batch ControlとBatch ServerはBidirect…

CourseraのMachine Learningから線形回帰を学んだのでまとめてみた

CourseraのMachine Learningを受講しています。時間を見つけてはコツコツ進めて今のところWeek4に差し掛かったところです。Week4ではNeural Networksの話に入り一段とレベルが高くなった印象を受けています。Week1からWeek3までに学んだことを復習する必要が…

Page Object PatternをベースにTestCafeでE2Eテストを作ってみた

以前のエントリでKotlinでSelenideを使ったE2Eテストを作ったときもPage Object Patternを利用して見通しの良いテストコードが書けました。TestCafeでも同様にPage Object Patternを利用することが推奨されています。今回はTestCafeでもPage Object Pattern…

WebDriver不要のTestCafeを使ったE2EテストをChatOpsに導入してみた

今回はE2EテストをつくれるTestCafeをつかってみたエントリです。devexpress.github.io以前のエントリではSelenideをつかったE2Eテストの紹介をしました。Selenideも特徴がありますがTestCafeも抜群の特徴があります。 TestCafeではテストコードはNodeで書い…

nginx-rtmp-module + FFmpeg + HLSで動画配信ができるdocker-composeをつくった

タイトルのdocker-composeをつくっていきます。ローカルで配信確認したいときにシュッと起動できるようにします。 次のような構成でつくりました。 コンテナ構成 それぞれのコンテナについてまとめます。 RTMP server nginx-rtmp-moduleをつかってRTMP serve…

mackerelのグラフアノテーションをChatOpsに加えてみた

mackerelからリリースされたグラフアノテーションを追加できるコマンドラインツールをgoで作りました。 作ったコマンドをBot経由で実行できるうようにしてチームのChatOpsに加えていきたいのでbot scriptも作りました。 コマンド作成方法やslack経由で実行で…

Pact Broker DockerコンテナをつかってPact Broker環境を構築してみた

Consumer-Driven Contract テストをフレームワークさせるPactをつかったサンプルプロジェクトを前回のエントリでは紹介しました。 naruto-io.hatenablog.com前回のエントリではPactファイルをConsumerとProviderともにファイルシステムを用いて参照していま…

golang - Kotlinのmicroservice構成のConsumer-Driven Contract testingをpactをつかって作ってみた

今回はConsumer-Driven Contract testingのサンプルを作ってみました。以前のSelenideを使ったE2Eの記事の流れからConsumer-Driven Contract testingも試してみようというモチベーションです。 Consumer-Driven Contract testingとは Consumer-Driven Contra…

みんGO を読んでec2インスンスリストをタグ検索するコマンドラインツールを作ってみた

プロジェクトでGO言語に触れながら学習のためにコマンドラインツールを作り拡張させながら言語理解を深めようと目標を立てた。「みんなのGO言語」を参考にしながら自作のコマンドラインツールを作ったのでまとめます。みんなのGo言語[現場で使える実践テクニ…

Kotlin + SelenideでE2E自動テストのアプリケーションをつくってみた

昨年末のAdvent Calendarを読み漁ってたときにSelenideやE2E、kotlinなどのキーワードが頭に残っていました。キーワードを全部ひっくるめてkotlinでSelenideを使いE2Eテストをつくってみたいなぁと思いを馳せていたところ、プロジェクトでもE2Eテストの必要…

KotlinでMockテストのまとめ

1ヶ月ほどkotlinで開発をしてきて、不慣れなkotlinであってもテストをしっかり書いていこうと目標を立て臨んだ1ヶ月。 おかげでkotlinにおけるMockテストの知見が溜まってきたので、この機会にまとめていきます。javaではJMockitでMockテストを書いてきたけ…

Kotlin + Spring Boot/ResponseEntityを使ったJSONレスポンスにJacksonの@JsonPropertyを有効にする

Spring Bootを使ってkotlinで書いています。サーバサイドでkotlinを使うと新たな発見があるのでいいですね。 ControllerのレスポンスにResponseEntityを使ったところdata classのプロパティを@JsonPropertyでリネームしたのに有効になりませんでした。 自分…

ElasticsearchのScroll APIをためしてみた

気になっていたElasticsearchのScroll APIの使用感を記録します。最近の開発でScroll APIを採用したい欲求がありましたが、使用感を調べる前で採用は見送りました。このままだと気になったまま使わないことになりそうなので、この機会にまとめます。www.elas…

Kotlinで快適なJSONパース。Klaxon: JSON for Kotlinを使ってみた。

前回の記事ではMoshiライブラリを使ったJSON文字列からのオブジェクト変換、オブジェクトからのJSON文字列変換の話でした。naruto-io.hatenablog.comJSONが複雑な構造でもあってもMoshiのCustom Type Adaptersを使って@ToJsonと@FromJsonを実装すればJSON←→…

KotlinでtoJsonとfromJsonのJSONパース。MoshiのCustom Type Adaptersを使ってオブジェクトのテストを快適に。

最近はkotlinで開発しています。これまで他の言語で出来ていたこともkotlinではどうやって出来るのか?、調査したり試したりすることは楽しいですね。新しい言語に触れる醍醐味とも言えます。 kotlinをサーバサイドのメイン言語に使っています。数ある処理の…

fluentd + logstash_formatの難点をrecord_reformerで解決した話

「アプリケーションで出力したログをelasticsearchにインデックスするときにログ時間のフィールド名を@timestampにしたい。」 こんなときにfluentdのlogstash_formatを使うと少々はまります。 今回はそのハマりポイントと解決についてのお話です。 なぜログ…

Spring Boot + Kotlinでmockitoを使ってモック化したテストコードを書く

今回はkotlinでmockito使って処理をモック化したテストコードを書いてみた。site.mockito.org セットアップ dependencies { ... testCompile "org.springframework.boot:spring-boot-starter-test" testCompile "org.mockito:mockito-core:$mockito_core_ver…

Logstash + Elasticsearch連携時のLogstash confメモ(jsonからconvert, filter, dateなど)

LogstashからElasticsearchへデータを送信する仕組みを試しました。Logstashのconfの参考になれば幸い。 json側のフィールドをElasticsearchのdate型にconvertしたり、文字列を数値にconvertしたりしました。 ログはjsonフォーマット {"reportDate":"2016-11…

go langからGoogle Analytics APIを使う

こちらの記事↓ではSpring Boot + kotlinからの利用方法でしたがgoからの利用も調査しました。Spring Boot + kotlinでGoogle Analytics APIを使ってみた - 平日インプット週末アウトプットぶろぐ簡易的なデータの取り方を確認できたので記載。 main.go packag…

Spring Boot + KotlinでGoogle Analytics APIを使ってみた

Googleアナリテクスの設定は本家情報を参照 https://developers.google.com/analytics/devguides/reporting/core/v3/quickstart/service-java?hl=ja 手順まとめ Google API Consoleでサービスアカウントを作成して認証する鍵を作成(今回はp12ファイルを使う…

Spring Boot + KotlinでLogstashを使ってログ出力

Logstatshのお試しとして、Spring Boot + kotlinのアプリに導入したときのメモ。 ビルドツールはgradleを使う buildscript { ext { springBootVersion = '1.4.1.RELEASE' kotlin_version = '1.0.4' logstash_logback_encoder_version = "4.7" } ... }depende…