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 スペースマーケット 藤田勇希

  2. 2 自己紹介 • 藤田 勇希 • バックエンドエンジニア • 2018年11月にスペースマーケット入社 • 最近は1日1本映画見てる

    • 好きな AWS サービス ◦ AWS Lambda ◦ AWS Dynamodb ◦ AWS Batch ◦ AWS CodePipeline
  3. 3 今日お話すること • AWS CodePiepeline とは? • CI/CD の基本 •

    スペースマーケットの CI/CD の事例 ◦ CodePipeline 導入前の課題 ◦ CodePipeline 導入後に解決したこと • AWS CodePipeline 導入に取り組んで得たノウハウ ◦ 様々なシナリオへの応用 ◦ CI/CD の仕組みを横展開するためには
  4. 4 今日お話しないこと • CI/CD の細かいお話 • 発表に登場する AWS 各サービスの細かい説明 •

    AWS CodePipeline の具体的な設定方法 ◦ スペースマーケットの tech ブログに書きました! ◦ 「AWS CodePipeline で CI/CD の仕組みを構築したお話」で検索!
  5. 5 AWS CodePipeline とは

  6. 6 AWS の公式説明より

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

  8. 8 つまり AWS CodePipeline は • 面倒くさい部分は AWS が管理してくれて •

    継続的にプロダクトの自動的なリリースを実現する CI/CD プロダクトなのです。 「自動化」・・・好きですよね?
  9. 9 CI/CD の基本

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

    どうする?
  11. 11 一例 push pull 必要があれば Build Amazon EC2 Amazon S3

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

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

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

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

    配置 配置 配置 テストコード 実行 +
  16. 16 何回もやるとなる面倒くさい!

  17. 17 しかし、何回も繰り返す必要があるんです! • 開発の単位を小さくして早いペースで 実装 > テスト > デプロイ を繰り返す

    ◦ スピードは上がりそうだけど、品質の担保は必要 ◦ テストを繰り返し実行する必要がある ◦ デプロイ作業が増える • 実装 > テスト > デプロイ をできるだけ自動化したい! プロダクトの成長にスピードと品質の両立が求められる昨今(アジャイル開発) CI/CD
  18. 18 CI/CD のフェイズ概念

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

  20. 20 Continuous Integration(CI) Code > Build > Test > Code

    > Build > Test ・・・ のサイクルを高速に回して開発スピードと品質の担保を実現するのが Continuous Integration(CI)
  21. 21 Continuous Delivery, Deploy(CD) CI に加えて変更内容をステージング環境などに自動的に反映して リリース可能な状態に持っていくのが Continuous Delivery(CD) CD

    の中でも自動的に本番環境にリリースを行うのが Continuous Deploy(CD)
  22. 22 スペースマーケットの CI/CD 事例

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

  24. 24 CodePipeline 導入前の課題 • Circle CI でビルド・テスト・デプロイのパイプラインを構築していた ◦ フロントエンド・バックエンドの複数のシステムが Circle

    CI を使っていた ◦ ジョブの同時実行数の上限の関係で CI/CD の待ち時間が増えてきた • (AWS ECS へのデプロイも自前で作る必要があった) CI/CD は構築していたけど、デプロイされるまでの待ち時間が問題に・・ Job Job Job Job Job
  25. 25 新しい CI/CD への要求

  26. 26 CI/CD の開始の合図はリポジトリへの Push で! ビルドやデプロイの実行のために AWS のコンソールに入って・・・ みたいなことは避けたいな GitHub

    への push は必ず行うから それ以降は自動がいいな CodePipeline の GitHub Webhook 連携
  27. 27 Webpack の実行や Docker のビルドも自動的にやって! jsトランスパイルや画像の最適化 は自動的にやってほしいし ECS で動かすために Docker

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

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

    の シームレス連携
  30. 30 導入前の課題とCI/CD への要求を踏まえて 頑張ってみました

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

  32. 32 CodePipeline 導入後に解決したこと • CodePipeline による実行の時間だけで、他の要因はなくなった ◦ (before) 最大1時間近く待つ ->

    (after) 安定して 20分ぐらい • AWS ECS へのデプロイも CodePipeline の標準の機能でカバーできる • CloudWatchEvent などの他の AWS サービスとの連携が楽なので夢が広がる ◦ デプロイ完了後の Slack への通知も設定 CI/CD が独立したので Circle CI の制限に引っかからなくなった
  33. 33 CI/CD を構築する側も使う側もハッピー!

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

  35. 35 設定次第で様々な自動化が可能 • 開発環境のアプリケーションを現在の本番環境に追従させる ◦ 毎日決まった時間に、各システムの master ブランチに対して CI/CD 回す

    ◦ デプロイ先を開発環境に向けた version の CodePipeline を作るだけ ◦ CloudWatchEvent で定期スケジュールで CodePipeline の実行設定可能 • バッチや migration 用のタスクの CI 構築 ◦ バッチや migration の実行内容の実装 > ビルド > テストだけ自動化 ◦ 実行は AWS Batch で設定 or 手動で実行などなど ◦ バッチや migration の内容の CI と、実行のサイクルを分離 カスタマイズ次第で色々なシナリオに対応できる
  36. 36 こんな使い方も

  37. 37 こんな使い方も Aの Pipeline Bの Pipeline Cの Pipeline Dの Pipeline

    Eの Pipeline 複数システムの CI/CD を同時に並列で 実行する Pipeline を作る
  38. 38 CI/CD の仕組みを横展開するには • コード化すると設定の変更・変遷を Git 管理&レビューできる • 横展開する際もコードの一部の値を書き換えて実行するだけで、安全&確実 ◦

    AWS CloudFormation ◦ Terraform(今回私はこちらを使って横展開しています) 構築した AWS CodePipeline の設定をコード化する 構文やルールを理解するために 多少の学習コスト入りますが・・・
  39. 39 ちなみに・・・ 前回私が投稿した tech ブログのエントリーより抜粋 Terraform を使ったコード化のお話も記事にしますので 興味のある方はチェックしてみてください!

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

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

  42. None