🚀 CodePipeline アクションタイプ

本の出版プロセスで理解する!6つのアクションタイプ

📚 本の出版プロセスで例えると超わかりやすい!

CodePipelineは「本の出版社」のようなもの!

作家が原稿を書いて、編集して、校正して、印刷して、書店に配本するまでの
一連のプロセスを自動化 してくれるサービスです✨

6つのアクションタイプを理解すれば、完璧なCI/CDパイプラインが作れます!

📖 本の出版プロセス = CodePipeline
📝
1. Source
原稿を入手する
作家が書いた原稿をGitHubから取得。新しい章が追加されたら自動的に気づく!
🏢 実際のAWS:
GitHub、CodeCommit、S3からソースコードを取得
🏗️
2. Build
原稿を製本する
原稿をきれいに整形して、本の形に仕上げる。表紙をつけて、ページ番号を振って完成!
🏢 実際のAWS:
CodeBuildでコンパイル、Dockerイメージ作成、アーティファクト生成
🔍
3. Test
校正・品質チェック
誤字脱字チェック、内容の確認、印刷品質のテスト。問題があれば出版ストップ!
🏢 実際のAWS:
ユニットテスト、統合テスト、セキュリティスキャン実行
4. Approval
編集長の最終承認
編集長が「これで出版してOK!」と承認するまで待機。承認されたら次のステップへ!
🏢 実際のAWS:
手動承認。本番デプロイ前に人間が最終確認
🚚
5. Deploy
書店に配本する
完成した本を全国の書店に配送!お客様が購入できるようになります。
🏢 実際のAWS:
ECS、EKS、Lambda、S3などに自動デプロイ
6. Invoke
特別な作業を依頼
出版後に「SNSで宣伝」「在庫を確認」など、カスタムの作業を実行!
🏢 実際のAWS:
Lambda関数を実行してカスタム処理(通知、データ処理など)

📋 各アクションタイプの詳細

📝

Source

ソースコードの取得

🎯 役割
パイプラインの起点。コードリポジトリから最新のソースコードを自動取得して、パイプラインを開始します。
🔌 主なプロバイダー
GitHub CodeCommit S3 Bitbucket ECR

💡 使用例

  • GitHubにpushしたら自動実行
  • 特定のブランチを監視
  • タグがプッシュされたら開始
🏗️

Build

コードのビルド

🎯 役割
ソースコードをコンパイルし、実行可能な形式に変換。依存関係の解決やアーティファクトの作成を行います。
🔌 主なプロバイダー
CodeBuild Jenkins CloudBees

💡 使用例

  • Javaアプリのコンパイル
  • Dockerイメージの作成
  • npm install & build実行
🔍

Test

品質テスト

🎯 役割
ビルドされたコードの品質を確認。テストが失敗するとパイプラインを停止して、問題のあるコードのデプロイを防ぎます。
🔌 主なプロバイダー
CodeBuild Jenkins Device Farm Third-party

💡 使用例

  • ユニットテスト実行
  • 統合テスト実行
  • セキュリティスキャン
🚚

Deploy

アプリケーションのデプロイ

🎯 役割
ビルドされたアプリケーションを実際の環境(開発、ステージング、本番)に自動デプロイします。
🔌 主なプロバイダー
CodeDeploy ECS EKS S3 CloudFormation Elastic Beanstalk

💡 使用例

  • EC2インスタンスにデプロイ
  • ECSタスク更新
  • S3に静的サイト公開

Approval

手動承認

🎯 役割
パイプラインを一時停止し、人間による承認を待ちます。承認されるまで次のステージには進みません。
🔌 主なプロバイダー
Manual Approval SNS通知

💡 使用例

  • 本番デプロイ前の承認
  • 重要な変更の確認
  • コンプライアンスチェック

Invoke

カスタム処理の実行

🎯 役割
Lambda関数を呼び出してカスタム処理を実行。パイプラインの任意の場所で独自のロジックを実行できます。
🔌 主なプロバイダー
Lambda Step Functions

💡 使用例

  • Slack通知送信
  • データベース更新
  • カスタムバリデーション

