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で構築するCDパイプラインとその改善
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
shonansurvivors
February 19, 2024
Technology
5
4.2k
AWSで構築するCDパイプラインとその改善
TechBrew in 東京 〜CI/CDパイプライン改善の取り組み〜 (
https://findy.connpass.com/event/309537/
) 登壇資料
shonansurvivors
February 19, 2024
Tweet
Share
More Decks by shonansurvivors
See All by shonansurvivors
SREのキャリアから経営に近づく - Enterprise Risk Managementを基に -
shonansurvivors
2
1.4k
Adminaで実現するISMS/SOC2運用の効率化 〜 アカウント管理編 〜
shonansurvivors
4
640
SOC2取得の全体像
shonansurvivors
4
2.7k
非エンジニアによるDevin開発のためにSREができること
shonansurvivors
0
240
SREによる隣接領域への越境とその先の信頼性
shonansurvivors
2
970
スタートアップがAWSパートナーになって得られたこと
shonansurvivors
3
1.3k
Terraformでmoduleを使わずに複数環境を構築して感じた利点
shonansurvivors
3
4k
クロステナントアクセスを要件とするsmartroundのマルチテナントSaaSアーキテクチャ
shonansurvivors
0
580
CodeBuildで動かすecspresso
shonansurvivors
2
4.6k
Other Decks in Technology
See All in Technology
形式手法特論:SMT ソルバで解く認可ポリシの静的解析 #kernelvm / Kernel VM Study Tsukuba No3
ytaka23
1
790
Phase11_戦略的AI経営
overflowinc
0
1.5k
SSoT(Single Source of Truth)で「壊して再生」する設計
kawauso
2
330
Physical AI on AWS リファレンスアーキテクチャ / Physical AI on AWS Reference Architecture
aws_shota
1
130
開発チームとQAエンジニアの新しい協業モデル -年末調整開発チームで実践する【QAリード施策】-
kaomi_wombat
0
240
スピンアウト講座01_GitHub管理
overflowinc
0
1.3k
Astro Islandsの 内部実装を 「日本で一番わかりやすく」 ざっくり解説!
knj
1
280
Phase05_ClaudeCode入門
overflowinc
0
2.1k
SaaSに宿る21g
kanyamaguc
2
160
Bref でサービスを運用している話
sgash708
0
190
Kiroで見直す開発プロセスとAI-DLC
k_adachi_01
0
130
DDD×仕様駆動で回す高品質開発のプロセス設計
littlehands
6
2.4k
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
New Earth Scene 8
popppiees
1
1.8k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
770
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.1k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
240
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
230
Tell your own story through comics
letsgokoyo
1
870
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
A better future with KSS
kneath
240
18k
Transcript
#techbrew_findy AWSで構築するCDパイプラインと その改善 株式会社スマートラウンド 山原 崇史(@shonansurvivors)
自己紹介 株式会社スマートラウンド SRE/CorporateITグループ エンジニアリングマネージャー 山原 崇史 (やまはら たかし) 経歴等 ・SIer
→ 銀行 → Web系ベンチャー数社 → 現職 ・2023 Japan AWS Top Engineers ・AWS Startup Community Core Member 好きな技術領域 AWS / Terraform / GitHub Actions shonansurvivors
事業およびプロダクト紹介 ミッション スタートアップが可能性を最大限に発揮できる世界をつくる smartroundが実現する世界 統一化・標準化されたデータ管理によって、スタートアップと投資家双方の業務を効率化
本日のテーマ AWSで構築するCDパイプラインとその改善 AWS上で稼働させているプロダクトについて、その CDパイプラインもAWSのサービスで構築しました。 その背景や考え方のほか、CDの品質を高めるための改善についてお話しします。 想定聴講者 • AWS CodePipelineやCodeBuildを知らない人 •
AWSは使っているが、CIもCDもGitHub Actionsで実施している人
アジェンダ 1. CodePipelineの概要と選択の背景 2. CodeBuildの活用 3. CDの品質を高める工夫 4. まとめ
1. CodePipelineの概要と 選択の背景
CodePipelineとは AWSのCI/CDパイプラインサービス。 知らない人向けにごく簡潔に説明すると、 各種AWSサービスや外部サービスを直列・並列に組み合わせて パイプラインを構築できる。
CI/CDの構成 • CI ◦ GitHub Actions • CD ◦ CodePipeline
• ブランチ戦略 ◦ git-flow ▪ 長命なブランチとして developとmainが存在 ▪ 本番リリース時はdevelopからreleaseブランチを切ってstg環境にデプロイ ▪ releaseブランチの検証に問題なければ mainにマージすることで本番デプロイ開始
CDにCodePipelineを選択している背景 CDは、本番環境のWRITE権限という強力な権限 を持つことになる。 CIサービス側にCDも担わせると、CIの権限で、上記の強力な権限を使用 できる(※)。 CodePipelineはプロダクト初期より使用しているが、 エンタープライズの顧客も増え、セキュリティや統制の必要性が高まる中、 CDをCIサービス側に寄せず、 CIはGitHub Actions、CDはCodePipelineという構成を選択し続けている。
また、CodePipelineに承認機能があり、不正なデプロイへの多層防御が図れることも選定のポイント。 (これだけだと価値提供の速度を軽視しているように見えますが、そこは別の工夫で担保しています ) ※参考:CIOpsとGitOpsの話 (https://blog.inductor.me/entry/2021/09/24/015402)
CodePipeline v1とv2のおもな違い 2023年登場のv2が多機能だが、料金の考え方が大きく異なる v1 v2 GitHub 連携時の 起動トリガー 事前に定めたブランチへの コミットプッシュのみ
以下の条件を組み合わせ可能 • 任意のブランチ • 任意のタグ • コミットプッシュ • タグプッシュ • プルリクエスト • 任意のファイルパス その他の 起動トリガー • S3へのアップロード • ECRへのイメージプッシュ 等 承認機能 あり 料金 固定 (1パイプラインあたり1USD/月) 処理時間に応じた従量制 (0.002USD/分)
2. CodeBuildの活用
CodeBuildについて • GitHub Actionsのように、YAMLで処理を定義し実行できる • CodeBuildという名前だが、処理さえ書けばテストでもデプロイでも何でも (※)できる ※ただし、キャッシュの取り回しなど、 GitHub Actionsと比べると見劣りする点は色々ある
CodeBuildを使わないCodePipeline • 要件次第ではCodeBuildを使わずに CDを実現できるケースもある (右はECR, S3, ECSとの連携のみを使用 ) • ただし、自由に処理が書ける
CodeBuildが 必要となる場面が多いはず
CodeBuild on CodePipelineによるCD • 当社のCodePipeline上ではCodeBuildにより以下を実施 ◦ FlywayによるDBマイグレーションの実行 ◦ ecspressoによるECSへのデプロイ ◦
Serverless FrameworkによるLambdaやその周辺リソースのデプロイ
CodeBuildでのGitHub Actionsの使用 GitHub Actionsのカスタムアクションを使用できる version: 0.2 phases: # 略 build:
steps: - uses: kayac/ecspresso@v2 # ecspressoのインストールのみを行うアクション with: version: v2.3.2 - run: ecspresso deploy
3. CDの品質を高める
CI/CDの品質を考えてみる 一例 • パフォーマンス(速度) • 安定性 • コスト効率 • 柔軟性や拡張性
• セキュリティ • ユーザービリティ、開発者体験 • オブザーバビリティ
コスト効率・速度・安定性 各CodeBuildのスペックを処理の特性に応じて適正化 し、コスト効率を高めつつ、速度と安定性を確保 Source Kotlinイメージビルド nginxイメージビルド Flywayによる DBマイグレーション ECSデプロイ Kotlinビルド&
Lambdaデプロイ Kotlinビルド& Lambdaデプロイ Kotlinビルド& Lambdaデプロイ Kotlinビルド& Lambdaデプロイ ・・・ ※Lambdaは多くが夜間バッチ処理のためデプロイ速度は不要だが、 Kotlinのビルドを安定させるために Mediumを選択 CodePipeline Large Large Small Medium Small
その他 • セキュリティ ◦ CodePipeline、各CodeBuildのIAMロールに最小権限の原則を適用 • ユーザービリティ、開発者体験 ◦ 検証等の目的でCodeBuild単体で実行する場合をあらかじめ考慮 した設計
(パラメータを環境変数で注入可能にするなど )
4. まとめ
まとめ • CIとCDの責任分界を考えるのであれば CIにGitHub Actions、CDにCodePipeline、は1つの選択肢 • CodePipelineにCodeBuildを組み込むことで、ある程度柔軟に多様な処理を実現可能 • CI/CDの品質は様々考えられると思うので、それぞれ改善して 最適化に取り組んでいきましょう!
◦ パフォーマンス(速度) ◦ 安定性 ◦ コスト効率 ◦ 柔軟性や拡張性 ◦ セキュリティ ◦ ユーザービリティ、開発者体験 ◦ オブザーバビリティ
スマートラウンドでは新しいメンバーを募集中です 私たちと一緒に、スタートアップが可能性を最大限に発揮できる世界をつくりませんか? jobs.smartround.com