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

ECS Fargate build on AWS CodeBuild

Yuto Komai
November 15, 2018

ECS Fargate build on AWS CodeBuild

2018/11/15 Amazon Game TechNight #8 で発表した資料です。

オレ的最強ECS & Fargate build環境 on AWS
- CodeBuild 基本編
- CodeBuildを使った実際のパイプライン紹介
- CodeBuild 応用編

https://amazongametechnight08.splashthat.com/

キーワード
#AWS #docker #CodeBuild #CodePipeline #ECS #Fargate #Jenkins #Deploy #ContinuousDelivery

Yuto Komai

November 15, 2018
Tweet

More Decks by Yuto Komai

Other Decks in Technology

Transcript

  1. 自己紹介 氏名 / 経歴 - 駒井祐人 @e__koma - NTT DATA

    - ミッションクリティカルシステム 設計構築 - Akatsuki Inc. - Store上位タイトル開発/運用経験1年半 - リリース直前の負荷対策4タイトル 座右の銘 - あらゆる人間関係の衝突はカレーの欠如によるものだ # サーバサイド/インフラ # VTuber / xRTech # カレー # ハッカソン/イベント運営
  2. CodeBuildのうれしみ - サーバレス + スケーラビリティ - AWS各種サービスとの連携 - SSMパラメータストア -

    秘匿情報の管理が超楽に - 従量課金 - VPC内で実行が可能 - CodeBuildからEC2/RDSアクセス可能 - 豊富なビルド環境 - さまざまな言語サポート - カスタムDokcer Imageも可能 - CloudFormationで管理可能 - 環境を作れば、ビルド環境も一緒に作れる
  3. すなわち (1章まとめ) docker build on Jenkinsのつらい部分… Jenkins CodeBuild マシンスペック そこそこ必要

    small / medium / largeの3タイプ (スケールするためsmallで十分満たす) 同時実行数 master並列数を超えると詰ま る or Slave 上限申請したら気にすることがなくなる。 (デフォルト20) メンテナンス つらい メンテレス セキュリティ 秘匿情報がもりもり SSMパラメータストアとの連携 コスト 起動している時間 従量課金
  4. すなわち (1章まとめ) docker build on Jenkinsのつらい部分… 解決!! Jenkins CodeBuild マシンスペック

    そこそこ必要 small / medium / largeの3タイプ (スケールするためsmallで十分満たす) 同時実行数 master並列数を超えると詰ま る or Slave 上限申請したら気にすることがなくなる。 (デフォルト20) メンテナンス つらい メンテレス セキュリティ 秘匿情報がもりもり SSMパラメータストアとの連携 コスト 起動している時間 従量課金
  5. そもそもCodePipelineとは? AWSが提供するフルマネージドパイプラインサービス - Source / Build / StagingのステップをGUI/CLIでカスタム可能 - AWS

    Integrationが豊富 - CodeDeploy - ECSデプロイ - CloudFormation - Lambda - GitHubのpush hookによるCI/CD - 手動承認も可能
  6. なぜCodePipelineを使わないのか? ゲーム開発の現場では - 複数環境 - dev/staging/feature/QA …etc - 複数条件 -

    ゲームマスタのversion - アセットのversion - これらを非エンジニアがデプロイ
  7. Jenkins Blue Ocean シンプルかつ美しいJenkins UI - 非エンジニアでも分かりやすい - classic UIは過去の遺物

    - 弊社内ではTeenager風 Jenkins - step単位のログの見やすさ - CodeBuild Plugin - Jenkinsはビルド命令を投げるだけ - master 1nodeで並列数を山盛り上げれる - 構築はOfficial Docker Imageを起動するだけ - Pipeline as a CodeのGUI support
  8. このアーキテクチャを採用して幸せになったこと (2章まとめ) - インタフェースが直感的 - 誰でもボタンポチでデプロイ - 進捗が追える - スケーラビリティ

    - JenkinsはCodeBuildに命令しているだけなのでパワーが不要 - t3.smallサーバ1台で10環境ビルドでもマシンリソースすっかすか - コスト減 - 2018/10のビルド料金は $20 - 自動で構築できるビルド環境 - Pipeline as a Code - CloudFormation管理 - メンテレス
  9. その他 Docker 18.09 以降 (2018/11/08〜) をCodeBuildがsupportしてくれるとより一層夢が広 がる - multi stage

    buildの並列ビルド - 2倍高速化できるという事例も - cache mount - うまく活用して30倍以上高速化を実現した事例も 引用:https://medium.com/nttlabs
  10. 2.バッチ処理 メリット - ビルド済みのアプリケーションロジックを再利用できる - Lambdaでは実現しづらい。 - サーバレス - バッチサーバの必要がなくなりメンテレス

    - 従量課金 - 長時間バッチ、並列バッチも可能 デメリット - CodeBuildのプロビジョニングに30〜40秒程度、余計な時間がかかる
  11. 3.セキュリティ Role / IAMキーの権限は最小にしたい - Role - 必要な権限のみを付与する - IAMキー

    - 必要な権限のみを付与する - IP制限 IAMキーにはIP制限をかけることができる! (キー情報が漏洩する最悪の状況でもリスク低減)
  12. 3章まとめ - ビルド高速化 - BestPracticeに沿ったImage軽量化を - ビルドキャッシュはlayer cachingがオススメ - バッチ処理

    - CodeBuildはサーバレスバッチ環境にも使えて幸せ - セキュリティ - ECRはinternet経由する。 - IAMキーにはIP制限をかけ、CodeBuildが利用するNAT GatewayのEIPを許可しよう
  13. 全体まとめ 第1章:CodeBuild 基本編 - CodeBuildの特徴を紹介。サーバレスかつスケーラビリティなbuild環境 第2章:事例紹介 - Jenkins Blue Ocean

    + CodeBuild連携で 清く正しく美しく 第3章:CodeBuild 応用編 - サーバレスバッチでメンテレスの運用を