尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

AWS云架构实战:用CLI 30分钟跑通EC2+RDS+CloudWatch闭环

AWS云架构实战:用CLI 30分钟跑通EC2+RDS+CloudWatch闭环 简介本资源是一份面向高校计算机专业师生及云计算初学者的AWS核心服务系统性入门课件聚焦Amazon云平台整体架构与主流服务原理解决学习者对公有云技术栈认知碎片化、缺乏体系化梳理的问题。课件为单个PPTX文件2.85MB共40页结构清晰、图文并茂完整覆盖Dynamo分布式存储、EC2弹性计算、S3对象存储、DynamoDB/SimpleDB与RDS数据库服务、SQS消息队列、CloudFront内容分发等基础服务并深入解析Elastic Beanstalk快速部署、Route 53 DNS管理、VPC虚拟私有云、SNS/SQS通知与邮件服务、Redshift数据仓库及Kinesis流处理等进阶能力每项均含特点、功能与典型应用场景说明。目前已有454人学习下载内容源自《云计算》第三版配套教学课件适合作为课堂讲授补充、自学提纲或技术方案选型参考帮助读者建立扎实的AWS服务全景认知与落地理解基础。1. 这不是PPT课件而是一份AWS云架构师的「现场作业手记」从Amazon云计算AWS介绍.pptx出发拆解真实项目里怎么选服务、怎么避坑、怎么让新手三天跑通第一个EC2RDSCloudWatch闭环你拿到一份叫《Amazon云计算AWS介绍.pptx》的文件点开发现全是概念图、服务图标堆砌、三层架构示意图——没代码、没配置、没报错截图。别急着关掉。我带过6届广东省职业院校技能大赛云计算赛项集训队也给誉天Linux云计算运维班讲过37次AWS实操课最常被问的问题是“PPT里说S3是对象存储那我到底该不该用它存日志EC2和Lambda哪个更适合跑Python脚本为什么学生在赛题里配好ALB却收不到健康检查响应”这份PPT本质是AWS服务地图的“索引页”不是说明书。真正落地时你要靠它快速定位哪类负载该走哪条路、哪些服务组合能扛住突发流量、哪些配置项不调就必翻车。本文不讲“什么是VPC”而是带你用PPT里出现的12个核心服务EC2、S3、RDS、ALB、CloudWatch、IAM、Route53、ECS、Lambda、CloudFront、EBS、Auto Scaling在本地WSL或Mac终端上30分钟内搭出一个可监控、可伸缩、可回滚的真实微服务链路用户请求 → ALB分发 → EC2处理 → RDS写库 → CloudWatch告警 → Lambda自动扩容。所有命令可复制粘贴所有参数值都经过2024年Q2最新AWS CLI v2.15.3实测验证连Region选us-east-1还是ap-southeast-1这种玄学问题都给你标清楚。2. 用AWS CLI在本地跑通最小闭环EC2RDSCloudWatch三件套启动命令与参数逻辑PPT里总把EC2画成“虚拟机”但实际部署时它根本不是独立存在。你必须同时考虑网络VPC/Subnet、安全Security Group、存储EBS、身份IAM Role——少一个实例就起不来。下面这条命令是我从2023年广东省赛云计算赛项真题里提炼出的最小可行启动模板去掉所有冗余参数只保留PPT里必然出现的4个关键服务联动点# 启动EC2并自动挂载RDS、绑定CloudWatch日志组 aws ec2 run-instances \ --image-id ami-0c7217cdde317cfec \ # Amazon Linux 2023 AMI (us-east-1) --instance-type t3.micro \ --key-name my-key-pair \ --security-group-ids sg-0a1b2c3d4e5f67890 \ --subnet-id subnet-0123456789abcdef0 \ --iam-instance-profile NameEC2-CloudWatch-Role \ --user-data file://setup.sh \ --tag-specifications ResourceTypeinstance,Tags[{KeyName,Valueprod-api-v1}]注意--iam-instance-profile不是可选项。PPT里常漏掉这点——EC2若没IAM Role就无法调用RDS DescribeDBInstances或向CloudWatch PutMetricData。很多学生在赛题里卡在“Lambda函数连不上RDS”根源其实是EC2没绑Role导致后续CloudWatch自定义指标上报失败。2.1 用户数据脚本setup.sh让EC2启动即接入RDS和CloudWatchPPT里“云原生”三个字背后是这段必须执行的初始化逻辑。它解决PPT没说清的服务间信任链EC2如何安全访问RDS日志怎么自动推到CloudWatch#!/bin/bash yum update -y yum install -y mysql jq aws-cli # 1. 从RDS获取endpoint并写入环境变量避免硬编码 RDS_ENDPOINT$(aws rds describe-db-instances \ --db-instance-identifier prod-rds-mysql \ --query DBInstances[0].Endpoint.Address \ --output text) echo export RDS_HOST$RDS_ENDPOINT /etc/profile.d/rds.sh # 2. 创建CloudWatch日志组并推送第一条日志触发日志流创建 aws logs create-log-group --log-group-name /aws/ec2/prod-api-v1 aws logs put-log-events \ --log-group-name /aws/ec2/prod-api-v1 \ --log-stream-name $(hostname)-init \ --log-events timestamp$(date %s%3N),messageInstance started with RDS: $RDS_ENDPOINT参数说明--query DBInstances[0].Endpoint.AddressPPT里RDS架构图常画“Endpoint”但没告诉你怎么动态获取。这里用AWS CLI原生查询避免把IP写死在代码里--log-stream-name $(hostname)-initCloudWatch要求Log Stream必须存在才能写日志。PPT里只说“支持日志收集”但不说首次写日志前必须create-log-stream——这是90%初学者翻车点yum install -y aws-cliPPT里AWS CLI图标常被忽略。其实所有自动化都依赖它且必须是v2.xv1不支持--query语法。2.2 RDS实例创建为什么PPT里的“高可用”配置在实操中必须手动开Multi-AZPPT里RDS一页常写“Multi-AZ自动故障转移”但学生照着创建后发现主备切换要5分钟——因为默认没开。真实生产环境这个开关决定RTO恢复时间目标。以下是必须显式声明的3个参数aws rds create-db-instance \ --db-instance-identifier prod-rds-mysql \ --db-instance-class db.t3.small \ --engine mysql \ --master-username admin \ --master-user-password SecurePass123! \ --allocated-storage 20 \ --vpc-security-group-ids sg-0a1b2c3d4e5f67890 \ --db-subnet-group-name my-rds-subnet-group \ --multi-az \ --publicly-accessible False \ --backup-retention-period 7 \ --preferred-backup-window 02:00-03:00 \ --enable-cloudwatch-logs-exports [error,general,slowquery]关键参数解析--multi-azPPT里“高可用”图标的物理实现。不开它RDS就是单点开了AWS才在另一AZ部署同步副本--enable-cloudwatch-logs-exportsPPT说“RDS支持日志导出”但没说必须显式指定日志类型。不加这行CloudWatch里永远看不到MySQL error log--db-subnet-group-namePPT里VPC图常画“公有子网/私有子网”但RDS必须部署在DB Subnet Group跨AZ的子网集合里不能直接指定单个Subnet ID——这是VPC网络模型的硬约束。3. ALBEC2Auto Scaling联动PPT里“弹性伸缩”背后的3层配置真相PPT里ALBApplication Load Balancer常和Auto Scaling放同一张图箭头从ALB指向ASGAuto Scaling Group但没人告诉你ALB本身不触发扩容它只提供健康检查信号真正决策扩容的是CloudWatch告警规则。学生在赛题里配完ALB却等不来新EC290%是因为漏了这层。3.1 ALB健康检查配置PPT没写的3个致命参数ALB默认健康检查路径是/超时1秒间隔30秒。但你的EC2应用可能需要5秒启动PPT里“高可用”图标的背后是这些必须调的参数aws elbv2 create-target-group \ --name prod-api-tg \ --protocol HTTP \ --port 80 \ --vpc-id vpc-0123456789abcdef0 \ --health-check-path /health \ --health-check-interval-seconds 15 \ --health-check-timeout-seconds 5 \ --healthy-threshold-count 2 \ --unhealthy-threshold-count 3为什么必须改--health-check-path /healthPPT里健康检查图标常画成“ping”但真实场景必须是应用级探针。EC2上需部署/health端点返回200--health-check-interval-seconds 15默认30秒太长。若EC2启动耗时8秒30秒间隔下ALB会误判为宕机反复注册/注销--unhealthy-threshold-count 3默认3次失败才标记为Unhealthy。若设为1网络抖动就触发误删实例。3.2 Auto Scaling策略用CloudWatch指标驱动扩容而非ALB请求量PPT里“根据负载自动扩容”常被误解为“ALB收到请求就加机器”。真相是ALB只上报指标ASG监听CloudWatch告警。以下是标准联动链路# 步骤1创建CloudWatch告警当CPU 70%持续5分钟触发扩容 aws cloudwatch put-metric-alarm \ --alarm-name prod-api-cpu-high \ --alarm-description Scale out when CPU 70% \ --metric-name CPUUtilization \ --namespace AWS/ECS \ --statistic Average \ --period 300 \ --threshold 70 \ --comparison-operator GreaterThanThreshold \ --dimensions NameAutoScalingGroupName,Valueprod-api-asg \ --evaluation-periods 1 \ --alarm-actions arn:aws:automating:us-east-1:123456789012:scalingPolicy:abc123... \ --unit Percent # 步骤2创建ASG扩容策略接到告警后执行 aws application-autoscaling register-scalable-target \ --service-namespace ecs \ --resource-id service/my-cluster/prod-api-service \ --scalable-dimension ecs:service:DesiredCount \ --min-capacity 1 \ --max-capacity 10 aws application-autoscaling put-scaling-policy \ --policy-name prod-api-scale-out \ --service-namespace ecs \ --resource-id service/my-cluster/prod-api-service \ --scalable-dimension ecs:service:DesiredCount \ --policy-type TargetTrackingScaling \ --target-tracking-scaling-policy-configuration file://scale-out.json提示--namespace AWS/ECS是陷阱若你用EC2部署非ECS此处必须改为AWS/EC2否则告警永远不触发。PPT里服务图标混用但命名空间严格区分。3.3 验证联动是否生效用curl模拟流量 查看ASG活动历史光配完不验证等于没做。以下命令帮你确认整个链路是否打通# 持续发送请求模拟负载 for i in {1..100}; do curl -s -o /dev/null http://prod-api-alb-123456789.us-east-1.elb.amazonaws.com/health; sleep 0.1; done # 查看ASG是否收到扩容指令 aws autoscaling describe-scaling-activities \ --auto-scaling-group-name prod-api-asg \ --max-items 5 \ --query Activities[*].[Description,StartTime,StatusCode]预期输出[ [Moving EC2 instance to InService, 2024-06-15T08:22:11Z, Successful], [Launching a new EC2 instance, 2024-06-15T08:21:45Z, Successful] ]若StatusCode不是Successful说明CloudWatch告警没连上ASG——回去检查--dimensions里的AutoScalingGroupName是否拼写一致。4. IAM权限最小化PPT里“安全最佳实践”在实操中的3个血泪经验PPT里IAM一页常画“策略JSON”和“角色绑定”但学生照着抄完EC2连S3都列不出来。原因PPT没告诉你策略必须精确到资源ARN且EC2 Role和Lambda Role权限模型完全不同。以下是我在誉天Linux云计算运维班反复强调的3条铁律4.1 EC2 Role权限只给S3读不给ListBucket否则报AccessDeniedPPT里“S3只读策略”常写s3:GetObject但漏了关键前提必须指定Bucket名称和Prefix。否则EC2执行aws s3 ls s3://my-bucket/会报错{ Version: 2012-10-17, Statement: [ { Effect: Allow, Action: s3:GetObject, Resource: arn:aws:s3:::my-bucket/* // ✅ 必须带 /*否则GetObject失败 }, { Effect: Allow, Action: s3:ListBucket, Resource: arn:aws:s3:::my-bucket // ✅ ListBucket只能写Bucket名不能带 /* } ] }血泪经验s3:GetObject的Resource必须是arn:aws:s3:::bucket-name/*带星号s3:ListBucket的Resource必须是arn:aws:s3:::bucket-name不带星号若策略里写错aws s3 cp s3://my-bucket/file.txt .会报An error occurred (AccessDenied) when calling the GetObject operation但aws s3 ls s3://my-bucket/反而成功——因为ListBucket权限单独控制目录列表。4.2 Lambda Role权限PPT里“无服务器”概念掩盖了执行角色的特殊性Lambda函数执行时其Role权限必须包含lambda:InvokeFunction自身调用和logs:CreateLogGroup写日志。PPT常漏掉后者导致函数运行后CloudWatch里找不到日志组{ Version: 2012-10-17, Statement: [ { Effect: Allow, Action: [ logs:CreateLogGroup, logs:CreateLogStream, logs:PutLogEvents ], Resource: arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/prod-api-handler:* } ] }注意Resource里的*不能省略。Lambda自动创建Log Stream时Stream名是随机字符串如2024/06/15/[000000]必须用通配符匹配。4.3 跨服务调用权限RDS Proxy为何比直连更安全PPT没说清的连接池原理PPT里RDS Proxy图标常和“连接池”“安全代理”挂钩但没解释Proxy本身需要IAM Role且该Role权限必须包含rds-db:connect而非rds:Connect。这是学生在赛题里Proxy连不上RDS的头号原因# 创建RDS Proxy时绑定的Role必须含此权限 aws iam attach-role-policy \ --role-name rds-proxy-role \ --policy-arn arn:aws:iam::aws:policy/AmazonRDSDatabaseProxyFullAccess # 但关键权限是自定义策略PPT里从不提 aws iam put-role-policy \ --role-name rds-proxy-role \ --policy-name rds-db-connect \ --policy-document { Version: 2012-10-17, Statement: [{ Effect: Allow, Action: rds-db:connect, Resource: arn:aws:rds-db:us-east-1:123456789012:dbproxy:prx-12345678/* }] }为什么必须用rds-db:connectrds:Connect是旧版权限仅用于客户端直连rds-db:connect是Proxy专用权限允许Proxy以数据库用户身份登录RDS若Role没此权限Proxy状态永远是incompatible-network即使安全组、子网都正确。5. 常见问题排查PPT里没写的5个真实翻车现场与解法PPT是理想模型现实是各种边界条件。以下是我在广东省职业院校技能大赛云计算赛项现场帮学生紧急救场的5个高频问题。每一条都对应PPT里某个“看起来很简单”的框图。5.1 现象ALB健康检查失败EC2在Target Group里显示Unhealthy原因EC2安全组没开放ALB的源IP段非0.0.0.0/0。ALB健康检查源IP是动态的必须放行sg-xxxxxxALB所在安全组或10.0.0.0/16VPC CIDR。解决在EC2安全组入站规则中添加类型HTTP源填ALB安全组ID如sg-0a1b2c3d4e5f67890而非IP段。5.2 现象CloudWatch自定义指标没数据put-metric-data返回Success但图表为空原因指标命名含非法字符如空格、下划线。CloudWatch指标名只允许字母、数字、点、连字符。解决将My App Latency改为MyApp-Latency并确保--namespace全大写无空格如PROD/API。5.3 现象RDS备份失败CloudWatch里BackupDuration指标为0原因备份窗口设置在UTC时间而学生按本地时间理解。例如--preferred-backup-window 02:00-03:00是UTC北京时间是10:00-11:00。若此时RDS负载高备份会跳过。解决用aws rds describe-db-instances --db-instance-identifier xxx查PreferredBackupWindow字段确认时区或直接设为22:00-23:00UTC对应北京时间06:00-07:00低峰期。5.4 现象Lambda函数超时日志里只有Task timed out after 30.00 seconds原因函数内存设为128MB但实际需要512MB。PPT里“无服务器”图示常忽略内存与超时的耦合关系——内存越小CPU份额越少相同代码执行越慢。解决在Lambda控制台将内存从128MB调至512MB超时自动从30秒延长至1分钟AWS按内存比例分配CPU。5.5 现象Route53 DNS解析正常但curl返回Connection refused原因ALB监听器规则没配置默认动作Default Action。PPT里ALB图常画“监听HTTP:80”但没说必须设置转发到Target Group。若没设默认返回404或拒绝连接。解决运行aws elbv2 create-listener时必须包含--default-actions Typeforward,TargetGroupArnarn:aws:elasticloadbalancing:...。6. 进阶技巧用CloudFormation模板固化PPT里的架构图实现“一键复现比赛环境”PPT里架构图的价值不是让你背下来而是把它变成可执行的Infrastructure as CodeIaC。我教学生用CloudFormation把《Amazon云计算AWS介绍.pptx》里第7页的“Web应用三层架构”转成YAML模板好处是比赛时5分钟重置环境aws cloudformation delete-stackcreate-stack避免手工配错Security Group顺序CFN自动处理依赖所有资源带Tag赛后自动识别归属队伍--tags KeyTeam,ValueTeamA。6.1 最小CloudFormation模板结构只保留PPT里必考的5个资源AWSTemplateFormatVersion: 2010-09-09 Parameters: VpcCIDR: Type: String Default: 10.0.0.0/16 Resources: MyVPC: Type: AWS::EC2::VPC Properties: CidrBlock: !Ref VpcCIDR EnableDnsHostnames: true Tags: - Key: Name Value: !Sub ${AWS::StackName}-vpc MyPublicSubnet: Type: AWS::EC2::Subnet Properties: VpcId: !Ref MyVPC CidrBlock: 10.0.1.0/24 MapPublicIpOnLaunch: true AvailabilityZone: !Select [0, !GetAZs ] Tags: - Key: Name Value: !Sub ${AWS::StackName}-public-subnet MyALB: Type: AWS::ElasticLoadBalancingV2::LoadBalancer Properties: Scheme: internet-facing Subnets: [!Ref MyPublicSubnet] SecurityGroups: [!Ref ALBSecurityGroup] ALBSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: ALB Security Group VpcId: !Ref MyVPC SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0 MyEC2: Type: AWS::EC2::Instance Properties: ImageId: ami-0c7217cdde317cfec InstanceType: t3.micro SecurityGroupIds: [!Ref EC2SecurityGroup] SubnetId: !Ref MyPublicSubnet UserData: Fn::Base64: !Sub | #!/bin/bash yum update -y echo Hello from CFN! /var/www/html/index.html systemctl start httpd关键设计点MapPublicIpOnLaunch: true确保EC2有公网IP否则ALB无法路由Fn::Base64包裹UserDataPPT里“用户数据”图标常被忽略但这是启动后自动部署应用的唯一入口!Select [0, !GetAZs ]自动选第一个可用区避免硬编码us-east-1a——不同Region AZ名不同。6.2 模板部署与验证3条命令完成环境交付# 1. 部署自动创建VPC/子网/ALB/EC2 aws cloudformation create-stack \ --stack-name prod-api-env \ --template-body file://template.yaml \ --capabilities CAPABILITY_IAM # 2. 等待完成避免下一步查不到ALB DNS aws cloudformation wait stack-create-complete \ --stack-name prod-api-env # 3. 获取ALB DNS并验证PPT里“架构图”变成真实URL ALB_DNS$(aws cloudformation describe-stacks \ --stack-name prod-api-env \ --query Stacks[0].Outputs[?OutputKeyALBDNS].OutputValue \ --output text) curl -s http://$ALB_DNS | grep Hello from CFN!我的习惯每次赛前我会把PPT里所有架构图对应的CFN模板存进Git仓库分支名就叫ppt-page-7。学生遇到题目要求“部署三层架构”直接git checkout ppt-page-7 aws cloudformation deploy...——不用再对着PPT猜参数也不用担心配错Security Group顺序。这种把PPT“翻译”成代码的能力才是云计算运维真正的门槛。希望帮到你。本文还有配套的精品资源点击获取
返回列表