AWSで構築するCDパイプラインとその改善
by
shonansurvivors
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
#techbrew_findy AWSで構築するCDパイプラインと その改善 株式会社スマートラウンド 山原 崇史(@shonansurvivors)
Slide 2
Slide 2 text
自己紹介 株式会社スマートラウンド SRE/CorporateITグループ エンジニアリングマネージャー 山原 崇史 (やまはら たかし) 経歴等 ・SIer → 銀行 → Web系ベンチャー数社 → 現職 ・2023 Japan AWS Top Engineers ・AWS Startup Community Core Member 好きな技術領域 AWS / Terraform / GitHub Actions shonansurvivors
Slide 3
Slide 3 text
事業およびプロダクト紹介 ミッション スタートアップが可能性を最大限に発揮できる世界をつくる smartroundが実現する世界 統一化・標準化されたデータ管理によって、スタートアップと投資家双方の業務を効率化
Slide 4
Slide 4 text
本日のテーマ AWSで構築するCDパイプラインとその改善 AWS上で稼働させているプロダクトについて、その CDパイプラインもAWSのサービスで構築しました。 その背景や考え方のほか、CDの品質を高めるための改善についてお話しします。 想定聴講者 ● AWS CodePipelineやCodeBuildを知らない人 ● AWSは使っているが、CIもCDもGitHub Actionsで実施している人
Slide 5
Slide 5 text
アジェンダ 1. CodePipelineの概要と選択の背景 2. CodeBuildの活用 3. CDの品質を高める工夫 4. まとめ
Slide 6
Slide 6 text
1. CodePipelineの概要と 選択の背景
Slide 7
Slide 7 text
CodePipelineとは AWSのCI/CDパイプラインサービス。 知らない人向けにごく簡潔に説明すると、 各種AWSサービスや外部サービスを直列・並列に組み合わせて パイプラインを構築できる。
Slide 8
Slide 8 text
CI/CDの構成 ● CI ○ GitHub Actions ● CD ○ CodePipeline ● ブランチ戦略 ○ git-flow ■ 長命なブランチとして developとmainが存在 ■ 本番リリース時はdevelopからreleaseブランチを切ってstg環境にデプロイ ■ releaseブランチの検証に問題なければ mainにマージすることで本番デプロイ開始
Slide 9
Slide 9 text
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)
Slide 10
Slide 10 text
CodePipeline v1とv2のおもな違い 2023年登場のv2が多機能だが、料金の考え方が大きく異なる v1 v2 GitHub 連携時の 起動トリガー 事前に定めたブランチへの コミットプッシュのみ 以下の条件を組み合わせ可能 ● 任意のブランチ ● 任意のタグ ● コミットプッシュ ● タグプッシュ ● プルリクエスト ● 任意のファイルパス その他の 起動トリガー ● S3へのアップロード ● ECRへのイメージプッシュ 等 承認機能 あり 料金 固定 (1パイプラインあたり1USD/月) 処理時間に応じた従量制 (0.002USD/分)
Slide 11
Slide 11 text
2. CodeBuildの活用
Slide 12
Slide 12 text
CodeBuildについて ● GitHub Actionsのように、YAMLで処理を定義し実行できる ● CodeBuildという名前だが、処理さえ書けばテストでもデプロイでも何でも (※)できる ※ただし、キャッシュの取り回しなど、 GitHub Actionsと比べると見劣りする点は色々ある
Slide 13
Slide 13 text
CodeBuildを使わないCodePipeline ● 要件次第ではCodeBuildを使わずに CDを実現できるケースもある (右はECR, S3, ECSとの連携のみを使用 ) ● ただし、自由に処理が書ける CodeBuildが 必要となる場面が多いはず
Slide 14
Slide 14 text
CodeBuild on CodePipelineによるCD ● 当社のCodePipeline上ではCodeBuildにより以下を実施 ○ FlywayによるDBマイグレーションの実行 ○ ecspressoによるECSへのデプロイ ○ Serverless FrameworkによるLambdaやその周辺リソースのデプロイ
Slide 15
Slide 15 text
CodeBuildでのGitHub Actionsの使用 GitHub Actionsのカスタムアクションを使用できる version: 0.2 phases: # 略 build: steps: - uses: kayac/ecspresso@v2 # ecspressoのインストールのみを行うアクション with: version: v2.3.2 - run: ecspresso deploy
Slide 16
Slide 16 text
3. CDの品質を高める
Slide 17
Slide 17 text
CI/CDの品質を考えてみる 一例 ● パフォーマンス(速度) ● 安定性 ● コスト効率 ● 柔軟性や拡張性 ● セキュリティ ● ユーザービリティ、開発者体験 ● オブザーバビリティ
Slide 18
Slide 18 text
コスト効率・速度・安定性 各CodeBuildのスペックを処理の特性に応じて適正化 し、コスト効率を高めつつ、速度と安定性を確保 Source Kotlinイメージビルド nginxイメージビルド Flywayによる DBマイグレーション ECSデプロイ Kotlinビルド& Lambdaデプロイ Kotlinビルド& Lambdaデプロイ Kotlinビルド& Lambdaデプロイ Kotlinビルド& Lambdaデプロイ ・・・ ※Lambdaは多くが夜間バッチ処理のためデプロイ速度は不要だが、 Kotlinのビルドを安定させるために Mediumを選択 CodePipeline Large Large Small Medium Small
Slide 19
Slide 19 text
その他 ● セキュリティ ○ CodePipeline、各CodeBuildのIAMロールに最小権限の原則を適用 ● ユーザービリティ、開発者体験 ○ 検証等の目的でCodeBuild単体で実行する場合をあらかじめ考慮 した設計 (パラメータを環境変数で注入可能にするなど )
Slide 20
Slide 20 text
4. まとめ
Slide 21
Slide 21 text
まとめ ● CIとCDの責任分界を考えるのであれば CIにGitHub Actions、CDにCodePipeline、は1つの選択肢 ● CodePipelineにCodeBuildを組み込むことで、ある程度柔軟に多様な処理を実現可能 ● CI/CDの品質は様々考えられると思うので、それぞれ改善して 最適化に取り組んでいきましょう! ○ パフォーマンス(速度) ○ 安定性 ○ コスト効率 ○ 柔軟性や拡張性 ○ セキュリティ ○ ユーザービリティ、開発者体験 ○ オブザーバビリティ
Slide 22
Slide 22 text
スマートラウンドでは新しいメンバーを募集中です 私たちと一緒に、スタートアップが可能性を最大限に発揮できる世界をつくりませんか? jobs.smartround.com