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

AWSとGitHubを用いたパターン別CI/CD構成解説

 AWSとGitHubを用いたパターン別CI/CD構成解説

つくぼし

July 17, 2023
Tweet

More Decks by つくぼし

Other Decks in Technology

Transcript

  1. AWSとGitHubを用いた
    パターン別CI/CD構成解説
    2023/7/17
    AWS事業本部 つくぼし

    View Slide

  2. 自己紹介 2
    ★ 名前
    ○ つくぼし
    ★ 所属
    ○ AWS事業本部コンサルティング部
    ○ ソリューションアーキテクト
    ★ 最近ハマっているAWSサービス
    ○ AWS SAM
    ★ SNS/ブログ
    ○ Twitter(@tsukuboshi0755)
    ○ DevelopersIO(つくぼし)

    View Slide

  3. 目次 3
    1. 初めに
    2. AWSにおけるCodeシリーズの紹介
    3. GitHubにおけるCI/CD関連サービスの紹介
    4. CI/CDパターン実践
    5. 最後に

    View Slide

  4. 初めに
    4

    View Slide

  5. CI/CDに関してこんな悩みはありませんか? 5
    AWS基盤の
    CI/CDって
    どう作るべき?
    Codeシリーズと
    GitHubの
    どちらを使うべき?
    Codeシリーズと
    GitHubを
    組み合わせるのは
    あり?
    AWSではどんな
    CI/CDサービスが
    使えるのか?

    View Slide

  6. 想定読者 6
    ● AWS上で稼働しているアプリケーションに対して、初めてCI/CDパイプ
    ラインを組み込む方
    ● AWSやGitHubでどのようにCI/CDパイプラインを実現できるかいまい
    ち分からない方
    ● AWSのCodeシリーズやGitHubについては何となく知っているが、どの
    ように使い分けるべきかピンと来ていない方

    View Slide

  7. AWSにおけるCodeシリーズの紹介
    7

    View Slide

  8. AWS CodeCommit
    ● プライベート Git リポジトリをホストする、フルマネージド型の
    ソース管理サービス
    ● スケーラブルでセキュア、既存のGitツールともシームレスに連
    携可能
    ● アクティブユーザー数/Gitリクエスト数/ストレージ容量による課
    金体系、無料利用枠あり
    8

    View Slide

  9. AWS CodeBuild 9
    ● ソースコードをコンパイル、テスト実行し、デプロイ可能なソフト
    ウェアパッケージを作成できるフルマネージド型のビルド/テスト
    サービス
    ● ビルド用のサーバーをプロビジョニング・管理する必要がない
    ● ビルド時間(分単位)による課金体系、月100分の無料利用枠

    View Slide

  10. AWS CodeDeploy 10
    ● 様々なコンピューティングリソース(EC2、ECS、Lambda等)に
    対するソフトウェアデプロイを自動化するフルマネージド型のデ
    プロイサービス
    ● オートスケーリングする構成に対しても、連動して自動でデプロ
    イする
    ● AWS上のデプロイであれば無料で使用可能

    View Slide

  11. AWS CodePipeline 11
    ● ソフトウェアをリリースするために必要なステップのモデル化、
    視覚化、および自動化に使用できるフルマネージド型の継続的
    デリバリーサービス
    ● ソースの変更をトリガーに、ビルド、テスト、デプロイ等の一連の
    リリースプロセスを自動的に実行
    ● アクティブなパイプライン数による課金体系、月1つの無料利用
    枠あり

    View Slide

  12. GitHubにおける
    CI/CD関連サービスの紹介
    12

    View Slide

  13. GitHub Repository 13
    ● フルマネージド型のソース管理サービス
    ● セキュアな管理、様々なツールと連携可能、世界最大級の開発
    者コミュニティ
    ● パプリックリポジトリ・プライベートリポジトリ共に基本機能は無
    料で使用可能

    View Slide

  14. GitHub Actions 14
    ● CI/CDパイプラインを自動化できるフルマネージド型の
    ビルド/テスト/デプロイサービス
    ● ワークフローを定義する事で、リポジトリの特定イベントに対し
    て自動でビルド/テスト/デプロイが実施される
    ● ビルド時間(分単位)による課金体系、フリープランの場合月
    2000分の無料利用枠

    View Slide

  15. CI/CDパターンの実践
    15

    View Slide

  16. お題構成(ECR + ECS + RDS) 16
    ECS
    ECR App Service
    RDS
    イメージから
    アプリケーションコンテナ
    を起動
    DBに対して
    マイグレーション
    Migration Task

    View Slide

  17. パターン1. AWS Codeシリーズのみの構成 17
    ECS
    ECR App Service
    RDS
    イメージから
    アプリケーションコンテナ
    を起動
    DBに対して
    マイグレーション
    Migration Task
    CodePipeline
    CodeCommit CodeBuild CodeDeploy
    アプリケーションサービスを
    ECSにデプロイ
    マイグレーション専用
    タスクを起動
    イメージをプッシュ
    S3
    (Artifact Bucket)

    View Slide

  18. パターン1のメリット 18
    ● AWSのみで完結するため、作成したリソースの管理や、他のAWSサービ
    スとの連携が容易
    ● AWS公式のドキュメントが豊富
    ● CodeBuildによりビルド環境のスペックを柔軟に変更できる
    ● CodeDeployにより、Blue/Green デプロイや、デプロイ失敗時のロール
    バックを容易に実現可能

    View Slide

  19. パターン1のデメリット 19
    ● CodeCommitの機能は少なめ(プロジェクト管理機能がない、通知機能
    が弱い、大きいファイルを表示できない等)
    ● CodeCommit自体の情報が少ない
    ● CodeBuildの無料利用枠が少なめ(月100分)
    ● 権限設定に必要なIAM認証周りがややこしい

    View Slide

  20. パターン2. GitHubサービスのみの構成 20
    ECS
    ECR App Service
    RDS
    イメージから
    アプリケーションコンテナ
    を起動
    DBに対して
    マイグレーション
    Migration Task
    アプリケーションサービスを
    ECSにデプロイ
    マイグレーション専用
    タスクを起動
    イメージをプッシュ
    GitHub Actions (Build) GitHub Actions (Deploy)
    GitHub Repository

    View Slide

  21. パターン2のメリット 21
    ● GitHub公式のドキュメントが豊富
    ● GitHub Repositoryは公開されているものが多数存在するため、リポジト
    リ設計を参照しやすい
    ● GitHub Repositoryの機能が豊富(プロジェクト管理機能、通知機能等)
    ● GitHub Actionsの無料利用枠が多い(フリープランの場合月2000分)

    View Slide

  22. パターン2のデメリット 22
    ● AWSとGitHub両方の管理が必要
    ● GitHub ActionsからAWSへのアクセス方法が複雑になりやすい
    ● GitHub Actionsではビルド環境のスペックはGA版では変更できない
    (2023年6月時点では有料プランのベータ版でのみ提供あり)
    ● GitHub Actionsのみでは、Blue/Greenデプロイの実現が困難(デプロイ
    手法はワークフローで実施するCLIやIaCに依存する)

    View Slide

  23. パターン3. AWS + GitHubの構成 23
    ECS
    ECR App Service
    RDS
    イメージから
    アプリケーションコンテナ
    を起動
    DBに対して
    マイグレーション
    Migration Task
    アプリケーションサービスを
    ECSにデプロイ
    マイグレーション専用
    タスクを起動
    イメージをプッシュ
    GitHub Actions (Build)
    GitHub Repository
    CodePipeline
    CodeBuild CodeDeploy
    S3
    (Artifact Bucket)
    イメージプッシュを
    トリガーに
    パイプライン実行

    View Slide

  24. パターン3のメリット 24
    ● GitHubのリポジトリ機能とAWSのデプロイ機能のいいとこ取りが可能
    ● CI/CDのシチュエーションに応じて、ビルド機能にGitHub Actions、
    CodeBuild、あるいはその両方を選択可能

    View Slide

  25. パターン3のデメリット 25
    ● 公式ドキュメントが少なめ
    ● AWSとGitHub両方の管理が必要
    ● GitHub ActionsからAWSリソースへのアクセス方法が複雑になりやすい

    View Slide

  26. パターン3の検討事項 26
    ECS
    ECR App Service
    RDS
    イメージから
    アプリケーションコンテナ
    を起動
    DBに対して
    マイグレーション
    Migration Task
    アプリケーションサービスを
    ECSにデプロイ
    マイグレーション専用
    タスクを起動
    イメージをプッシュ
    GitHub Actions (Build)
    GitHub Repository
    CodePipeline
    CodeDeploy
    S3
    (Artifact Bucket)
    ビルドステージの
    サービスの組み合わせ
    について検討事項あり
    CodeBuild
    イメージプッシュを
    トリガーに
    パイプライン実行

    View Slide

  27. パターン3-1. GitHub Actionsのみ 27
    ECS
    ECR App Service
    RDS
    イメージから
    アプリケーションコンテナ
    を起動
    DBに対して
    マイグレーション
    Migration Task
    アプリケーションサービスを
    ECSにデプロイ
    マイグレーション専用
    タスクを起動
    イメージをプッシュ
    GitHub Actions (Build)
    GitHub Repository CodeDeploy
    OIDCを用いた認証により
    AWSリソースにアクセス

    View Slide

  28. パターン3-2. CodeBuildのみ 28
    ECS
    ECR App Service
    RDS
    イメージから
    アプリケーションコンテナ
    を起動
    DBに対して
    マイグレーション
    Migration Task
    アプリケーションサービスを
    ECSにデプロイ
    マイグレーション専用
    タスクを起動
    イメージをプッシュ
    GitHub Repository
    CodePipeline
    CodeBuild CodeDeploy
    S3
    (Artifact Bucket)
    GitHub接続を使用

    View Slide

  29. パターン3-3. GitHub Actions + CodeBuild 29
    ECS
    ECR App Service
    RDS
    イメージから
    アプリケーションコンテナ
    を起動
    DBに対して
    マイグレーション
    Migration Task
    アプリケーションサービスを
    ECSにデプロイ
    マイグレーション専用
    タスクを起動
    イメージをプッシュ
    GitHub Actions (Build)
    GitHub Repository
    CodePipeline
    CodeBuild CodeDeploy
    S3
    (Artifact Bucket)
    イメージプッシュを
    トリガーに
    パイプライン実行

    View Slide

  30. パターン3のビルドサービスの選び方 30
    ● まずは無料利用枠が多いパターン3-1(GitHub Actionsのみ)がオススメ
    ● 負荷の大きいテストを実施する必要がある場合は、パターン
    3-2(CodeBuildのみ)を推奨
    ● パターン3-1または3-2を採用した上で、必要に応じて負荷の小さいテスト
    をGitHub Actions、負荷の大きいテストをCodeBuildで実施するパターン
    3-3への切り替えを検討すると良い

    View Slide

  31. 最後に
    31

    View Slide

  32. まとめ 32
    ● AWSでは様々なCI/CDサービスが提供されている
    ● GitHubだけでもCI/CDパイプラインは実現可能
    ● AWSとGitHub各々で提供されているCI/CDサービスを組み合わせて、良
    いとこ取りをした最適なCI/CDパイプラインを実現しよう

    View Slide

  33. 今後のCI/CD学習教材 33
    ★ https://zenn.dev/reireias/articles/8e987af2762eaa
    ○ ECSパイプライン構成の比較詳細がまとまっているため最初に見てほしい
    ★ https://zenn.dev/hukurouo/books/cfn-hands-on/viewer/cfn-code-deploy
    ○ パターン3-1におけるGitHub ActionsからOIDC認証を用いたCodeDeployへの
    アクセス方法の記載あり
    ★ https://zenn.dev/ttani/articles/aws-ecs-autodeploy
    ○ パターン3-2におけるCodePipelineのGitHub接続設定方法の記載あり
    ★ https://dev.classmethod.jp/articles/ecr_push_ecs_simple_codepipeline
    ○ パターン3-3におけるCodePipelineのECRトリガー設定方法の記載あり

    View Slide

  34. 付録
    34

    View Slide

  35. AWS CodeArtifact 35
    ・ソフトウェアパッケージを保存・共有できるマネージド型のアー
    ティファクトリポジトリサービス
    ・ソフトウェアパッケージのアクセス制御が可能となり、組織内で
    承認されるパッケージのみを開発者に提供可能
    ・ストレージ量/リクエスト数/データ転送量による課金体系、無料
    利用枠あり

    View Slide

  36. AWS CodeStar 36
    ・AWS でソフトウェア開発プロジェクトを作成、管理、および操作
    するクラウドベースのサービス
    ・プロジェクトテンプレートを指定する事で、ソース管理、ビルド、
    デプロイ、及びコンピューティングリソースのサービス群をまとめ
    てプロビジョニング可能
    ・CodeStarプロジェクトでプロビジョニングしたAWSリソースのみ
    課金される

    View Slide

  37. Amazon CodeCatalyst 37
    ・ソフトウェア開発プロセスにCI/CDシステムを導入する統合サー
    ビス
    ・AWSアカウントに関連付けられたスペースの中にプロジェクトを
    作成する事で、Issue や Git リポジトリ、ワークフローを管理可能
    ・スペース単位による課金

    View Slide

  38. パターン1. CI部分 38
    ECS
    ECR RDS
    Migration Task
    CodePipeline
    CodeCommit CodeBuild CodeDeploy
    マイグレーション専用
    タスクを起動
    イメージをプッシュ
    S3
    (Artifact Bucket)
    DBに対して
    マイグレーション

    View Slide

  39. パターン1. CD部分 39
    ECR App Service
    RDS
    イメージから
    アプリケーションコンテナ
    を起動
    CodePipeline
    CodeCommit CodeBuild CodeDeploy
    アプリケーションサービスを
    ECSにデプロイ
    S3
    (Artifact Bucket)
    ECS

    View Slide

  40. パターン2. CI部分 40
    ECS
    ECR RDS
    DBに対して
    マイグレーション
    Migration Task
    マイグレーション専用
    タスクを起動
    イメージをプッシュ
    GitHub Actions (Build) GitHub Actions (Deploy)
    GitHub Repository

    View Slide

  41. パターン2. CD部分 41
    ECS
    ECR App Service
    RDS
    イメージから
    アプリケーションコンテナ
    を起動
    アプリケーションサービスを
    ECSにデプロイ
    GitHub Actions (Build) GitHub Actions (Deploy)
    GitHub Repository

    View Slide

  42. パターン3. CI部分 42
    ECS
    ECR RDS
    DBに対して
    マイグレーション
    Migration Task
    イメージをプッシュ
    GitHub Actions (Build)
    GitHub Repository
    CodePipeline
    CodeDeploy
    S3
    (Artifact Bucket)
    マイグレーション専用
    タスクを起動
    CodeBuild
    イメージプッシュを
    トリガーに
    パイプライン実行

    View Slide

  43. パターン3. CD部分 43
    ECS
    ECR App Service
    RDS
    イメージから
    アプリケーションコンテナ
    を起動
    アプリケーションサービスを
    ECSにデプロイ
    GitHub Actions (Build)
    GitHub Repository
    CodePipeline
    CodeDeploy
    S3
    (Artifact Bucket)
    CodeBuild

    View Slide