Slide 1

Slide 1 text

開発現場に効く?サーバーレス 明日から始めるちょい足し λ Tech-on MeetUp #01 July 9, 2018 Ryo NAKAMARU, SUPINF Inc. / Rescale, Inc.

Slide 2

Slide 2 text

中丸 良 @pottava • CTO at SUPINF Inc. / Software Engineer at Rescale, Inc. • ずーっとソフトウェア開発職 • Windows 独自プロトコルのクラサバシステムから始まり • 製造業・研究機関向け機械学習基盤、Cloud HPC の SaaS 基盤など Profile !2

Slide 3

Slide 3 text

SUPINF Inc. !3 • クラウド / コンテナ 中心のコンサルティング / 環境構築 / 受託開発 / 運用 • 一方ではオンプレ × Kubernetes な機械学習環境なども • スピンフ、と読みます

Slide 4

Slide 4 text

Rescale, Inc. !4 • クラウド HPC プラットフォームを SaaS で提供 • 商用アプリケーションを使ったシミュレーションをスケーラブルに • 航空宇宙、自動車、石油ガス、ライフサイエンス、機械学習、etc..

Slide 5

Slide 5 text

テーマ !5 開発現場に効く (改善策を探して導入したら、結果的に) サーバーレス (というか Lambda だった話 + その過程)

Slide 6

Slide 6 text

でもその前に、まず、懺悔 !6

Slide 7

Slide 7 text

AWS Lambda、想像以上に 難しい        。 始めるのは簡単ですが、後悔なきよう 導入の判断 は慎重に !7 「明日から始める」 なんて書いてますが

Slide 8

Slide 8 text

サーバーレス !8 • 特徴 や 使いどころ は事前にしっかり把握しましょう • 苦労してでも使うべきところは 多々ある が • メンテナンスし続けるコスト、全くもって無視できない • 研究、PoC 期間を ちゃんと設けて 小さめにスタート〜

Slide 9

Slide 9 text

今日の話 !9

Slide 10

Slide 10 text

トピック !10 • 社内事例 1: 共有された情報の検索 • 社内事例 2: 秘密情報の管理 • 社内事例 3: 関係者用確認サイトのアクセス制御 • 一般的な開発プロセスと、よくある課題 • 明日から始まる λ の運用

Slide 11

Slide 11 text

社内事例 !11

Slide 12

Slide 12 text

社内事例 1: 共有された情報の検索 !12 • スプリント振り返りでの頻出 Problem?「情報共有」 • Confluence, DocBase, Google Drive, .. どこにあるの? • ドキュメントの構造化・周知以外にできることは? • Chat に #onboarding チャンネル を作るのも大切だけど・・ • 機械に任せよう、bot に検索させよう

Slide 13

Slide 13 text

Blueprints で探してみる !13 • Lambda 作成の強い味方 • 100 種類超のテンプレート • Slash commands の応答として slack-echo-command-python をベースに 検索 API を実行 • kmsEncryptedToken の設定で アクセスを制御しましょう

Slide 14

Slide 14 text

社内事例 2: 秘密情報の管理 !14 • 目的: 各環境の秘密の情報の安全な管理 • 条件: • MUST: 権限 のある人のみが閲覧を許可される • MUST: 変更した人と時間が 履歴に残る • SHOULD: プロジェクトごとの集約管理 • MAY: 機械(CFn / CLI)からも人間からも扱いやすい • MAY: 安い

Slide 15

Slide 15 text

binxio/cfn-secret-provider !15 • 明確なゴールが事前に決まれば OSS にも有用な情報は豊富! • 選んだのは cfn-secret-provider • なんと先ほどの条件をほぼ満たす • CFn ベースの解決策を採ったのは 社内の歴史的背景あってのこと

Slide 16

Slide 16 text

supinf/secrets-provider(非公開) !16 • DB パスワード、RSA 証明書、API キーなどを保管する機能群 • AWS アカウントごとに一つ、CFn スタックを作成 • binxio/cfn-secret-provider とは思想が異なるため PR せず • 社内の 運用手順 や既存資産に合わせたもの • OSS に極力追従しやすいよう変更は最小限 • IAM ユーザ・権限、KMS の鍵管理

Slide 17

Slide 17 text

余談: GitHub の歩き方 !17 • awesome-xxx といったまとめリポジトリ • サーバーレスありきの課題解決は滅びればいいと思いつつ • 調査段階では awesome-serverless などで探すのは有用 • aws / awslabs / aws-samples の散策も有意義 • firebase / GoogleCloudPlatform / GoogleContainerTools

Slide 18

Slide 18 text

社内事例 3: 関係者用確認サイトのアクセス制御 !18 • 目的: 検収などで使うサイトのアクセス制御 • 条件: • MUST: 納品物への IP アドレス制限(後から変更できること) • SHOULD: Basic 認証、API キーによる制限もできる • SHOULD: インフラ含め バージョン管理 できること • MAY: 静的ファイルが対象でも同じアーキテクチャが使える • MAY: 安い

Slide 19

Slide 19 text

AWS Lambda@Edge !19 • AWS の CDN、CloudFront 上で 動作する Lambda 関数 • 先の条件を全て満たしていた • S3 上でも OK なのは嬉しい • 検証用のアクセス頻度なら   コストも気にならない

