チーム
AWS では、CI/CD 環境を実装するために、アプリケーションチーム、インフラストラクチャチーム、ツールチームの 3 つのデベロッパーチームを編成することを推奨しています (下の図を参照)。この組織は、急速に変化するスタートアップ、大規模なエンタープライズ組織、および Amazon 自身で構築され、適用されてきた一連のベストプラクティスを示しています。チームは、2 枚のピザが十分な食事となるグループ、すなわち約 10~12 人よりも大きくするべきではありません。これは、グループサイズが拡大し、コミュニケーション経路が増加するにつれて有意義な会話が限界に達するというコミュニケーションのルールに従っています。
アプリケーション、インフラストラクチャ、およびツールチーム
アプリケーションチーム
アプリケーションチームは、アプリケーションを作成します。アプリケーションデベロッパーは、バックログ、ストーリー、およびユニットテストを担当し、指定されたアプリケーションターゲットに基づいて機能を開発します。このチームの組織上の目標は、デベロッパーがコア以外のアプリケーションタスクに費やす時間を最小限に抑えることです。
アプリケーションチームは、アプリケーション言語における機能的なプログラミングスキルを持つだけでなく、プラットフォームスキルとシステム構成の理解を持ち合わせる必要があります。これにより、チームは機能の開発およびアプリケーションの強化のみに集中することができます。
インフラストラクチャチーム
インフラストラクチャチームは、アプリケーションの実行に必要なインフラストラクチャを作成および構成するコードを記述します。このチームは、AWS CloudFormation などの ネイティブ AWS ツール、または Chef、Puppet、Ansible などの汎用ツールを使用することがあります。インフラストラクチャチームは、必要なリソースの指定を担当し、アプリケーションチームと密接に連携します。インフラストラクチャチームは、小規模なアプリケーションでは 1 人または 2 人 のみで構成されることがあります。
チームには、AWS CloudFormation や HashiCorp Terraform などのインフラストラクチャプロビジョニング手法に関するスキルが必要です。また、チームは、Chef、Ansible、Puppet、Salt などのツールを使用した構成オートメーションのスキルを高める必要もあります。
ツールチーム
ツールチームは、CI/CD パイプラインを構築および管理します。このチームは、パイプラインを構成するインフラストラクチャとツールを担当します。このチームは「2 枚のピザ」チームの一部ではありませんが、組織内のアプリケーションおよびインフラストラクチャチームによって使用されるツールを作成します。組織は、ツールチームがアプリケーションチームおよびインフラストラクチャチームの成熟の一歩先を行くように、ツールチームを継続的に成熟させる必要があります。
ツールチームは、CI/CD パイプラインのすべてのパートを構築して統合するためのスキルを備えなければなりません。これには、ソース管理リポジトリ、ワークフローエンジン、ビルド環境、テストフレームワーク、およびアーティファクトリポジトリの構築が含まれます。このチームは、AWS CodeStar、AWS CodePipeline、AWS CodeCommit、AWS CodeDeploy、AWS CodeBuild、AWS CodeArtifact などのソフトウェアに加え、Jenkins、GitHub、Artifactory、TeamCity およびその他の類似ツールを実装することも選択できます。これを DevOps チームと呼ぶ組織もありますが、AWS はこれを推奨せず、DevOps をソフトウェアデリバリーにおける人材、プロセス、ツールの総体として考えるよう推奨しています。