AWS【インフラ構成/デプロイ/運用】自動化サービスまとめ

# 要約

| サービス名           | ざっくり表現          |
| --------------- | --------------- |
| CloudFormation  | インフラ構成自動化サービス   |
| CodePipeline    | 継続的デリバリー(※)自動化サービス |
| Systems Manager | 運用自動化・統合管理サービス  |

※デリバリーとは
ソフトウェアやシステムをユーザーや本番環境に届けること
（ビルド・テスト・デプロイ）

```
【環境構築フェーズ】　     【開発フェーズ】
  CloudFormation ──┬──> VPC, EC2, RDSなど構成
                   └──> CodePipeline（CI/CDフローで更新）

【運用フェーズ】
  Systems Manager ──> パッチ当て、パラメータ管理、ログイン管理、RunCommand
```

| 項目        | ① CloudFormation                       | ② CodePipeline                          | ③ Systems Manager                                       |
| --------- | -------------------------------------- | --------------------------------------- | ------------------------------------------------------- |
| **主目的**   | インフラ（AWSリソース）の構成をコードで定義・自動構築           | アプリのビルド・テスト・デプロイなどのCI/CDパイプライン構築        | 運用タスク（設定変更、パッチ適用、コマンド実行など）の自動化・統制                       |
| **人手の削減** | 環境構築の手動作業を削減                           | 開発フロー（Push → Build → Deploy）の手動作業を削減    | EC2へのSSH不要・一括コマンド実行などにより、運用工数を削減                        |
| **具体例**   | - VPC構築<br>- ALB＋EC2構築<br>- IAM設定のコード化 | - GitHubのPushをトリガーに自動デプロイ<br>- 手動承認付きCD | - EC2へRunCommandで一括コマンド実行<br>- SSM Parameter Storeで設定管理 |




# サービスと対象レイヤー表(内包サービスが分かるように表記)

| No.   | サービス名                                      | 対象領域                | 主な機能・役割                                      | 主なユースケース                                 | 管理レイヤー   | 特徴的な点                                              |
| ----- | ------------------------------------------ | ------------------- | -------------------------------------------- | ---------------------------------------- | -------- | -------------------------------------------------- |
| **1** | CloudFormation                         | IaC（インフラのコード管理）     | AWSリソース構成をYAML/JSONでテンプレート化し、自動で構築・変更        | VPCやEC2、RDSなどのインフラ構築をコードで一元化し、再現性を持たせた運用 | インフラレイヤー | 宣言型。依存関係解決、変更セット、ドリフト検出など多機能                       |
| 　　    | └─ **1.1** CDK (Cloud Development Kit) | IaC（開発者向け抽象化ツール）    | CloudFormationの抽象レイヤー。TypeScript等でリソース定義     | インフラをより開発者フレンドリーに定義（クラスベース）              | インフラレイヤー | CloudFormationをラップし、プログラム的に定義が可能                   |
| **2** | CodePipeline                           | CI/CD（自動化パイプライン）    | アプリのビルド、テスト、デプロイを自動化。各フェーズを接続してパイプライン化       | Git連携から本番デプロイまでの一連の流れを自動化                | アプリレイヤー  | GUI/コードでステージ定義。各種サービスと連携可                          |
| 　　    | └─ **2.1** CodeBuild                   | CI（ビルド）             | ソースコードのビルド、テスト、Dockerイメージ作成などを実行             | JavaやNodeなどのアプリのユニットテストやビルドなど            | アプリレイヤー  | コンテナ内で任意のビルド処理を定義可能                                |
| 　　    | └─ **2.2** CodeDeploy                  | CD（デプロイ）            | EC2, Lambda, オンプレミス環境へのアプリ自動デプロイ             | Blue/Greenデプロイやローリングアップデート               | アプリレイヤー  | フェイルセーフ、段階的デプロイ、ロールバック機能対応                         |
| **3** | Elastic Beanstalk                      | インフラ＋アプリ自動管理        | アプリケーションをアップロードするだけで、必要なインフラも自動構築・スケーリング     | 簡易的なWebアプリホスティング、開発初期の環境構築               | 両方       | 内部でCloudFormation, EC2, AutoScaling等を使用（ブラックボックス的） |
| **4** | Systems Manager                        | 構成管理・運用自動化          | パッチ適用、インベントリ収集、RunCommand、State管理、オートメーションなど | セキュリティパッチの自動適用、全社的な設定変更の一斉反映             | 両方       | Hybrid環境（オンプレ・他クラウド）対応、SSM Agentによる柔軟な制御           |
| **5** | OpsWorks                               | 構成管理（Chef / Puppet） | EC2などの構成をChef/Puppetで管理                      | サーバの中長期運用における構成管理、OSレベルでの制御              | インフラレイヤー | 現在は非推奨方向、Systems Managerに移行が進む                     |



