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

AWS CodePipelineで実現するCI/CD自動化 〜コミットからデプロイまで〜/The automation of CICD with AWS CodePipeline  

AWS CodePipelineで実現するCI/CD自動化 〜コミットからデプロイまで〜/The automation of CICD with AWS CodePipeline  

Yuki Fujita

July 04, 2019
Tweet

Other Decks in Technology

Transcript

  1. AWS CodePipelineで実現するCI/CD自動化
    〜コミットからデプロイまで〜
    2019/7/4 スペースマーケット 藤田勇希

    View full-size slide

  2. 2
    自己紹介
    ● 藤田 勇希
    ● バックエンドエンジニア
    ● 2018年11月にスペースマーケット入社
    ● 最近は1日1本映画見てる
    ● 好きな AWS サービス
    ○ AWS Lambda
    ○ AWS Dynamodb
    ○ AWS Batch
    ○ AWS CodePipeline

    View full-size slide

  3. 3
    今日お話すること
    ● AWS CodePiepeline とは?
    ● CI/CD の基本
    ● スペースマーケットの CI/CD の事例
    ○ CodePipeline 導入前の課題
    ○ CodePipeline 導入後に解決したこと
    ● AWS CodePipeline 導入に取り組んで得たノウハウ
    ○ 様々なシナリオへの応用
    ○ CI/CD の仕組みを横展開するためには

    View full-size slide

  4. 4
    今日お話しないこと
    ● CI/CD の細かいお話
    ● 発表に登場する AWS 各サービスの細かい説明
    ● AWS CodePipeline の具体的な設定方法
    ○ スペースマーケットの tech ブログに書きました!
    ○ 「AWS CodePipeline で CI/CD の仕組みを構築したお話」で検索!

    View full-size slide

  5. 5
    AWS CodePipeline とは

    View full-size slide

  6. 6
    AWS の公式説明より

    View full-size slide

  7. 7
    もうちょっと詳しく
    AWS CodePipeline は完全マネージド型の継続的デリバリーサービスで、
    素早く確実性のあるアプリケーションとインフラストラクチャのアップデートのための、パ
    イプラインのリリースを自動化します。
    ー AWS 公式ドキュメントより

    View full-size slide

  8. 8
    つまり
    AWS CodePipeline は
    ● 面倒くさい部分は AWS が管理してくれて
    ● 継続的にプロダクトの自動的なリリースを実現する
    CI/CD プロダクトなのです。
    「自動化」・・・好きですよね?

    View full-size slide

  9. 9
    CI/CD の基本

    View full-size slide

  10. 10
    突然ですが・・・
    Web サービスを作ったので
    代わりにインターネット上に
    公開してくれませんか?
    ソースコードは
    に push しておきましたので。
    どうする?

    View full-size slide

  11. 11
    一例
    push
    pull
    必要があれば
    Build
    Amazon EC2
    Amazon S3
    配置
    配置
    配置

    View full-size slide

  12. 12
    場合によっては
    バグが見つかりました。
    修正しましたので、再度
    デプロイしてくれませんか?
    ソースコードは
    に push しておきましたので。
    どうする?

    View full-size slide

  13. 13
    やることは一緒(再掲)
    push
    pull
    必要があれば
    Build
    Amazon EC2
    Amazon S3
    配置
    配置
    配置

    View full-size slide

  14. 14
    更には
    品質も大事なので
    テストコードを追加しました。
    テストコードも実行してください。
    ソースコードは例の通り
    に push しておきましたので。
    どうする?

    View full-size slide

  15. 15
    テストコードの実行が必要
    push
    pull
    必要があれば
    Build
    Amazon EC2
    Amazon S3
    配置
    配置
    配置
    テストコード
    実行

    View full-size slide

  16. 16
    何回もやるとなる面倒くさい!

    View full-size slide

  17. 17
    しかし、何回も繰り返す必要があるんです!
    ● 開発の単位を小さくして早いペースで 実装 > テスト > デプロイ を繰り返す
    ○ スピードは上がりそうだけど、品質の担保は必要
    ○ テストを繰り返し実行する必要がある
    ○ デプロイ作業が増える
    ● 実装 > テスト > デプロイ をできるだけ自動化したい!
    プロダクトの成長にスピードと品質の両立が求められる昨今(アジャイル開発)
    CI/CD

    View full-size slide

  18. 18
    CI/CD のフェイズ概念

    View full-size slide

  19. 19
    ざっくりと図で表すと

    View full-size slide

  20. 20
    Continuous Integration(CI)
    Code > Build > Test > Code > Build > Test ・・・
    のサイクルを高速に回して開発スピードと品質の担保を実現するのが Continuous
    Integration(CI)

    View full-size slide

  21. 21
    Continuous Delivery, Deploy(CD)
    CI に加えて変更内容をステージング環境などに自動的に反映して
    リリース可能な状態に持っていくのが
    Continuous Delivery(CD)
    CD の中でも自動的に本番環境にリリースを行うのが
    Continuous Deploy(CD)

    View full-size slide

  22. 22
    スペースマーケットの CI/CD 事例

    View full-size slide

  23. 23
    スペースマーケットの CI/CD 概要

    View full-size slide

  24. 24
    CodePipeline 導入前の課題
    ● Circle CI でビルド・テスト・デプロイのパイプラインを構築していた
    ○ フロントエンド・バックエンドの複数のシステムが Circle CI を使っていた
    ○ ジョブの同時実行数の上限の関係で CI/CD の待ち時間が増えてきた
    ● (AWS ECS へのデプロイも自前で作る必要があった)
    CI/CD は構築していたけど、デプロイされるまでの待ち時間が問題に・・
    Job
    Job
    Job
    Job
    Job

    View full-size slide

  25. 25
    新しい CI/CD への要求

    View full-size slide

  26. 26
    CI/CD の開始の合図はリポジトリへの Push で!
    ビルドやデプロイの実行のために
    AWS のコンソールに入って・・・
    みたいなことは避けたいな
    GitHub への push は必ず行うから
    それ以降は自動がいいな
    CodePipeline の GitHub
    Webhook 連携

    View full-size slide

  27. 27
    Webpack の実行や Docker のビルドも自動的にやって!
    jsトランスパイルや画像の最適化
    は自動的にやってほしいし
    ECS で動かすために Docker イメージの
    ビルドとかはいい感じに
    やっててほしいな
    CodeBuild の
    buildspec.yml で指定

    View full-size slide

  28. 28
    テストコードの実行とかもできないとね!
    ローカルで単体テストコードを
    実行することはできるけど
    QA用のカバレッジレポート等は
    リモート上で共有できるようにしたい
    CodeBuild の
    buildspec.yml で指定

    View full-size slide

  29. 29
    ビルド・テストまで自動でやってくれるならば、デプロイも!
    CI を自動化してくれるならば
    CD もやってくれると嬉しいな
    ECS のタスクの置き換えを手動でやるの
    は事故が怖いしね
    CodePipeline×ECS の
    シームレス連携

    View full-size slide

  30. 30
    導入前の課題とCI/CD への要求を踏まえて
    頑張ってみました

    View full-size slide

  31. 31
    新しい CI/CD(再掲)

    View full-size slide

  32. 32
    CodePipeline 導入後に解決したこと
    ● CodePipeline による実行の時間だけで、他の要因はなくなった
    ○ (before) 最大1時間近く待つ -> (after) 安定して 20分ぐらい
    ● AWS ECS へのデプロイも CodePipeline の標準の機能でカバーできる
    ● CloudWatchEvent などの他の AWS サービスとの連携が楽なので夢が広がる
    ○ デプロイ完了後の Slack への通知も設定
    CI/CD が独立したので Circle CI の制限に引っかからなくなった

    View full-size slide

  33. 33
    CI/CD を構築する側も使う側もハッピー!

    View full-size slide

  34. 34
    AWS CodePipeline 導入に取り組んで得たノウハウ

    View full-size slide

  35. 35
    設定次第で様々な自動化が可能
    ● 開発環境のアプリケーションを現在の本番環境に追従させる
    ○ 毎日決まった時間に、各システムの master ブランチに対して CI/CD 回す
    ○ デプロイ先を開発環境に向けた version の CodePipeline を作るだけ
    ○ CloudWatchEvent で定期スケジュールで CodePipeline の実行設定可能
    ● バッチや migration 用のタスクの CI 構築
    ○ バッチや migration の実行内容の実装 > ビルド > テストだけ自動化
    ○ 実行は AWS Batch で設定 or 手動で実行などなど
    ○ バッチや migration の内容の CI と、実行のサイクルを分離
    カスタマイズ次第で色々なシナリオに対応できる

    View full-size slide

  36. 36
    こんな使い方も

    View full-size slide

  37. 37
    こんな使い方も
    Aの
    Pipeline
    Bの
    Pipeline
    Cの
    Pipeline
    Dの
    Pipeline
    Eの
    Pipeline
    複数システムの CI/CD を同時に並列で
    実行する Pipeline を作る

    View full-size slide

  38. 38
    CI/CD の仕組みを横展開するには
    ● コード化すると設定の変更・変遷を Git 管理&レビューできる
    ● 横展開する際もコードの一部の値を書き換えて実行するだけで、安全&確実
    ○ AWS CloudFormation
    ○ Terraform(今回私はこちらを使って横展開しています)
    構築した AWS CodePipeline の設定をコード化する
    構文やルールを理解するために
    多少の学習コスト入りますが・・・

    View full-size slide

  39. 39
    ちなみに・・・
    前回私が投稿した tech ブログのエントリーより抜粋
    Terraform を使ったコード化のお話も記事にしますので
    興味のある方はチェックしてみてください!

    View full-size slide

  40. 40
    CodePipeline で素敵な CI/CD ライフを!

    View full-size slide

  41. 41
    ご清聴ありがとうございました!
    「踏み込んだ CI/CD 論を語りたい」「今回使った AWS サービスの話などをもっと聞きたい」
    という方はこの後の懇親会で是非お声掛けください!

    View full-size slide