Oladapo862/AWS-CLOUD-SUPPORT-TRAINING
GitHub: Oladapo862/AWS-CLOUD-SUPPORT-TRAINING
一个展示 AWS 云支持工程师全栈技能的生产级实战项目,涵盖从 VPC 网络到 ECS 容器编排、CI/CD、Terraform 自动化及监控告警的端到端云基础设施部署与故障排除过程。
Stars: 0 | Forks: 0
# 🚀 AWS Cloud Support Engineer 生产项目
## 📖 项目概述
本项目记录了我在 AWS 上通过部署由 Flask 应用程序提供服务的简单 HTML 网站,实现生产级云环境的端到端过程。该项目的主要目标并非仅限于应用程序开发,而是通过设计、部署、故障排除、监控和自动化一套类似于生产环境的完整云基础设施,来展示 Cloud Support Engineer 的实操技能。
项目首先使用 Amazon VPC 构建了安全的网络架构,随后逐步深入到计算、存储、容器化、编排、网络、监控、自动化和基础设施即代码。在每个阶段,我都验证了部署情况、记录了配置,并解决了实施过程中遇到的问题,以此模拟 Cloud Support Engineer 的日常职责。
# 架构
```
Users
│
Route 53
│
Application Load Balancer
│
Target Group
│
Amazon ECS Service
│
Docker Container
│
Flask Application
│
Amazon ECR
│
CI/CD Pipeline
│
GitHub
│
CloudWatch
│
SNS Notifications
│
CloudTrail Logs
```
基础设施配置在具有公有子网和私有子网的自定义 VPC 中,并通过 Security Groups、Route Tables 和 Network ACLs 进行安全防护。
# 使用的技术
* AWS VPC
* Amazon EC2
* AWS Systems Manager (SSM)
* Amazon EBS
* Amazon EFS
* Amazon S3
* Docker
* Python Flask
* Git
* GitHub
* Amazon ECR
* Amazon ECS
* Target Groups
* Application Load Balancer
* Route 53
* Auto Scaling
* CI/CD
* Amazon CloudWatch
* Amazon SNS
* AWS CloudTrail
* Amazon RDS
* Terraform
* Linux
* AWS CLI
# 项目实施
## VPC
我创建了自定义 VPC,而没有使用默认的 AWS 网络。我为公有子网和私有子网配置了专用的路由表、Internet Gateway 和 NAT Gateway,以在面向互联网的资源与后端服务之间提供安全的通信。同时配置了 Security Groups 和 Network ACLs 来控制入站和出站流量,并验证了所有网络组件之间的连通性。
**故障排除:** 路由表配置错误、CIDR 块不正确、互联网连接问题、Security Groups 规则、NAT Gateway 路由以及 Network ACL 冲突。
## EC2 (SSH & SSM)
我启动了 Amazon EC2 实例来托管应用程序并执行管理任务。我配置了 Secure Shell (SSH) 和 AWS Systems Manager Session Manager,以在不暴露不必要端口的情况下实现安全的远程访问。同时附加了 IAM 角色以允许与 Systems Manager 通信。
**故障排除:** SSH 连接失败、密钥对缺失、SSM agent 连接问题、IAM 权限错误、Security Groups 限制以及实例不可达。
## 3. 存储 (EBS, EFS & S3)
通过挂载到 EC2 实例的 Amazon EBS 卷实现了持久化存储。Amazon EFS 被配置用于共享文件存储,而 Amazon S3 在启用版本控制的情况下,被用于存储应用程序资产、备份和部署制品。
**故障排除:** 挂载失败、存储权限错误、bucket 策略、文件系统配置不正确以及磁盘利用率问题。
## EC2 上的 Docker
在 EC2 上安装并配置了 Docker 以实现应用程序的容器化。在此过程中创建了镜像、管理了容器、配置了网络,并测试了持久化卷以确保应用程序的一致性。
**故障排除:** 容器崩溃、Docker daemon 故障、端口冲突、镜像缺失以及卷映射问题。
## 5. Flask 应用程序
开发了一个轻量级的 Flask 应用程序来提供简单的 HTML 网站服务,并将其部署在 Docker 容器内。在部署到 AWS 之前,配置了环境变量并在本地对应用程序进行了测试。
**故障排除:** 依赖冲突、应用程序端口不正确、Flask 启动错误、Python 包问题以及容器 runtime 故障。
## Git
在整个项目中使用了 Git 进行版本控制。通过维护功能分支、提交、合并和仓库历史记录,来跟踪项目进度并支持协作开发实践。
**故障排除:** 合并冲突、意外提交、分支同步以及仓库恢复。
## GitHub
项目托管在 GitHub 上,并具有结构化的仓库、文档和版本历史。GitHub 作为 CI/CD pipeline 的中央源代码仓库。
**故障排除:** 身份验证失败、仓库权限、远程配置问题以及推送冲突。
## Docker Build
使用优化的 Dockerfiles 构建了生产级 Docker 镜像。在部署之前对镜像进行了本地测试,并移除了不必要的层以减小镜像体积。
**故障排除:** 构建失败、缺少依赖项、Docker 缓存问题、工作目录不正确以及启动命令错误。
## Amazon ECR
Docker 镜像安全地存储在 Amazon Elastic Container Registry (ECR) 中。实施了身份验证、仓库管理、镜像标记和版本控制以支持部署。
**故障排除:** 身份验证失败、镜像推送错误、仓库权限以及镜像版本不匹配。
## Amazon ECS
Amazon Elastic Container Service (ECS) 被用于编排容器部署。创建了 Task Definitions、Services 和 Cluster 配置,以确保应用程序的可用性和可扩展性。
**故障排除:** Task 失败、容器不健康、资源不足、部署失败以及 IAM 权限问题。
## Target Group
配置了 Target Group 以注册 ECS task 并执行持续的运行状况检查。这确保了只有健康的应用程序实例才会接收流量。
**故障排除:** 运行状况检查失败、端口不正确、目标不健康以及网络配置错误。
## Application Load Balancer
部署了 Application Load Balancer (ALB) 以在 ECS task 之间分配传入流量。配置了监听器规则和路由行为以提高可用性。
**故障排除:** HTTP 502/503 错误、监听器配置、后端通信失败、SSL 问题以及目标注册问题。
## Route 53
配置了 Amazon Route 53,通过使用托管区域和指向 Application Load Balancer 的别名记录,为已部署的应用程序提供 DNS 解析。
**故障排除:** DNS 传播延迟、记录配置不正确、别名解析失败以及域名验证问题。
## Auto Scaling
实施了 Auto Scaling 策略,以根据工作负载需求自动增加或减少应用程序容量,从而同时提高了可用性并优化了成本。
**故障排除:** 扩展策略未触发、启动失败、实例不健康以及容量不足。
## CI/CD
实施了持续集成和持续部署 (CI/CD) pipeline,以实现从 GitHub 到 AWS 的应用程序部署自动化。代码更改会触发自动化的构建和部署过程,从而减少了人工干预。
**故障排除:** Pipeline 执行失败、部署回滚、构建错误、缺少环境变量以及身份验证问题。
## CloudWatch
配置了 Amazon CloudWatch 以收集指标、应用程序日志、dashboards 和警报。持续监控资源利用率和应用程序性能,以便在影响用户之前检测到运营问题。
**故障排除:** 日志缺失、警报配置错误、指标收集失败、CloudWatch Agent 问题以及日志传输延迟。
## Amazon SNS
将 Amazon Simple Notification Service (SNS) 与 CloudWatch 警报集成,以便在发生关键阈值或故障时发送电子邮件通知。
**故障排除:** 订阅确认失败、通知送达问题、权限错误以及警报集成问题。
## AWS CloudTrail
启用了 AWS CloudTrail 以记录整个环境中的所有 API 活动。通过审查日志来审计基础设施变更、调查事件并识别未经授权的操作。
**故障排除:** 事件缺失、追踪被禁用、日志配置问题以及 S3 传输失败。
## 19. 数据库
配置了关系型数据库以支持应用程序。在整个部署过程中,对连接、身份验证、备份、存储管理和性能监控进行了验证。
**故障排除:** 连接失败、身份验证错误、存储限制、CPU 高利用率以及查询性能缓慢。
## Terraform
使用 Terraform 自动化了基础设施配置。将网络、计算资源、存储和支持服务定义为代码,以实现一致、可重复的部署。
**故障排除:** 状态冲突、provider 身份验证问题、依赖项排序、资源漂移以及 apply 操作失败。
## 21. 生产事件模拟
为了加强运营准备,我模拟了横跨网络、计算、存储、容器、负载均衡、监控、安全和部署等领域的众多生产事件。每个场景都遵循结构化的故障排除方法论:
* 识别症状
* 收集证据
* 审查日志和指标
* 确定根本原因
* 实施恢复
* 验证系统健康状况
* 记录根本原因分析 (RCA)
这项练习增强了我系统性响应生产问题的能力,同时最大限度地减少了停机时间。
# 展示的技能
* AWS 基础设施部署
* 云网络
* Linux 管理
* EC2 管理
* Docker 容器化
* 使用 ECS 进行容器编排
* 负载均衡
* DNS 管理
* 存储管理
* 实施 CI/CD
* 基础设施即代码
* 监控与警报
* 日志分析
* 安全最佳实践
* 生产环境故障排除
* 事件响应
* 根本原因分析
* 云自动化
* 版本控制
* 技术文档编写
# 核心收获
通过这个项目,我积累了使用生产环境中常见的 AWS 服务部署和支持云原生应用程序的实践经验。除了部署基础设施之外,我重点关注了验证配置、监控系统健康状况、对故障进行排除、记录实施步骤以及自动化部署。本项目反映了 Cloud Support Engineer 的日常职责,包括基础设施管理、运营支持、事件调查以及基于云系统的持续改进。
## 未来改进
未来的增强功能包括使用 AWS Certificate Manager 实施 HTTPS、使用 AWS WAF 保护应用程序、ECS 蓝/绿部署、集中式日志聚合、容器漏洞扫描、用于业务指标的 CloudWatch dashboards、自动化备份、灾难恢复策略以及高级安全监控,从而使环境进一步符合企业生产标准。
标签:AWS, Docker, DPI, 安全防御评估, 监控, 网络安全研究, 请求拦截, 运维