「JAWS DAYS 2018」に参加してきました

A story of cloud journey with Community

Enterprise Serverlessを実現するための信頼性エンジニアリング

Serverlessとは

Serverlessの信頼性

FaaSの課題

  • テストどうやるか
  • functionの粒度
  • 他のfunctionやbackendとの連携
  • エラーハンドリング
  • トレーサビリティ/ログ

BaaSの課題

  • どのサービスをえらべばいいか
  • 監視

FaaSの実態

  • コンテナ内で非同期に呼び出される関数

BaaSの実態

信頼性の担保

  • 結局は今までの技術と同じだから信頼性担保はできる
  • 信頼性は自分で作る
    • アプリの層にいろいろ移ってきている
  • シンプルを保つ
    • functionの数はは多くても良い

Serverlessの設計

イベントは一方向に流す

  • 結果が必要なら同期で返さず取りに行かせる
  • 自然と非同期になる
    • 同期だとエラーハンドリングとか考えないと
    • 結果整合性/冪等性
    • リトライすればいい

サービス間のエンドポイントを集約する

  • マイクロサービス
    • ドメインでサービスを分ける
    • サービスごとに唯一のエンドポイントというわけではない
    • 特定のサービスの特定のオペレーションは1つのエンドポイントに

トレース

  • 一連の処理には同じIDを付与
  • ログ収集しましょう

データモデリング

  • RDBと相性悪い
    • 急激なコネクション
  • DynamoDB使おう

Serverlessの実装

  • ユニットテストを書く
    • ただの関数なので書ける
    • 依存サービスはモック化
  • DBとかつなげてやりたい場合
    • ServerlessFWとかSAMとか使う
  • E2Eテストも継続的に
    • traceableIDつけておく

監視

  • エラー通知をしっかり作ること
    • どんなエラーが出たか分かって追えるようにしておく
  • メトリクス取れるサービスはとる
    • データ制限あるサービスとかは確認
      • 何秒間に何回しか呼べないとか

まとめ

  • Serverlessは特別なものじゃない

ランチセッション

AWS Technical Evangelists Special talk session -スペシャトークセッション AWSとユーザーコミュニティが生み出すNo borderな未来-」

  • Jeff Barr
  • Randall Hunt
  • Julio Faerman
  • Channy Yun
  • 亀田 治伸

Alexa for Businessとワークスタイルの未来

働き方改革

  • 超長寿社会
  • 今までの働き方だとだめ
  • 柔軟な働き方

業務シーン

  • 情報を社外に出せない
    • 帰社しないと作業できない
  • 子育てとの両立

ソリューション案とベネフィット

AWSの提供するサービス

  • WorkSpaces
  • AppStream
  • Alexa

alexa for business

  • 色んな所における
    • 倉庫、会議室、受付
  • 生産性向上
    • 電話、会議スケジュール
  • 集中管理
    • バイス、ユーザ管理
      • SharedDevice
  • PersonalDevice
    • スキル管理
      • パブリックスキル
      • プライベートスキル

まとめ

  • AWSのサービスを活用することで
    • いつでも働ける
    • どこでも働ける
    • 誰とでも働ける
  • その中の1つとしてalexa for business

コンテナを守る技術 2018

Dockerイメージの安全性

  • DockerHubのイメージにもたくさんの脆弱性
    • オフィシャルのものでも
  • コンテナの機能を活かせば他への影響なしにセキュアなサービスを提供できる

AWSで構成するなら

  • ECSを使う
    • awsvpcモード
  • コンテナ(アプリ)毎にセキュリティグループを設定できる
  • Fargate
    • ホストを管理したくない場合

アプリ開発

  • CI
  • 実行時スキャン
    • アプリ実行時にポリシー違反がないかモニタリング

ホストとコンテナ

  • 守りやすい環境を整える
    • セグメントを分ける
    • クラスタを分割
    • ネットワークを分割
  • スケールアップよりスケールアウト
  • role.SGの解放は最小限に

ホストとコンテナ

Dockerコンテナ

  • リソースの分離はVMほど厳密じゃない
    • ホストのカーネルで走る
    • ホストのリソースをほぼ直接利用
  • リソース制約
    • ulimits
    • memory指定し超えたらコンテナ落とす
  • read only
    • いろいろオプションある
    • マウントしたフォルダ以外書き込み禁止
    • マウントしたフォルダの書き込み禁止
  • ルートユーザ使わない
  • 実行ファイルの管理
    • 不必要なファイルは削除/無効化
    • できれば静的リンクに
  • 通信を制限
    • 通信先/解放ポートも最小限に
  • システムコールを制限する

CI

  • Static Application Security Testingツール
  • Dockerイメージのポリシーを定義&チェック

deploy

  • aqua
    • AWSの各サービスとも統合された商用ツール
    • ECRのイメージ解析
    • 設定不備検知
    • 実行時防御
  • NeuVector

秘密情報

  • 2016年はS3に置いてIAM適切に
  • 環境変数だといろんなとこから見えちゃう

実践Serverless x Microservices