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