tsalakh ain sus noam Huyah ol guf

勉強会のメモ。その他備忘録。参考にさせて頂いたサイトや資料はリンクさせて頂いていますが不都合があればご連絡ください。

【勉強会】NoOps Tokyo Meetup #3

20181207_NoOpsMeetupTokyo#3

noops.connpass.com


AWSマインドセット

光り輝くTBD(仮)

AWS Japan 西谷 圭介 さん

Undifferentiated Heavy Lifting

  • 付加価値を産まない作業のこと
  • 認証認可って必要だけどそれ自体は価値を産まないよね、とか

プロダクトを差別化するのはソフトウェア

  • ビジネスロジックを集中して書く環境を整えましょうということ
  • 今日は、Amazonではどうしているか?という話

Amazonのアプローチ

→Microservices/DevOps

組織体制

Two-pizza Teams

  • 作るものに対する全てを負う
  • ロードマップ/開発/運用/カスタマーサポート
  • 独立性高く、個別に、全部やる
  • QAもTwo-pizza Team
  • オンコールもTwo-pizza Team

Opsは何をするのか

  • Opsというポジションは存在しない
  • SREもいない
  • 各チームに各役割に集中するメンバーを置く

チームの水準を高く維持するために

  • オンボーディング/トレーニン
  • パターン/プラクティス
  • 組織的なナレッジ
  • レビュー
  • OurLeadershipPrinciples、Amazonの行動規範、文化として浸透している

特にテストを重視している

テストで大事なこと

  • Automate Everything
  • テストをしやすいようにアーキをデザインする

運用で大事なこと

  • Automate Everything
  • Two-pizza Teamsは人が少ないので自動化大事

まとめ

運用ゼロは幻想、NoOpsは難しくてもLessOps


テスト自動化/自動回復

Serverlessの自動化と自動回復のためのアーキテクチャ

Microsoft 牛尾剛 さん

www.slideshare.net

今日のキーワード

  • サーバレス
  • 自動化
  • 自動回復

Markdown Translator

Markdown Translator

テストピラミッド

  • E2E/ITは、SmokeTest、HappyPath、いくつかの異常系、ぐらいにしておく
  • UTが80%くらい

テストがないコードは存在しないと同じ

よいユニットテストとは

  • リグレッションエラーを検出できる
  • False Positive(モックが本来落ちないといけないところで落ちない、とか)の割合が少ない
  • 素早いフィードバック
  • メンテナンスコストが低い
  • シンプル

Heaganal Architecture

  • アリスターコバーンが提唱
  • Domain 素のクラス
  • ApplicationLayer 他との会話
  • その周りにいろんなサービス

モックをどこでやるか

  • できるだけDomainから離れた、境界をモックにする
  • なるべく自分の書いたコードをテストするようにする
  • ApplicationLayerにロジックを書かず、Domainにロジックを書く
    • Contorollerにロジックを書かないイメージ
    • Domainはモックもなくテスト可能だから
  • ネットワークコールとかどうしようもないところだけモックにする

DIとWrapper

  • モックしたいクラスには絶対Interfaceをつける
  • Interface単位でモックにできるから
  • ライブラリでInterfaceがない時は、Wrapperで包む

テスト可能な設計のためのTips

  • Domain Object
  • コラボレータとの接点をMockする
  • Bindingsを使う
  • 単一責務の法則 一つのクラスやメソッドの役割は一つにする
  • インターフェースの導入、だめならWrapper
  • リポジトリパターンを使う

自動回復のためのアーキテクチャ

Durability Functions

回復させたい単位をなるべく小さく作ってリトライさせる

自動回復のためのポイント

  • 単一責務の法則(Single Responsibility Principal)
  • 冪等性
  • リトライしたい単位で小さく関数化する