Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AWSとGitHubを用いたパターン別CI/CD構成解説
Search
つくぼし
July 17, 2023
Technology
3
17k
AWSとGitHubを用いたパターン別CI/CD構成解説
つくぼし
July 17, 2023
Tweet
Share
More Decks by つくぼし
See All by つくぼし
初めてのGPTs ~ネコ派を〇〇派に変える技術~
tsukuboshi
0
380
Amplify Gen 2ではじめる 生成AIアプリ開発入門
tsukuboshi
1
700
AWSで構築するパターン別RAG構成解説
tsukuboshi
5
4.2k
AWS構成図から CloudFormationとパラメータシートを 自動生成するシステムを作ってみた
tsukuboshi
0
8.3k
5分で分かる(かもしれない) Vector engine for OpenSearch Serverless
tsukuboshi
1
1.1k
君はApplication Composerというサービスを知っているか
tsukuboshi
1
1.2k
CDKをCloudFormationテンプレートとして 利用する際の注意点n選
tsukuboshi
2
3.5k
インフラエンジニアのためのLambda実践入門.pdf
tsukuboshi
4
2.6k
(今更ながら)AWSのコンテナサービスについてざっくりまとめてみる
tsukuboshi
1
2k
Other Decks in Technology
See All in Technology
祝!Iceberg祭開幕!re:Invent 2024データレイク関連アップデート10分総ざらい
kniino
2
240
UI State設計とテスト方針
rmakiyama
2
320
Microsoft Azure全冠になってみた ~アレを使い倒した者が試験を制す!?~/Obtained all Microsoft Azure certifications Those who use "that" to the full will win the exam! ?
yuj1osm
1
110
フロントエンド設計にモブ設計を導入してみた / 20241212_cloudsign_TechFrontMeetup
bengo4com
0
1.9k
Snowflake女子会#3 Snowpipeの良さを5分で語るよ
lana2548
0
220
なぜCodeceptJSを選んだか
goataka
0
160
コンテナセキュリティのためのLandlock入門
nullpo_head
2
320
社内イベント管理システムを1週間でAKSからACAに移行した話し
shingo_kawahara
0
180
KubeCon NA 2024 Recap / Running WebAssembly (Wasm) Workloads Side-by-Side with Container Workloads
z63d
1
240
第3回Snowflake女子会_LT登壇資料(合成データ)_Taro_CCCMK
tarotaro0129
0
180
AIのコンプラは何故しんどい?
shujisado
1
190
20241220_S3 tablesの使い方を検証してみた
handy
3
240
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.2k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
Producing Creativity
orderedlist
PRO
341
39k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
GraphQLとの向き合い方2022年版
quramy
44
13k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
Designing for humans not robots
tammielis
250
25k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
247
1.3M
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.3k
We Have a Design System, Now What?
morganepeng
51
7.3k
Transcript
AWSとGitHubを用いた パターン別CI/CD構成解説 2023/7/17 AWS事業本部 つくぼし
自己紹介 2 ★ 名前 ◦ つくぼし ★ 所属 ◦ AWS事業本部コンサルティング部
◦ ソリューションアーキテクト ★ 最近ハマっているAWSサービス ◦ AWS SAM ★ SNS/ブログ ◦ Twitter(@tsukuboshi0755) ◦ DevelopersIO(つくぼし)
目次 3 1. 初めに 2. AWSにおけるCodeシリーズの紹介 3. GitHubにおけるCI/CD関連サービスの紹介 4. CI/CDパターン実践
5. 最後に
初めに 4
CI/CDに関してこんな悩みはありませんか? 5 AWS基盤の CI/CDって どう作るべき? Codeシリーズと GitHubの どちらを使うべき? Codeシリーズと GitHubを
組み合わせるのは あり? AWSではどんな CI/CDサービスが 使えるのか?
想定読者 6 • AWS上で稼働しているアプリケーションに対して、初めてCI/CDパイプ ラインを組み込む方 • AWSやGitHubでどのようにCI/CDパイプラインを実現できるかいまい ち分からない方 • AWSのCodeシリーズやGitHubについては何となく知っているが、どの
ように使い分けるべきかピンと来ていない方
AWSにおけるCodeシリーズの紹介 7
AWS CodeCommit • プライベート Git リポジトリをホストする、フルマネージド型の ソース管理サービス • スケーラブルでセキュア、既存のGitツールともシームレスに連 携可能
• アクティブユーザー数/Gitリクエスト数/ストレージ容量による課 金体系、無料利用枠あり 8
AWS CodeBuild 9 • ソースコードをコンパイル、テスト実行し、デプロイ可能なソフト ウェアパッケージを作成できるフルマネージド型のビルド/テスト サービス • ビルド用のサーバーをプロビジョニング・管理する必要がない •
ビルド時間(分単位)による課金体系、月100分の無料利用枠
AWS CodeDeploy 10 • 様々なコンピューティングリソース(EC2、ECS、Lambda等)に 対するソフトウェアデプロイを自動化するフルマネージド型のデ プロイサービス • オートスケーリングする構成に対しても、連動して自動でデプロ イする
• AWS上のデプロイであれば無料で使用可能
AWS CodePipeline 11 • ソフトウェアをリリースするために必要なステップのモデル化、 視覚化、および自動化に使用できるフルマネージド型の継続的 デリバリーサービス • ソースの変更をトリガーに、ビルド、テスト、デプロイ等の一連の リリースプロセスを自動的に実行
• アクティブなパイプライン数による課金体系、月1つの無料利用 枠あり
GitHubにおける CI/CD関連サービスの紹介 12
GitHub Repository 13 • フルマネージド型のソース管理サービス • セキュアな管理、様々なツールと連携可能、世界最大級の開発 者コミュニティ • パプリックリポジトリ・プライベートリポジトリ共に基本機能は無
料で使用可能
GitHub Actions 14 • CI/CDパイプラインを自動化できるフルマネージド型の ビルド/テスト/デプロイサービス • ワークフローを定義する事で、リポジトリの特定イベントに対し て自動でビルド/テスト/デプロイが実施される •
ビルド時間(分単位)による課金体系、フリープランの場合月 2000分の無料利用枠
CI/CDパターンの実践 15
お題構成(ECR + ECS + RDS) 16 ECS ECR App Service
RDS イメージから アプリケーションコンテナ を起動 DBに対して マイグレーション Migration Task
パターン1. AWS Codeシリーズのみの構成 17 ECS ECR App Service RDS イメージから
アプリケーションコンテナ を起動 DBに対して マイグレーション Migration Task CodePipeline CodeCommit CodeBuild CodeDeploy アプリケーションサービスを ECSにデプロイ マイグレーション専用 タスクを起動 イメージをプッシュ S3 (Artifact Bucket)
パターン1のメリット 18 • AWSのみで完結するため、作成したリソースの管理や、他のAWSサービ スとの連携が容易 • AWS公式のドキュメントが豊富 • CodeBuildによりビルド環境のスペックを柔軟に変更できる •
CodeDeployにより、Blue/Green デプロイや、デプロイ失敗時のロール バックを容易に実現可能
パターン1のデメリット 19 • CodeCommitの機能は少なめ(プロジェクト管理機能がない、通知機能 が弱い、大きいファイルを表示できない等) • CodeCommit自体の情報が少ない • CodeBuildの無料利用枠が少なめ(月100分) •
権限設定に必要なIAM認証周りがややこしい
パターン2. GitHubサービスのみの構成 20 ECS ECR App Service RDS イメージから アプリケーションコンテナ
を起動 DBに対して マイグレーション Migration Task アプリケーションサービスを ECSにデプロイ マイグレーション専用 タスクを起動 イメージをプッシュ GitHub Actions (Build) GitHub Actions (Deploy) GitHub Repository
パターン2のメリット 21 • GitHub公式のドキュメントが豊富 • GitHub Repositoryは公開されているものが多数存在するため、リポジト リ設計を参照しやすい • GitHub
Repositoryの機能が豊富(プロジェクト管理機能、通知機能等) • GitHub Actionsの無料利用枠が多い(フリープランの場合月2000分)
パターン2のデメリット 22 • AWSとGitHub両方の管理が必要 • GitHub ActionsからAWSへのアクセス方法が複雑になりやすい • GitHub Actionsではビルド環境のスペックはGA版では変更できない
(2023年6月時点では有料プランのベータ版でのみ提供あり) • GitHub Actionsのみでは、Blue/Greenデプロイの実現が困難(デプロイ 手法はワークフローで実施するCLIやIaCに依存する)
パターン3. AWS + GitHubの構成 23 ECS ECR App Service RDS
イメージから アプリケーションコンテナ を起動 DBに対して マイグレーション Migration Task アプリケーションサービスを ECSにデプロイ マイグレーション専用 タスクを起動 イメージをプッシュ GitHub Actions (Build) GitHub Repository CodePipeline CodeBuild CodeDeploy S3 (Artifact Bucket) イメージプッシュを トリガーに パイプライン実行
パターン3のメリット 24 • GitHubのリポジトリ機能とAWSのデプロイ機能のいいとこ取りが可能 • CI/CDのシチュエーションに応じて、ビルド機能にGitHub Actions、 CodeBuild、あるいはその両方を選択可能
パターン3のデメリット 25 • 公式ドキュメントが少なめ • AWSとGitHub両方の管理が必要 • GitHub ActionsからAWSリソースへのアクセス方法が複雑になりやすい
パターン3の検討事項 26 ECS ECR App Service RDS イメージから アプリケーションコンテナ を起動
DBに対して マイグレーション Migration Task アプリケーションサービスを ECSにデプロイ マイグレーション専用 タスクを起動 イメージをプッシュ GitHub Actions (Build) GitHub Repository CodePipeline CodeDeploy S3 (Artifact Bucket) ビルドステージの サービスの組み合わせ について検討事項あり CodeBuild イメージプッシュを トリガーに パイプライン実行
パターン3-1. GitHub Actionsのみ 27 ECS ECR App Service RDS イメージから
アプリケーションコンテナ を起動 DBに対して マイグレーション Migration Task アプリケーションサービスを ECSにデプロイ マイグレーション専用 タスクを起動 イメージをプッシュ GitHub Actions (Build) GitHub Repository CodeDeploy OIDCを用いた認証により AWSリソースにアクセス
パターン3-2. CodeBuildのみ 28 ECS ECR App Service RDS イメージから アプリケーションコンテナ
を起動 DBに対して マイグレーション Migration Task アプリケーションサービスを ECSにデプロイ マイグレーション専用 タスクを起動 イメージをプッシュ GitHub Repository CodePipeline CodeBuild CodeDeploy S3 (Artifact Bucket) GitHub接続を使用
パターン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) イメージプッシュを トリガーに パイプライン実行
パターン3のビルドサービスの選び方 30 • まずは無料利用枠が多いパターン3-1(GitHub Actionsのみ)がオススメ • 負荷の大きいテストを実施する必要がある場合は、パターン 3-2(CodeBuildのみ)を推奨 • パターン3-1または3-2を採用した上で、必要に応じて負荷の小さいテスト
をGitHub Actions、負荷の大きいテストをCodeBuildで実施するパターン 3-3への切り替えを検討すると良い
最後に 31
まとめ 32 • AWSでは様々なCI/CDサービスが提供されている • GitHubだけでもCI/CDパイプラインは実現可能 • AWSとGitHub各々で提供されているCI/CDサービスを組み合わせて、良 いとこ取りをした最適なCI/CDパイプラインを実現しよう
今後の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トリガー設定方法の記載あり
付録 34
AWS CodeArtifact 35 ・ソフトウェアパッケージを保存・共有できるマネージド型のアー ティファクトリポジトリサービス ・ソフトウェアパッケージのアクセス制御が可能となり、組織内で 承認されるパッケージのみを開発者に提供可能 ・ストレージ量/リクエスト数/データ転送量による課金体系、無料 利用枠あり
AWS CodeStar 36 ・AWS でソフトウェア開発プロジェクトを作成、管理、および操作 するクラウドベースのサービス ・プロジェクトテンプレートを指定する事で、ソース管理、ビルド、 デプロイ、及びコンピューティングリソースのサービス群をまとめ てプロビジョニング可能 ・CodeStarプロジェクトでプロビジョニングしたAWSリソースのみ
課金される
Amazon CodeCatalyst 37 ・ソフトウェア開発プロセスにCI/CDシステムを導入する統合サー ビス ・AWSアカウントに関連付けられたスペースの中にプロジェクトを 作成する事で、Issue や Git リポジトリ、ワークフローを管理可能
・スペース単位による課金
パターン1. CI部分 38 ECS ECR RDS Migration Task CodePipeline CodeCommit
CodeBuild CodeDeploy マイグレーション専用 タスクを起動 イメージをプッシュ S3 (Artifact Bucket) DBに対して マイグレーション
パターン1. CD部分 39 ECR App Service RDS イメージから アプリケーションコンテナ を起動
CodePipeline CodeCommit CodeBuild CodeDeploy アプリケーションサービスを ECSにデプロイ S3 (Artifact Bucket) ECS
パターン2. CI部分 40 ECS ECR RDS DBに対して マイグレーション Migration Task
マイグレーション専用 タスクを起動 イメージをプッシュ GitHub Actions (Build) GitHub Actions (Deploy) GitHub Repository
パターン2. CD部分 41 ECS ECR App Service RDS イメージから アプリケーションコンテナ
を起動 アプリケーションサービスを ECSにデプロイ GitHub Actions (Build) GitHub Actions (Deploy) GitHub Repository
パターン3. CI部分 42 ECS ECR RDS DBに対して マイグレーション Migration Task
イメージをプッシュ GitHub Actions (Build) GitHub Repository CodePipeline CodeDeploy S3 (Artifact Bucket) マイグレーション専用 タスクを起動 CodeBuild イメージプッシュを トリガーに パイプライン実行
パターン3. CD部分 43 ECS ECR App Service RDS イメージから アプリケーションコンテナ
を起動 アプリケーションサービスを ECSにデプロイ GitHub Actions (Build) GitHub Repository CodePipeline CodeDeploy S3 (Artifact Bucket) CodeBuild