🔄 実際のワークフロー例

Webアプリケーションの完全なCI/CDパイプライン

📍 Stage 1: Source
📝
GitHub Source
mainブランチを監視
📍 Stage 2: Build & Test
🏗️
CodeBuild
Dockerイメージ作成
🔍
Unit Tests
Jest実行
📍 Stage 3: Deploy to Staging
🚚
ECS Deploy
ステージング環境
🔍
Integration Tests
E2Eテスト実行
📍 Stage 4: Approval
Manual Approval
マネージャー承認待ち
📍 Stage 5: Deploy to Production
🚚
ECS Deploy
本番環境
Lambda Invoke
Slack通知送信

💻 CodePipeline定義例

CloudFormationでのPipeline定義
MyPipeline:
  Type: AWS::CodePipeline::Pipeline
  Properties:
    Name: WebApp-Pipeline
    RoleArn: !GetAtt PipelineRole.Arn
    Stages:
      # 1. Source Stage
      - Name: Source
        Actions:
          - Name: SourceAction
            ActionTypeId:
              Category: Source
              Owner: ThirdParty
              Provider: GitHub
              Version: '1'
            Configuration:
              Owner: your-username
              Repo: your-repo
              Branch: main
            OutputArtifacts:
              - Name: SourceOutput

      # 2. Build & Test Stage
      - Name: Build
        Actions:
          - Name: BuildAction
            ActionTypeId:
              Category: Build
              Owner: AWS
              Provider: CodeBuild
              Version: '1'
            InputArtifacts:
              - Name: SourceOutput
            OutputArtifacts:
              - Name: BuildOutput

      # 3. Approval Stage
      - Name: Approval
        Actions:
          - Name: ManualApproval
            ActionTypeId:
              Category: Approval
              Owner: AWS
              Provider: Manual
              Version: '1'
            Configuration:
              NotificationArn: !Ref ApprovalTopic

      # 4. Deploy Stage
      - Name: Deploy
        Actions:
          - Name: DeployAction
            ActionTypeId:
              Category: Deploy
              Owner: AWS
              Provider: ECS
              Version: '1'
            InputArtifacts:
              - Name: BuildOutput

      # 5. Invoke Lambda Stage
      - Name: Notify
        Actions:
          - Name: InvokeLambda
            ActionTypeId:
              Category: Invoke
              Owner: AWS
              Provider: Lambda
              Version: '1'
            Configuration:
              FunctionName: SlackNotifier

💡 ベストプラクティス

🔄

段階的デプロイ

開発→ステージング→本番の順でデプロイ。各環境でテストを実施しましょう。

本番前の承認

本番環境へのデプロイ前には必ずApprovalアクションを入れて、人間の確認を挟みましょう。

📊

並列実行の活用

同じステージ内で複数のアクションを並列実行すると、パイプラインが高速化します。

🔔

通知設定

パイプラインの成功・失敗をSNSやSlackで通知。すぐに問題に気づけます。

🔒

IAM権限の最小化

各アクションに必要最小限の権限だけを付与。セキュリティを強化しましょう。

🎯

アーティファクトの管理

S3にアーティファクトを保存し、各ステージ間でデータを確実に受け渡しましょう。

🧪

テストの充実

ユニットテスト、統合テスト、E2Eテストを段階的に実施して品質を確保。

🔁

ロールバック計画

デプロイに失敗した場合の自動ロールバックを設定。すぐに前バージョンに戻せます。

🎓 まとめ

📚 本の出版プロセス = CodePipeline

原稿入手(Source)→ 製本(Build)→ 校正(Test)→
承認(Approval)→ 配本(Deploy)→ 宣伝(Invoke)

📝
Source
コード取得
🏗️
Build
ビルド実行
🔍
Test
品質確認
🚚
Deploy
デプロイ
Approval
手動承認
Invoke
カスタム処理

🎯 これらを組み合わせれば...
完璧なCI/CDパイプラインの完成!
コミットからデプロイまで全自動✨

Created by SSuzuki1063

AWS SAP Learning Resources