明日から始めるちょい足し λ / get-started-with-aws-lambda

明日から始めるちょい足し λ / get-started-with-aws-lambda

Tech-on MeetUp #01「開発現場に効くサーバーレス」でお話ししました

1e5a15f4dc65c207a04a1e82a3f92e92?s=128

ryo nakamaru

July 09, 2018
Tweet

Transcript

  1. 2.

    中丸 良 @pottava • CTO at SUPINF Inc. / Software

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

    SUPINF Inc. !3 • クラウド / コンテナ 中心のコンサルティング / 環境構築

    / 受託開発 / 運用 • 一方ではオンプレ × Kubernetes な機械学習環境なども • スピンフ、と読みます
  3. 4.

    Rescale, Inc. !4 • クラウド HPC プラットフォームを SaaS で提供 •

    商用アプリケーションを使ったシミュレーションをスケーラブルに • 航空宇宙、自動車、石油ガス、ライフサイエンス、機械学習、etc..
  4. 8.

    サーバーレス !8 • 特徴 や 使いどころ は事前にしっかり把握しましょう • 苦労してでも使うべきところは 多々ある

    が • メンテナンスし続けるコスト、全くもって無視できない • 研究、PoC 期間を ちゃんと設けて 小さめにスタート〜
  5. 10.

    トピック !10 • 社内事例 1: 共有された情報の検索 • 社内事例 2: 秘密情報の管理

    • 社内事例 3: 関係者用確認サイトのアクセス制御 • 一般的な開発プロセスと、よくある課題 • 明日から始まる λ の運用
  6. 12.

    社内事例 1: 共有された情報の検索 !12 • スプリント振り返りでの頻出 Problem?「情報共有」 • Confluence, DocBase,

    Google Drive, .. どこにあるの? • ドキュメントの構造化・周知以外にできることは? • Chat に #onboarding チャンネル を作るのも大切だけど・・ • 機械に任せよう、bot に検索させよう
  7. 13.

    Blueprints で探してみる !13 • Lambda 作成の強い味方 • 100 種類超のテンプレート •

    Slash commands の応答として slack-echo-command-python をベースに 検索 API を実行 • kmsEncryptedToken の設定で アクセスを制御しましょう
  8. 14.

    社内事例 2: 秘密情報の管理 !14 • 目的: 各環境の秘密の情報の安全な管理 • 条件: •

    MUST: 権限 のある人のみが閲覧を許可される • MUST: 変更した人と時間が 履歴に残る • SHOULD: プロジェクトごとの集約管理 • MAY: 機械(CFn / CLI)からも人間からも扱いやすい • MAY: 安い
  9. 15.

    binxio/cfn-secret-provider !15 • 明確なゴールが事前に決まれば OSS にも有用な情報は豊富! • 選んだのは cfn-secret-provider •

    なんと先ほどの条件をほぼ満たす • CFn ベースの解決策を採ったのは 社内の歴史的背景あってのこと
  10. 16.

    supinf/secrets-provider(非公開) !16 • DB パスワード、RSA 証明書、API キーなどを保管する機能群 • AWS アカウントごとに一つ、CFn

    スタックを作成 • binxio/cfn-secret-provider とは思想が異なるため PR せず • 社内の 運用手順 や既存資産に合わせたもの • OSS に極力追従しやすいよう変更は最小限 • IAM ユーザ・権限、KMS の鍵管理
  11. 17.

    余談: GitHub の歩き方 !17 • awesome-xxx といったまとめリポジトリ • サーバーレスありきの課題解決は滅びればいいと思いつつ •

    調査段階では awesome-serverless などで探すのは有用 • aws / awslabs / aws-samples の散策も有意義 • firebase / GoogleCloudPlatform / GoogleContainerTools
  12. 18.

    社内事例 3: 関係者用確認サイトのアクセス制御 !18 • 目的: 検収などで使うサイトのアクセス制御 • 条件: •

    MUST: 納品物への IP アドレス制限(後から変更できること) • SHOULD: Basic 認証、API キーによる制限もできる • SHOULD: インフラ含め バージョン管理 できること • MAY: 静的ファイルが対象でも同じアーキテクチャが使える • MAY: 安い
  13. 19.

    AWS Lambda@Edge !19 • AWS の CDN、CloudFront 上で 動作する Lambda

    関数 • 先の条件を全て満たしていた • S3 上でも OK なのは嬉しい • 検証用のアクセス頻度なら   コストも気にならない
  14. 20.

    AWS Lambda@Edge 利用例 !20 • git 管理、CI / CD パイプラインでファイアウォールが変更できる

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

    開発プロセス !25 開発 CI リリース 運用 情報収集 情報共有 あれどこだっけ? スケジュール

    誰が何してる? 各種試験 テストが増えて 時間かかりすぎ・・ 秘密情報の管理 ステータス 状況の通知 死活監視 メトリクス 収集
  16. 26.

    開発現場に効く Try を考える !26 • もちろん、技術以外で解決すべき課題はたくさんある、が • 繰り返される課題 は技術的に解決する(できないか考える) •

    ツールを最初に思い浮かべない努力 • 安易に自作しようとしない • 新技術を研究する時間は 別途とり、かつ 成果は義務付けない
  17. 32.

    prismagraphql/chromeless !32 ブラウザテストを Lambda で!ヘッドレス Chrome • API Gateway と

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

    grycap/scar !34 Lambda で Docker イメージを実行!!選択肢を広げよう • 制約を乗り越えれば大抵のものが Lambda で動かせるという期待

    • 当然、圧縮 + 展開イメージサイズ 512 MB 以内 & 実行 5 分 以内 • 内部的には Fakeroot が利用されているため glibc 必須 .. ≒ udocker ベースなので Alpine Linux は動かない
  19. 36.

    運用のためのヒント !36 • 関連リソースを含め SAM で定義、CI/CD パイプラインを組む • git 以外から更新しない、IAM

    ユーザに権限を与えない • CloudWatch Metrics • Errors, Duration, Throttles, .. • 導入する機能の 特性に応じて Alarm を設定 • CloudWatch Logs メトリクスフィルター • ログから異常などが検知できるものには Alarm を設定
  20. 37.

    社内からの声 !37 • 最近「それサーバーレスにした理由は?」とよく聞きます • API Gateway / Cognito 拡張は

    学習・運用コスト を考慮すべき • 通常のサーバーサイドでの実装との比較、慎重に • Lambda がなくても最近 SAM で CFn デプロイしてます(SAM 賞賛) • ChangeSets が考慮される & create / update の概念がなく簡素 • 過激派が自由に仕事をしていた弊社、採用中ですよ?
  21. 40.

    ご静聴ありがとうございました 参考文献: • 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