Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Serverless技術勉強会#2 Chatwork登壇資料

shimosyan
January 15, 2020

Serverless技術勉強会#2 Chatwork登壇資料

shimosyan

January 15, 2020
Tweet

More Decks by shimosyan

Other Decks in Technology

Transcript

  1. 2
    © Chatwork


    View full-size slide

  2. 3
    © Chatwork
    ● Lambda が何となく分かる人
    ● Serverless で複雑なバッチ処理が組みたい人
    ● AWS のリソースをコード管理し自動でデプロイしたい人
    ● 監視の仕組みを作って不具合や障害に気付ける運用をしたい人

    View full-size slide

  3. 4
    © Chatwork
    自己紹介
    ❖ 名前:苅谷 直希 / Naoki Kariya
    ❖ 所属:CSE 部
    ❖ 職業:コーポレートエンジニア
    ➢ 2018 年 11 月から Chatwork ㈱にジョイン
    ➢ 副業で同人作家やっています @shimosyan
    ❖ 岐阜でフルリモート勤務をしています
    ❖ Serverless 歴は 1 年ちょっと
    ❖ 本当はLANケーブルをいろんな機械に刺したりSSHでコマンド叩くのが好き

    View full-size slide

  4. 5
    © Chatwork
    01

    View full-size slide

  5. 6
    © Chatwork
    会社概要
    会社名 Chatwork株式会社
    代表者名 代表取締役CEO兼CTO 山本 正喜
    資本金 1,358,138,500円
    従業員数 106名(2019年12月末日時点)
    所在地 東京、大阪、ベトナム、台湾
    設立 2004年11月11日
    事業内容 ビジネスチャット「Chatwork」の開発・運営
    コーポレートミッション

    View full-size slide

  6. 7
    © Chatwork
    Chatwork とは
    効率的に情報共有できる 仕事の見える化ができる 見落としがなくなる いつでも会議ができる

    View full-size slide

  7. 8
    © Chatwork
    02

    View full-size slide

  8. 9
    © Chatwork
    CSE 部とは?
    (Corporate Solution Engineer)
    SaaSのインテグレーションや自動化などあらゆる手段を駆使して手作業を減らし、
    スタッフが業務に集中できる環境づくりを目指しています。

    View full-size slide

  9. 10
    © Chatwork
    CSE 部の役割
    社内システムの開発・運用 オフィスネットワークや SaaS の運用
    支給 PC や設備デバイスの管理 ISMS の運用・管理
    ● ID 管理
    ● API 連携
    ● Wifi パスワードの変更
    ● トラブルシューティング
    ● SaaS 化できない処理のシステム化
    ● 監視・保守
    ● ヘルプデスク
    ● 修理手配
    ● 在庫管理
    ● トラブルシューティング
    ● セキュリティルールの作成
    ● 内部監査の実施
    ● 認証の取得

    View full-size slide

  10. 11
    © Chatwork
    なぜ Serverless が必要なのか?
    現実
    現実
    現実
    利点 利点
    利点 利点
    理想
    理想
    理想

    View full-size slide

  11. 12
    © Chatwork
    03

    View full-size slide

  12. 13
    © Chatwork
    事例 1:Serverless で RPA

    View full-size slide

  13. 14
    © Chatwork
    Serverless で RPA
    SaaS 間の連携をおこない自動化を推進したが、一部の SaaS は API を外
    部に公開しておらず、手作業で操作するしか手段がなかった。
    Web アプリケーションの操作を自動化する RPA を構築し、API を通じ
    て操作できるようにする!

    View full-size slide

  14. 15
    © Chatwork
    AWS Cloud
    VPC
    Private subnet
    AWS Step Functions workflow
    RPA アーキテクチャ図
    Public subnet
    Internet
    Lambda
    NAT gateway Internet
    gateway
    Elastic IP
    address
    10.0.10.0/24
    10.0.1.0/24
    10.0.0.0/16
    Lambda
    Lambda
    Users
    Client
    API Gateway
    Lambda Layers
    定期実行
    Web 操作を実行
    処理結果に応じて通知
    などの処理を実施
    事前処理を行った後、
    本処理を開始
    Lambda からの通信を固定 IP化
    Cloud Watch
    Events
    パケットの流れ
    処理の流れ
    Secrets Manager
    SaaSのログイン情報は
    Secrets Managerに
    保存
    Webhook
    or Notification

    View full-size slide

  15. 16
    © Chatwork
    工夫したところ ① - Lambda Layer を活用し容量制限を回避
    AWS Document : Lambda Layer
    Lambda
    Lambda
    Zip
    Max 50 MB
    Zip
    Zip
    Lambda Layer
    Max 50 MB
    Max 50 MB
    Lambda への Deploy には 50MB の容量制限があります。Chromium バイナリが約 40MB のため実
    装によっては容量制限を超える可能性がありました。
    Chromium などのライブラリを Lambda Layer に寄せることで実装時のリスクの解消に成功。
    Success?
    Failed?
    Success
    Success

    View full-size slide

  16. 17
    © Chatwork
    工夫したところ ② - 全リソースのコード管理 & CI/CD の構築
    AWS Cloud
    Developer
    Git push Git webhook
    CloudFormation
    CodeBuild
    Lambda
    API Gateway
    Step Functions
    Template
    Result
    GitHub

    View full-size slide

  17. 18
    © Chatwork
    工夫したところ ② - 全リソースのコード管理 & CI/CD の構築
    GitHub に、テスト用の CodeBuild が通らないと Merge できないようにしています。もちろん、
    Merge すると CodeBuild が本番環境に Deploy してくれます。
    ↑ Typescript + Jest で
    Chatwork に正しく POST できるかをテスト

    View full-size slide

  18. 19
    © Chatwork
    工夫したところ ③ - 監視体制の構築
    AWS Cloud
    Lambda
    API Gateway
    Step Functions CloudWatch
    Collect Logs and
    Metrics Alert
    Datadog

    View full-size slide

  19. 20
    © Chatwork
    工夫したところ ③ - 監視体制の構築
    エラー時は Datadog から Alert が発火します。Dashboard にエラーログがピックアップされるよ
    うにしてあり、迅速な原因特定ができるよう整えています。

    View full-size slide

  20. 21
    © Chatwork
    事例 2:Serverless で ETL

    View full-size slide

  21. 22
    © Chatwork
    Serverless で ETL
    ログデータの分析は、これまで BI ツールに生のログデータを投入→BI
    ツール内で加工し保存をおこなっていたが、生のログデータが膨大すぎ
    て月間インポート数の上限値に達してしまった。
    BI ツールに投入する前に、事前に加工をおこなうことで投入時のデータ
    量を最適化する!

    View full-size slide

  22. 23
    © Chatwork
    ETL アーキテクチャ図
    AWS Cloud
    - Chatwork Production Account
    AWS Cloud - CSE Account
    S3
    Log Bucket
    Glue
    Crawler
    Glue
    Data Catalog
    AWS Step Functions workflow
    Athena
    Lambda
    集計ジョブごとに
    Step Functions を実行し並列化
    EC2 EC2
    S3
    Bucket Policy
    CREATE TABLE AS で集計テーブルを作成
    テーブルデータは S3にCSV保存するオプションを有効化
    定期実行
    Cloud Watch
    Events
    Lambda Lambda
    クエリを実行 クエリ完了を監視
    (Step Functions で定期実行)
    アクセスログを抽出
    集計が完了したら、
    TreasureData をAPIから叩いて起動
    Secrets Manager
    BIツールのAPIキーは
    Secrets Manager に保存

    View full-size slide

  23. 24
    © Chatwork
    工夫したところ ④ - Step Functions の活用
    “条件やループが組める” ため、
    Lambda の責務を明確にできる & コード量が減る
    監視に必要な”待ち”の処理を SFunc に定義できる
    (SFunc は状態遷移ごとの課金のため
    実行時間は問われない)
    コンソール上で実行経過・結果がわかる

    View full-size slide

  24. 25
    © Chatwork
    ハマったこと
    AWS Cloud
    - Chatwork Production Account
    AWS Cloud - CSE Account
    S3
    Log Bucket
    Glue
    Crawler
    Glue
    Data Catalog
    AWS Step Functions workflow
    Athena
    Lambda
    集計ジョブごとに
    Step Functions を実行し並列化
    EC2 EC2
    S3
    Bucket Policy
    CREATE TABLE AS で集計テーブルを作成
    テーブルデータは S3にCSV保存するオプションを有効化
    定期実行
    Cloud Watch
    Events
    Lambda Lambda
    クエリを実行 クエリ完了を監視
    (Step Functions で定期実行)
    アクセスログを抽出
    Secrets Manager
    集計が完了したら、
    TreasureData をAPIから叩いて起動
    BIツールのAPIキーは
    Secrets Manager に保存
    実はこの構成、一箇所ハマリポイントがあります。

    View full-size slide

  25. 26
    © Chatwork
    ハマリポイントはここだ!
    AWS Cloud
    - Chatwork Production Account
    AWS Cloud - CSE Account
    S3
    Log Bucket
    Glue
    Crawler
    Glue
    Data Catalog
    AWS Step Functions workflow
    Athena
    Lambda
    集計ジョブごとに
    Step Functions を実行し並列化
    EC2 EC2
    S3
    Bucket Policy
    CREATE TABLE AS で集計テーブルを作成
    テーブルデータは S3にCSV保存するオプションを有効化
    定期実行
    Cloud Watch
    Events
    Lambda Lambda
    クエリを実行 クエリ完了を監視
    (Step Functions で定期実行)
    アクセスログを抽出
    Secrets Manager
    BIツールのAPIキーは
    Secrets Manager に保存
    集計が完了したら、
    TreasureData をAPIから叩いて起動

    View full-size slide

  26. 27
    © Chatwork
    Bucket Policy の影響範囲
    AWS Cloud
    - Chatwork Production Account
    AWS Cloud - CSE Account
    S3
    Log Bucket
    Glue
    Crawler
    Glue
    Data Catalog
    AWS Step Functions workflow
    Athena
    Lambda
    集計ジョブごとに
    Step Functions を実行し並列化
    EC2 EC2
    S3
    Bucket Policy
    CREATE TABLE AS で集計テーブルを作成
    テーブルデータは S3にCSV保存するオプションを有効化
    定期実行
    Cloud Watch
    Events
    Lambda Lambda
    クエリを実行 クエリ完了を監視
    (Step Functions で定期実行)
    アクセスログを抽出
    Secrets Manager
    BIツールのAPIキーは
    Secrets Manager に保存
    集計が完了したら、
    TreasureData をAPIから叩いて起動
    Glue
    Crawler
    Glue
    Data Catalog
    Athena
    Lambda
    クエリを実行
    結論から述べると、Bucket Policy に読み取りを許可する IAM リソースを指定する場合は下図リ
    ソース分の実行 IAM Role を指定する必要があります。もちろん、実行 IAM Role 自体にも S3 の読
    み取り許可を定義する必要があります。
    (Athena はクエリを叩いた実行 Role(= Lambda 実行 Role)に依存します。)
    Bucket Policy
    ↑ハマりすぎて SRE 部の人に
    助けを求める人の図

    View full-size slide

  27. 28
    © Chatwork
    コストについて
    AWS 無料利用枠
    1,000,000 件/月 の実行 & 3,200,000 秒/月 の実行時間※ 4,000 回/月 の状態遷移
    ※ 割り当てるメモリ使用量によって変動します
    $ 0.00 $ 8.24
    $ 0.20 $ 2.77
    $ 0.00 $ 79.92
    $ 36.11 $ 92.38
    $ 1.60 $ 0.75

    View full-size slide

  28. 29
    © Chatwork
    まとめ
    ● Step Functions を活用することで複雑なバッチ処理を実現できる
    ● Cloud Formation と CodeBuild を使えば、GitHub でコード管理が可能
    ● Datadog や CloudWatch Alert を使うと障害性に備えられる
    ● たくさん動かしても、ほとんどお金はかからない

    View full-size slide

  29. 30
    © Chatwork
    Chatwork株式会社では一緒に働く仲間を
    募集しています

    View full-size slide

  30. 働くをもっと楽しく、創造的に

    View full-size slide