## 関連構成の一例（流れ）

```
[1] CloudFormation/CDK
   └─ 環境を構築（VPC, EC2, IAM等）

[2] CodePipeline
   ├─ [2.1] CodeBuild → ソースコードをビルド
   └─ [2.2] CodeDeploy → ビルド済みアプリを本番にデプロイ

[5] Systems Manager
   └─ 構成の維持、パッチ適用、運用自動化
```


## 例：シナリオ毎の推奨サービス

| シナリオ例                      | 推奨サービス構成                              |
| -------------------------- | ------------------------------------- |
| インフラ全体をコードで管理・展開したい        | CloudFormation / CDK                  |
| アプリのビルド〜デプロイを自動化したい        | CodePipeline + CodeBuild + CodeDeploy |
| アプリとインフラの簡易運用を1パッケージで管理したい | Elastic Beanstalk                     |
| 構成管理・運用の自動化を一元的に行いたい       | Systems Manager（可能ならOpsWorksは回避）      |


## 🔍 Elastic Beanstalk の立ち位置と役割

以下の疑問が出来たので「Elastic Beanstalk」を調査

```
アプリとインフラの簡易運用を1パッケージで管理できる「Elastic Beanstalk」があるなら、
「cloudfarmation」や「codepipeline」を使う必要がなくない？
```

---

Elastic Beanstalk（以下EB）は「PaaS的なサービス」であり、以下を抽象化して自動構築してくれます。
EC2 / Auto Scaling / ELB / S3 / CloudWatch Logs / IAMロール、RDS（任意） / CodeDeploy（内部で使用される）
実は裏で CloudFormation を使ってリソースを定義している（ただしユーザーは意識しなくて良い）
つまり、 **初心者や少人数開発チームが簡単にデプロイまで可能な仕組み** 。

## ✅ Beanstalkだけで完結するケース（= CloudFormationやCodePipelineが不要）
| 状況                                | 結論                 |
| --------------------------------- | ------------------ |
| 小規模なWebアプリで、複雑なデプロイ戦略や環境分離が不要な場合  | **Beanstalk単体で十分** |
| 手軽にステージング／本番を使い分け、簡易的なCI/CDも不要な場合 | **他サービスは不要**       |


## ❌ Beanstalk「だけでは足りない」ケース（＝CloudFormationやCodePipelineが必要）

| 状況                                              | 推奨される補完サービス                  | 理由                                    |
| ----------------------------------------------- | ---------------------------- | ------------------------------------- |
| マルチアカウント構成・セキュリティ制御の明確な設計が必要                    | **CloudFormation**           | Beanstalkでは詳細なIAM構成やVPC設計を制御しにくい      |
| より高度なCI/CD（ステージ分け、承認フロー、複雑なジョブ定義）を行いたい          | **CodePipeline / CodeBuild** | EBのデプロイは単純すぎて複雑なCI/CDには不向き            |
| アプリとは別にインフラ（VPC、RDSなど）を先に細かく制御して構築したい           | **CloudFormation + EB**      | EBのRDS管理は柔軟性に乏しく、削除時に一緒に消えてしまうなどの制約あり |
| EBで管理できないリソース（DynamoDB、SQS、Lambdaなど）も含めて統合管理したい | **CloudFormation**           | EBでは非対応のサービスも多いため、外部で管理が必要            |


## まとめ

| 観点             | Beanstalkだけで完結 | 他サービスが必要な場合                        |
| -------------- | -------------- | ---------------------------------- |
| **開発初期・PoC**   | ✅              |                                    |
| **少人数チーム**     | ✅              |                                    |
| **大規模プロダクション** | ❌              | ✅ CloudFormationやCodePipelineなどが必要 |
| **柔軟なCI/CD構成** | ❌              | ✅ CodePipelineなどで統制                |
| **明示的なインフラ制御** | ❌              | ✅ CloudFormationが必須                |