JSUG勉強会 2019その9 Spring&AWS に参加しました

2019年9月20日(金)のJSUG勉強会 2019その9 Spring&AWSに参加。
自身の学びになったこと、スライドに書かれていないこと、それらに対する個人的な意見を中心にメモ。

目的

  • AWSは未経験だが、業務での活用に向けて少しでも慣れていくための情報収集
  • 今後Kotlinを積極的に使っていきたいので、少しでも学びが得られれば

Spring BootをKotlinで作成しAmazon Elastic Container Service (ECS) で稼働させる

スライドはこちら

発表者

発表者はAWSジャパンの白山文彦さんで、アプリケーションプロトタイピングソリューションアーキテクト…という肩書き。
「オンプレのこれをAWSに持っていきたいんだけど…」という案件について、客先で一緒に一週間程度プロトタイピングを無料で行っているとのこと。

AWSとしては継続的に使ってもらえれば利益が入るから、販促費として無料でもペイする…ということかと。

会場アンケート

一部書き漏らした気がするけど、だいだい以下のような感じ。
母集団が「この勉強会に来た人」なので、かなりのバイアスがかかっているはず。

  • Androidアプリの開発やってる人:0人
  • Kotlinを知ってる人:7割くらい?
  • Spring + Kotlinで書いている人:2~3割くらい?
  • Dockerを使ったことがない人:1~2割くらい?
  • CodeBuildを使っている方:1割くらい?

Spring + Kotlinは、バイアスを差し引くと世の中ではまだまだ…という感じかな。
Dockerは8〜9割の方が使ったことあるようで、ここまでとは思っていなかったので驚いた。

末尾再帰の最適化

末尾再帰の際にtailrecというキーワードを付けており、スタックオーバーフローを防げるメリットがあるとのこと。

今どきのコンパイラって、末尾再帰なら自動的にwhileループに置き換えてるものだと思ってたので調べてみた。
ここによると、Kotlinではtailrecを付けていない場合は末尾最適化が行われないとのこと。
キーワードにより明示的にしている理由は、「デバッグしやすくするため」「末尾最適化できるかどうかチェックする(実装ミスを防止する)ため」の2つらしい。

Java相互運用

Javaからの呼び出しを考慮する際、以下のアノテーションを使うと良いらしい。

  • @JvmStatic:Javaから呼び出せるStaticメソッドとして定義することができる
  • @JvmOverloads:デフォルト値を指定しているメソッドを、オーバーロードしてJavaからも呼び出せるようにする

JavaとKotlinは互換性が高いとは言われるが、やはり細かい所ではいろいろあるなーという印象。
今までこれらのアノテーションが欲しいと感じる場面はなかったが、知ることができたのは良かった。
ただ、手段としては用意されているものの、こういうアノテーションは極力使わない構成にしなければいけないと感じた。
一回こういうアノテーションをつけると外すタイミングが難しいし、本質的でない部分に学習コストを費やすのは非効率なので。

Amazon Elastic Container Service

ACSでは以下のような概念が出てくる。

  • コントロールプレーン:コンテナの管理制御・制御。
    • ECS:ちょっとしたことをやるには、こちらがお手軽
    • EKS:Kubernetes互換
  • データプレーン:リソース資源
    • EC2:問題発生時、sshでログインして調査したりできる
    • Fargate:コンテナの下のレイヤーを意識しなくてよい。ちょっと試してみるならこちらがよい
  • Amazon ECRにイメージの登録
    • タスク:どのくらいCPUやメモリが必要かを定義する。Dockerコンテナと考えればよい
    • サービス:「APIサーバ」「HTTPサーバ」などの役割を1単位として、複数のタスクを構成する。
    • クラスタ:複数のサービスを束ねたもの

コントロールプレーンやデータプレーンについては知らなかったので、今後のために覚えておきたい。
ECSやFargateを使うと手軽に試すことができそうだなーという印象。

CodeStar

詳しい紹介はありませんでしたが、CodeStarというCI/CD環境について少し触れられていた。
CodeStarを使うとビルド、ECRの作成、ECSへのデプロイなどが自動化できるとのこと。

聞いたときは「GitLabとかじゃ駄目なの?」と思ったが、ググってみるとCI/CD環境を一瞬で用意できるらしい。
新規プロジェクトでは試してみる価値はあるかもしれないが、既存の環境に適用する価値があるかどうかは不明。
個人的には、そもそもこういう開発環境がAWSにロックインされるのはちょっと抵抗があるなーと感じた。
優先度低めで、気になったら試してみるくらいになりそう。

AWSで作るクラウドネイティブアプリケーションの基本とDevOps

発表者はNTTデータの川畑 光平さん。

スライドはこちら
マイナビにも寄稿した記事があるとのことで、こちら

実践的な内容の濃いトークがハイペースで展開されたものの、スライドを1/3程度を残して終了。惜しい…。

学び

収穫だと感じたのは以下の辺り。

  • サーバーレスのメリット・デメリット(スライド13.2)
  • ECSは思った以上に使い勝手が良かった。ただし、ベンダーロックイン回避の観点ではEKSも重要(スライド14.7)
  • 認証情報の設定について、ググるとまずいやり方がたくさんヒットするので要注意(スライド17.2〜17.5)

ECSは直前の発表内容を勘案しても、やはり使い勝手がよさそうな印象。
ベンダーロックインを気にしなければEKSを使う理由はないのかもしれない。

とても実践的な内容であるということは聞いていて分かったものの、実践的すぎて内容があまり咀嚼できなかった、というのが正直なところ。
おそらくAWSを触っていれば課題感が分かって理解できるようになると思うので、実践が足りてないということかな。
AWSで構成を検討する際は、本資料とマイナビに寄稿されている記事には目を通しておきたい。

全体の所感

最近Kotlinを書く機会が増えてきたけど、理解度が上がっていることを実感しつつ、知識を補強できたのが有益だった。
今後新たに開発していくものはもちろん、既存のコードもできるだけKotlinへシフトしていきたい。

AWSについては実践が足りていないことが分かったので、触る機会を少しずつでも作っていかなければいけないと感じた。
とりあえずコンテナ使うならECSを使っておけば当面事足りそうなので、それが分かっただけでも収穫だったかなと。
あとは実践と並行して川畑さんの寄稿記事を読んで、自分なりにノウハウを蓄積していきたい。

番外として、マークダウンでスライドが作れるreveal.jsが面白そうだったので、時間があったら試してみたい。

関連記事


  1. Spring Fest 2019に参加しました
  2. JSUG勉強会 2019その7 ビズリーチにおけるSpringの活用 に参加しました
  3. JSUG勉強会2019その2 に参加しました
  4. JSUG勉強会2019その1 に参加しました
  5. 情報処理技術者試験の受験理由と、受けてよかったこと
  6. Developers Summit 2020 に参加しました
  7. JJUG CCC 2019 Fallに参加しました