Serverless Days Fukuoka 2019に行ってきたよ! #ServerlessDays

ServerlessDays Fukuoka2019 LINE Fukuokaで開催されたので行ってきました!

どーん!

KubeCon2019 NAから見るk8s × serverlessの現状

Speaker: Wataru Manji さん

Main Topics:
- KubeCon 2019でのServerless x k8sのセッション内容
- LINEではServerlessをどのように使っているか

KubeCon2019

  • 世界最大規模のk8sとCloudNativeのイベント
  • セッション数400+
  • 参加者数10,000+
  • スケーリング、セキュリテイ、ネットワーク、DevOpsなど幅広いトピックについてのセッションがあった
    • Serverless x k8s
    • KubeCon全体の1%程がこのトピックについてのセッションだった
    • まだまだ発展途上
    • k8sを使っているユーザーのほとんどはGKEなどを利用しているため、Serverlessを使う必要性を感じているユーザーが少ない
    • Knative、Kubeflowに関するセッションが充実していた

メイントピックは以下の三つ

  • Knative
  • Kubeflow
  • KEDA

Knative

  • k8sの上でFaaSを構築する
  • GCP上でCloud Runのバックエンドとして使われている
  • Google製

Knative

Kubeflow

  • 機械学習をクラウドネイティブに
  • Jupyter NotebookやTensoflowなどk8s上に学習済みのモデルを構築できる
  • パッケージングにはKsonnetが使われている

KEDA

  • Microsoft製のプラットフォーム
  • Knativeに似ている
  • Kafkaなどの別サービスからのイベントをサポートしている

KubeconにおけるServerlessの印象

  • まだまだ未熟ではあるが高速で開発が進められている
  • Serverlessとk8sの両方をパブリッククラウドで利用する場合、注目する価値がある

    ・なぜk8sをServerlessで利用するのか?

  • たくさんのリソースを含む複数のワークロードを効率的に管理したい
  • リソースを効率的にクラスタ内で利用したい

    • Verdaについて
  • LINE独自のプラットフォーム
    • KnativeをVerdaでどう使ってるか

資料

Serverlessで最初につまずくポイントすべて解説!

Speaker: Kensuke Shimokawaさん

開発環境を整える

  • Serverlessと言えばLambda
  • マネジメントコンソールからでもコードが書けるので、即書き始められる
  • 設計図の使用を選択するといろんな雛形を利用できる
  • 視覚的にアプリケーションの構成を管理できる
  • デメリット:
    • javaなどのコンパイル言語はコンソールのエディタではかけない

Cloud9を使おう

  • AWS Cloud9:AWSが提供する統合開発環境
    • gitやAWS CLI、SAMなどServerless開発によく使われるツールがあらかじめ入っている
    • ローカル実行とデバックが可能(Python, node.js のみ)
    • Lambda+ボタンを押すと雛形からプロジェクトを作成できる
    • SAMテンプレートの利用も可能
    • そのままデプロイも可能
  • Serverless使い始めはコンソールを使うのがおすすめ

  • 使い込む段階で好みのIDE環境を構築しよう

  • Serverlessツール群を活用しよう

    • Serverless Framework
    • SAM

CI/CD

  • リリースサイクルについて考える
    • 可能な限り自動化したい
    • Pushするだけでテスト、デプロイしたい
  • コードシリーズを使おう
    • CodeCommit
    • CodeBuild
    • CodePipeline
    • CodeDeploy

テスト

  • 手動テストを減らして自動化に寄せることが大事
  • Serverlessの単体テストってどうやるの?
    • ローカル環境でテストしたい
    • 他のAWSサービスにもアクセスしてテストしたい
  • SAM Local を使おう
  • プロジェクトにevent.jsonを追加。ここにイベントをまとめて記述
  • sam local invoke でLambdaをローカルで実行できる

  • LocalStack

    • サードパーティツール
    • 様々なサービスをローカル環境に構築できる
    • いろんなサービスをテストするのに便利
    • LocalStack
  • テストはピュアに保ちましょう
    • AWSの世界から切り離してテストに起こす
    • AWSを利用したインテグレーションテストはAWSのテスト環境を構築してそこで行いましょう

資料:*共有され次第更新します

TypeScriptとJestではじめる AWS製サーバーレス REST API のユニットテスト/E2Eテスト

Speaker: 和田祐介さん

テストを書いて欲しい!

  • Serverless案件におけるテストの具体例が少ない
  • 継続開発に必要になってくる要素の事例があまり出てこない
  • Serverlessでテストを書くハードルを下げることが今日の発表の目標
  • そのためにServerlessでコスパの良いテスト戦術を整理する

Jest

  • AWS CDKで採用されている
  • ts-jestでTypeScriptのテストコードを直接実行できる

Jest

UnitTEst

  • どこに対してテストを書く?
  • LambdaFunction:入出力のある関数。ビジネスロジックを含む場面も多く、アプリケーションの役割も担うようになってきた
    • 設計を考慮する必要がある
    • レイヤ別、機能別にコードを分類する
  • Humble Objectパターン
    • Unittestにおいてテストしやすいか、しにくいかを判断する
    • 外界とやり取りをするレイヤのコードを限りなく薄く
    • テストをしにくい場所をHumble Objectと判断し、その部分の処理を薄くする。テストはじめなのでモックでよい
    • テストをしにくい場所の実装を薄くしたことによりピュアロジックが充実 →ユニットテストを具体的にイメージしやすい

Jest Tips

  • Tip:JestのspyOn()を使うとモックの作成が簡単にできる
  • Tip: Parameterizeを利用して入力、期待値をペアでまとめていろんなパラメータでテスト

E2E テスト

  • サービスの仕事ぶりを確認するテスト
  • 画面テストに限定されるわけではない
  • 動作確認をテストに落とす
  • まずは正常系で一本通るようにする

  • リクエスト:
    • 外部サービスコールタイプ
    • テスト範囲を責任範囲内に限定する
  • ピュアロジックを増やして導入時のコスパをあげる

  • はじめかたはこんな感じ、最終的には全部ちゃんとテストを書きましょう〜

資料:

【登壇資料】ServerlessDays Fukuoka 2019 で TypeScriprt と Jest を使ったサーバーレステストの話をしました

懇親会

わいわい

所感

全てを視聴できたわけではないのですが、どれも内容の濃いセッションばかりで楽しめました。 また機会があればぜひ参加したいです。運営、登壇者のみなさん、本当にありがとうございました、お疲れ様でした。