Slide 20

Slide 20 text

AWS Lambda@Edge 利用例 !20 • git 管理、CI / CD パイプラインでファイアウォールが変更できる • 環境変数が使えない不自由など、諸事情あり SAM ではなく 通常の CloudFormation スタックとしてデプロイ • すべてレビューされ、バージョン管理される安心感 • おまけ 1: CloudFront 各種機能を本番想定で設定、利用できる • おまけ 2: ’/’ への要求に ‘/index.html’ のコンテンツを返せる

Slide 21

Slide 21 text

社内事例についてのまとめ !21 • 開発目線での大規模な本番導入には慎重に、運用とても大切 • 導入する場合も、ちゃんと 運用できるできる形 で!! • 公式テンプレートや OSS で利用できるものは積極的に活用 • AWS のマネージドサービスの理解もとても大切

Slide 22

Slide 22 text

一般的な開発プロセスと、よくある課題 !22

Slide 23

Slide 23 text

運用プロセスも改善したいですよね、もちろん !23

Slide 24

Slide 24 text

開発プロセス !24 開発 CI リリース 運用 情報収集

Slide 25

Slide 25 text

開発プロセス !25 開発 CI リリース 運用 情報収集 情報共有 あれどこだっけ? スケジュール 誰が何してる? 各種試験 テストが増えて 時間かかりすぎ・・ 秘密情報の管理 ステータス 状況の通知 死活監視 メトリクス 収集

Slide 26

Slide 26 text

開発現場に効く Try を考える !26 • もちろん、技術以外で解決すべき課題はたくさんある、が • 繰り返される課題 は技術的に解決する(できないか考える) • ツールを最初に思い浮かべない努力 • 安易に自作しようとしない • 新技術を研究する時間は 別途とり、かつ 成果は義務付けない

Slide 27

Slide 27 text

GitHub おもしろサーバーレスプロジェクト集 〜 Lambda でできることの発想を広げる 〜 !27

Slide 28

Slide 28 text

toricls/pingbot !28 Lambda による定期的な HTTP(S) ヘルスチェッカー

Slide 29

Slide 29 text

ks888/LambStatus !29 Lambda による管理者サイト付きステータスページ

Slide 30

Slide 30 text

lambci/lambci !30 多言語に対応し、Slack 連携した Lambda で動く CI ツール

Slide 31

Slide 31 text

prismagraphql/chromeless !31 ブラウザテストを Lambda で!ヘッドレス Chrome

Slide 32

Slide 32 text

prismagraphql/chromeless !32 ブラウザテストを Lambda で!ヘッドレス Chrome • API Gateway と API キーを使ってアクセス元を制御 • レンダリング結果をスクレイピングして JSON を返すのも S3 に スクリーンショット を保存するのもかんたん • CI からわざわざ Lambda にテストを委譲する? • テストコードのみやすさ と並列実行のメリットを天秤に • ローカルからも実行しやすいというよさはある

Slide 33

Slide 33 text

grycap/scar !33 Lambda で Docker イメージを実行!!選択肢を広げよう なにこれ ちょっと キモい

Slide 34

Slide 34 text

grycap/scar !34 Lambda で Docker イメージを実行!!選択肢を広げよう • 制約を乗り越えれば大抵のものが Lambda で動かせるという期待 • 当然、圧縮 + 展開イメージサイズ 512 MB 以内 & 実行 5 分 以内 • 内部的には Fakeroot が利用されているため glibc 必須 .. ≒ udocker ベースなので Alpine Linux は動かない

Slide 35

Slide 35 text

明日から始まる λ の運用 !35

Slide 36

Slide 36 text

運用のためのヒント !36 • 関連リソースを含め SAM で定義、CI/CD パイプラインを組む • git 以外から更新しない、IAM ユーザに権限を与えない • CloudWatch Metrics • Errors, Duration, Throttles, .. • 導入する機能の 特性に応じて Alarm を設定 • CloudWatch Logs メトリクスフィルター • ログから異常などが検知できるものには Alarm を設定

Slide 37

Slide 37 text

社内からの声 !37 • 最近「それサーバーレスにした理由は?」とよく聞きます • API Gateway / Cognito 拡張は 学習・運用コスト を考慮すべき • 通常のサーバーサイドでの実装との比較、慎重に • Lambda がなくても最近 SAM で CFn デプロイしてます(SAM 賞賛) • ChangeSets が考慮される & create / update の概念がなく簡素 • 過激派が自由に仕事をしていた弊社、採用中ですよ?

Slide 38

Slide 38 text

次回予告 !38

Slide 39

Slide 39 text

!39 サーバーフル 13:00 - 13:45 E ルーム

Slide 40

Slide 40 text

ご静聴ありがとうございました 参考文献: • A CloudFormation custom resource provider for deploying secrets and keys https://github.com/binxio/cfn-secret-provider • Using the AWS Serverless Application Model (AWS SAM) https://docs.aws.amazon.com/lambda/latest/dg/serverless_app.html • AWS Lambda のメトリクスおよびディメンション https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/lam- metricscollected.html