mirror of
https://github.com/spring-projects/spring-petclinic.git
synced 2025-07-18 22:05:50 +00:00
feat: add a devops deployment guide
This commit is contained in:
parent
19d2fc291f
commit
f42def9851
2 changed files with 168 additions and 0 deletions
168
DEVOPS.md
Normal file
168
DEVOPS.md
Normal file
|
@ -0,0 +1,168 @@
|
|||
# DevOps & Deployment Guide
|
||||
|
||||
This document outlines the infrastructure architecture, networking, security, and CI/CD pipeline for deploying the Spring PetClinic application on AWS Fargate using Terraform and GitHub Actions.
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [Architecture Diagram](#architecture-diagram)
|
||||
2. [Infrastructure Components](#infrastructure-components)
|
||||
3. [Networking & Security](#networking--security)
|
||||
4. [CI/CD Pipeline](#cicd-pipeline)
|
||||
5. [Deployment Best Practices](#deployment-best-practices)
|
||||
6. [Quick Start](#quick-start)
|
||||
|
||||
---
|
||||
|
||||
## Architecture Diagram
|
||||
|
||||
The diagram below provides an end-to-end view of the VPC layout, AWS services, and CI/CD flow:
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph VPC [VPC (e.g. 10.0.0.0/16)]
|
||||
direction TB
|
||||
|
||||
subgraph Public Subnets
|
||||
direction LR
|
||||
PubA[Public Subnet (AZ‑A)]
|
||||
PubB[Public Subnet (AZ‑B)]
|
||||
end
|
||||
|
||||
subgraph Private Subnets
|
||||
direction LR
|
||||
PrivA[Private Subnet (AZ‑A)]
|
||||
PrivB[Private Subnet (AZ‑B)]
|
||||
end
|
||||
|
||||
IGW[Internet Gateway]
|
||||
NATGW[NAT Gateway]
|
||||
ALB[Application Load Balancer]
|
||||
ECSCluster[ECS Cluster]
|
||||
ECSService[ECS Fargate Service]
|
||||
TaskDef[Task Definition]
|
||||
ECR[ECR Repository]
|
||||
RDS[(RDS Database)]
|
||||
ExecRole[(ECS Task Execution Role)]
|
||||
SG_Fargate[(SG: Fargate Tasks)]
|
||||
SG_RDS[(SG: RDS)]
|
||||
end
|
||||
|
||||
Internet -->|80/443| ALB
|
||||
IGW --> ALB
|
||||
IGW --> NATGW
|
||||
ALB -->|Target Group| ECSService
|
||||
PubA --> ALB
|
||||
PubB --> ALB
|
||||
ECSService -->|Runs Task| TaskDef
|
||||
ECSService --> SG_Fargate
|
||||
ECSService --> ExecRole
|
||||
PrivA --> ECSService
|
||||
PrivB --> ECSService
|
||||
NATGW --> PrivA
|
||||
NATGW --> PrivB
|
||||
RDS --> SG_RDS
|
||||
PrivA --> RDS
|
||||
PrivB --> RDS
|
||||
TaskDef -->|Image| ECR
|
||||
|
||||
subgraph CI/CD [GitHub Actions]
|
||||
direction TB
|
||||
Build[Test & Package] --> Docker[Build & Push → ECR]
|
||||
Docker --> Terraform[Terraform Apply Infra]
|
||||
Terraform --> Register[Register Task Def]
|
||||
Register --> Deploy[Create/Update ECS Service]
|
||||
Deploy --> Verify[Wait for Service Stable]
|
||||
end
|
||||
|
||||
CI/CD --- ALB
|
||||
CI/CD --- ECSService
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Infrastructure Components
|
||||
|
||||
| Component | Purpose |
|
||||
| ----------------------------- | ------------------------------------------------- |
|
||||
| **VPC** | Custom VPC with public & private subnets |
|
||||
| **Internet Gateway (IGW)** | Provides internet ingress/egress |
|
||||
| **NAT Gateway** | Enables private subnet egress |
|
||||
| **Application Load Balancer** | Distributes HTTP/HTTPS traffic to ECS service |
|
||||
| **ECR Repository** | Stores Docker images for each environment |
|
||||
| **ECS Cluster (Fargate)** | Serverless container orchestration |
|
||||
| **Task Definition** | Defines container settings (CPU, memory, ports) |
|
||||
| **ECS Service** | Manages task count, health, and deployments |
|
||||
| **RDS Database** | Managed relational storage in private subnets |
|
||||
| **Security Groups** | Controls traffic between ALB, ECS tasks, and RDS |
|
||||
| **IAM Roles** | ECS execution role for ECR pull & CloudWatch logs |
|
||||
|
||||
---
|
||||
|
||||
## Networking & Security
|
||||
|
||||
* **Public Subnets**: Hosts ALB and NAT Gateway; reachable via IGW.
|
||||
* **Private Subnets**: Hosts ECS Fargate tasks and RDS; no direct internet access.
|
||||
* **Security Groups**:
|
||||
|
||||
* **ALB SG**: Allow inbound 80/443; outbound to ECS SG.
|
||||
* **Fargate SG**: Allow inbound from ALB SG; outbound to RDS SG & NAT Gateway.
|
||||
* **RDS SG**: Allow inbound only from Fargate SG.
|
||||
* **Network ACLs**: Optional subnet-level filters.
|
||||
* **IAM**: Least-privilege roles for ECS tasks and CI runners.
|
||||
|
||||
---
|
||||
|
||||
## CI/CD Pipeline
|
||||
|
||||
1. **Build & Test**
|
||||
|
||||
* Compile code (Maven/Gradle), run unit and integration tests.
|
||||
2. **Docker Build & Push**
|
||||
|
||||
* Build container, tag with commit SHA, push to ECR.
|
||||
3. **Terraform Provision**
|
||||
|
||||
* Apply infrastructure: VPC, subnets, ALB, RDS, ECS cluster.
|
||||
4. **Register Task Definition**
|
||||
|
||||
* `aws ecs register-task-definition` → exports `TASK_DEF_ARN`.
|
||||
5. **Deploy Service**
|
||||
|
||||
* `create-service` if new, else `update-service --force-new-deployment`.
|
||||
6. **Verify Deployment**
|
||||
|
||||
* `aws ecs wait services-stable` ensures healthy rollout.
|
||||
7. **Cleanup (Optional)**
|
||||
|
||||
* Tear down dev/staging resources via `terraform destroy` and cleanup scripts.
|
||||
|
||||
---
|
||||
|
||||
## Deployment Best Practices
|
||||
|
||||
* **Immutable Infrastructure**: Keep Terraform state remote and versioned.
|
||||
* **Zero‑Downtime Deployments**: Use rolling or canary strategies with ALB target groups.
|
||||
* **Scaling**: Configure ECS Service Auto Scaling on CPU/memory or custom CloudWatch metrics.
|
||||
* **Logging & Monitoring**: Centralize logs in CloudWatch; set alarms for error rates and resource usage.
|
||||
* **Secrets Management**: Store DB credentials and API keys in AWS Secrets Manager or Parameter Store.
|
||||
* **Network Segmentation**: Strict security group rules and private subnets for sensitive data.
|
||||
|
||||
---
|
||||
|
||||
## Quick Start
|
||||
|
||||
1. Fork or clone the repo.
|
||||
2. Add AWS credentials and secrets in GitHub (ECR, RDS, Terraform state).
|
||||
3. Update Terraform variables (`environment`, `vpc_id`, `db_username`, `db_password`).
|
||||
4. Trigger the **Deploy PetClinic** workflow or push to `dev`/`main`.
|
||||
5. Access your app via the ALB DNS name or custom domain.
|
||||
|
||||
---
|
||||
|
||||
*For full development instructions, refer to [README.md](./README.md).*
|
||||
|
||||
---
|
||||
|
||||
*This deployment design merges best practices with automated Terraform and GitHub Actions to deliver a robust, secure, and scalable PetClinic setup on AWS Fargate.*
|
BIN
image.png
Normal file
BIN
image.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 MiB |
Loading…
Reference in a new issue