
简介这份PPT课件面向云计算初学者、高校学生及需要系统了解AWS服务体系的IT从业者以《云计算》第三版配套教学章节为蓝本梳理Amazon云计算的核心服务与典型应用场景帮助读者建立从存储、计算到数据库、消息队列的完整知识框架。资源为单个pptx文件压缩包约2.85MB内容按章节组织涵盖基础存储架构Dynamo、弹性计算云EC2、简单存储服务S3、非关系型数据库SimpleDB与DynamoDB、关系数据库RDS、简单队列SQS、内容推送CloudFront以及Elastic Beanstalk、Route 53、VPC、SNS、SES、弹性MapReduce、Redshift、AppStream、Kinesis等扩展服务并配有AWS应用实例与小结。目前已有454人学习下载适合课堂讲授、自学梳理或作为方案选型时的速查参考可快速掌握各服务的特点、功能与适用边界。1. 从一份 40 页课件说起AWS 到底该怎么学才不飘很多人第一次接触 AWS是被 EC2、S3、DynamoDB 这些名词砸晕的。打开官方文档服务列表上百个每个都号称高可用、高扩展结果学了两周还是不知道一个请求从域名解析到数据库落盘到底经过了哪些组件。这份《云计算》第三版配套的 40 页 PPT把 AWS 拆成基础存储架构 Dynamo、弹性计算云 EC2、简单存储服务 S3、非关系型数据库 SimpleDB 和 DynamoDB、关系数据库 RDS、简单队列 SQS、内容推送 CloudFront再加上 Elastic Beanstalk、Route 53、VPC、SNS、SES、弹性 MapReduce、DevPay、Redshift、Kinesis 等一长串服务。它最大的价值不是教你点控制台按钮而是把每个服务“为什么存在、解决什么问题、和谁配合”讲清楚。适合正在准备云计算运维工程师面试、需要快速建立 AWS 全局视图的人也适合已经会开 EC2 但说不清 VPC 和 Route 53 怎么串起来的从业者。下面我按这份课件的脉络把能落地的部分拆开讲。2. 基础存储架构 Dynamo 与 S3先搞懂数据往哪放2.1 Dynamo 的分布式键值设计为什么值得先看Dynamo 是 AWS 整个存储体系的底座之一它解决的核心问题是在成千上万台机器上如何让键值数据既能水平扩展又能在节点故障时自动接管。课件里提到它“自动检测和处理故障”落到实现上靠的是三个机制一致性哈希做数据分区、向量时钟做版本冲突检测、Gossip 协议做成员状态同步。你不需要背这些论文细节但要理解一个结论——Dynamo 最终一致性模型意味着写入成功后读到的可能还是旧值。常见做法是应用层做幂等写入或者读的时候带重试。如果你在面试里被问到“Dynamo 和 DynamoDB 什么关系”可以这样答Dynamo 是 2007 年那篇论文里的分布式存储架构DynamoDB 是后来基于这套思想做的全托管 NoSQL 服务对外屏蔽了分区和副本细节。课件把 Dynamo 放在第一章用意就是先让你理解 AWS 存储的底层哲学再看上层服务就不会觉得 S3 和 DynamoDB 是凭空冒出来的。2.2 S3 对象存储的桶、键与访问控制S3 是对象存储不是文件系统。它用“桶 键”定位对象键可以带斜杠模拟目录但本质是扁平命名空间。课件强调它“高可用、高性能”实际使用中你要关注的是存储类别和访问策略。下面这段 Python 用 boto3 演示创建桶、上传对象、生成预签名 URL这是最常见的 S3 操作组合。import boto3 from botocore.exceptions import ClientError # 创建 S3 客户端region 按实际区域填写 s3 boto3.client(s3, region_nameus-east-1) bucket_name demo-bucket-2024 key_name data/report.csv # 创建桶注意桶名全局唯一 try: s3.create_bucket(Bucketbucket_name) except ClientError as e: print(创建失败或已存在:, e.response[Error][Code]) # 上传本地文件 s3.upload_file(local_report.csv, bucket_name, key_name) # 生成 1 小时有效的预签名下载链接 url s3.generate_presigned_url( get_object, Params{Bucket: bucket_name, Key: key_name}, ExpiresIn3600 ) print(url)逻辑说明create_bucket在 us-east-1 以外区域需要加CreateBucketConfiguration指定 LocationConstraint这是新手常翻车的地方。upload_file会自动处理分片上传大文件不用自己切。generate_presigned_url生成的链接把临时凭证编码进 URL适合给外部用户限时访问不要用它做长期公开分享。参数上ExpiresIn单位是秒最大 6048007 天。桶策略和 IAM 策略的区别要分清桶策略挂在资源上IAM 策略挂在用户或角色上两者取并集但显式 Deny 优先。课件里 S3 和 CloudFront 经常一起出现因为 CloudFront 回源就是到 S3 桶后面第 4 章会串起来。2.3 存储选型对照别拿 S3 当数据库用服务数据模型典型场景不适合S3对象键值静态资源、备份、日志归档频繁小文件随机读写DynamoDB键值/文档高并发会话、购物车复杂多表关联查询RDS关系表事务型业务、报表超大规模写入SimpleDB键值已边缘化老课件里的简单索引新项目不建议选这张表建议存下来。课件把 SimpleDB 和 DynamoDB 并列讲但实际工作中 SimpleDB 已经很少用了新项目直接上 DynamoDB。RDS 支持 MySQL、Oracle、SQL Server选型时先看团队熟悉哪个别为了“云原生”硬上 Aurora。3. 计算与消息层EC2、SQS、CloudFront 怎么串成一条链路3.1 EC2 实例类型与自动缩放组的配置要点EC2 是弹性计算的核心课件说它“可扩展、支持自动缩放、负载均衡和监控”。落到操作上你要先选实例族通用型 m 系列、计算优化 c 系列、内存优化 r 系列。选错族的血泪经验是跑内存数据库选了 m5.large结果频繁 OOM换成 r5.large 立刻稳。下面用 AWS CLI 演示创建一个启动模板并配置自动缩放组。# 创建启动模板指定 AMI、实例类型和安全组 aws ec2 create-launch-template \ --launch-template-name web-template \ --version-description v1 \ --launch-template-data { ImageId: ami-0abcdef1234567890, InstanceType: t3.micro, SecurityGroupIds: [sg-0123456789abcdef0], UserData: IyEvYmluL2Jhc2gKYXB0IHVwZGF0ZSAteQ } # 创建自动缩放组最小 2 最大 6绑定两个子网 aws autoscaling create-auto-scaling-group \ --auto-scaling-group-name web-asg \ --launch-template LaunchTemplateNameweb-template,Version$Latest \ --min-size 2 --max-size 6 --desired-capacity 2 \ --vpc-zone-identifier subnet-aaa,subnet-bbb \ --target-group-arns arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/web-tg/abc123逻辑说明UserData必须是 base64 编码示例里解码后是#!/bin/bash apt update -y。--vpc-zone-identifier传子网 ID 列表自动缩放组会跨可用区分布实例。--target-group-arns把实例注册到负载均衡目标组健康检查不通过会被替换。参数上min-size设 2 是为了跨两个可用区保底max-size根据预算和峰值 QPS 估算。扩容策略默认是目标追踪比如保持 CPU 50%比手动步进省心。监控看 CloudWatch 的GroupDesiredCapacity和GroupInServiceInstances两者长期不一致说明实例启动失败去查启动模板的 AMI 是否有效。3.2 SQS 解耦队列类型、可见性超时与死信队列SQS 解决的是生产者和消费者速度不匹配的问题。课件说它“高可用、高性能”实际选型先分标准队列和 FIFO 队列标准队列吞吐几乎无限但可能重复和乱序FIFO 队列保证顺序和去重但吞吐受限。电商下单扣库存用 FIFO日志收集用标准队列。可见性超时是 SQS 最容易踩的坑。消费者取走消息后消息不会立刻删除而是在可见性超时内对其他消费者不可见。如果处理时间超过超时时间消息会被重新投递导致重复处理。常见做法是设一个略大于 P99 处理时间的值处理完主动删消息。import boto3 sqs boto3.client(sqs, region_nameus-east-1) queue_url https://sqs.us-east-1.amazonaws.com/123456789012/order-queue # 接收消息最多 10 条可见性超时 30 秒 resp sqs.receive_message( QueueUrlqueue_url, MaxNumberOfMessages10, VisibilityTimeout30, WaitTimeSeconds20 # 长轮询减少空响应 ) for msg in resp.get(Messages, []): try: process(msg[Body]) # 你的业务处理 sqs.delete_message(QueueUrlqueue_url, ReceiptHandlemsg[ReceiptHandle]) except Exception: # 不删消息等超时后重投超过重试次数进死信队列 pass逻辑说明WaitTimeSeconds20是长轮询比短轮询省请求费。ReceiptHandle每次接收都会变删除时必须用最新那个。死信队列在队列属性里配RedrivePolicy指定最大接收次数超过就转进去方便排查而不是无限重试。3.3 CloudFront 回源 S3 的缓存行为配置CloudFront 是内容分发网络课件说它“加速内容分发”。它和 S3 的经典组合是S3 存静态资源CloudFront 边缘节点缓存用户就近访问。配置时核心是缓存行为路径模式、源站、TTL、是否转发查询字符串。常见做法是给/static/*设长 TTL比如 7 天给/api/*设 TTL 0 不缓存。如果前端发版后用户还看到旧页面八成是 TTL 没设对或者没做失效刷新。CloudFront 的失效Invalidation按路径提交/*全量失效但要注意配额。提示CloudFront 回源到 S3 时如果桶是私有的需要配 Origin Access IdentityOAI让 CloudFront 有权限读桶同时桶策略拒绝其他来源。这一步漏了会报 403。4. 网络与运维服务Route 53、VPC、Elastic Beanstalk 的配合4.1 Route 53 的托管区与路由策略课件里写的是 Router 53实际服务名是 Route 53。它解决的核心问题是域名解析和流量路由。创建托管区Hosted Zone后AWS 分配一组名称服务器你去域名注册商那里把 NS 记录改过去解析就生效了。课件提到“把 DNS 请求路由到最近的服务器”这对应延迟路由策略。路由策略有几种简单路由一条记录一个值加权路由按比例分流适合灰度发布故障转移路由配健康检查主挂切备地理位置路由按用户区域返回不同 IP。下面用 CLI 创建一条加权记录。# 创建托管区 aws route53 create-hosted-zone --name example.com --caller-reference 2024-01-01 # 获取托管区 ID 后创建加权记录 aws route53 change-resource-record-sets \ --hosted-zone-id Z1234567890ABC \ --change-batch { Changes: [{ Action: CREATE, ResourceRecordSet: { Name: api.example.com, Type: A, SetIdentifier: primary, Weight: 90, TTL: 60, ResourceRecords: [{Value: 203.0.113.10}] } }] }逻辑说明SetIdentifier在同名同类型记录里必须唯一Weight是相对权重。TTL 设 60 秒是为了灰度时快速切换生产稳定后可以调大。健康检查要单独创建然后在记录里关联HealthCheckId。参数上托管区分公有和私有私有托管区只在 VPC 内解析。如果你在 VPC 里想用自定义域名访问内网服务就建私有托管区不用改公网 DNS。4.2 VPC 的子网、路由表与安全组三层隔离VPC 是 AWS 网络的基础课件说它“安全、可靠、无缝连接企业现有基础设施”。实际配置分三层子网划分 IP 段路由表决定流量去哪安全组和网络 ACL 控制进出。子网分公有和私有公有子网的路由表有指向 Internet Gateway 的默认路由私有子网走 NAT Gateway 出网。安全组是有状态的出站规则自动允许返回流量网络 ACL 是无状态的进出都要写规则。常见翻车是安全组开了 443 入站但网络 ACL 没放行结果连不上。排查顺序是先看安全组再看网络 ACL最后看路由表。# 创建 VPC 和子网 aws ec2 create-vpc --cidr-block 10.0.0.0/16 aws ec2 create-subnet --vpc-id vpc-abc123 --cidr-block 10.0.1.0/24 --availability-zone us-east-1a # 创建并附加 Internet Gateway aws ec2 create-internet-gateway aws ec2 attach-internet-gateway --vpc-id vpc-abc123 --internet-gateway-id igw-abc123 # 创建路由表并添加默认路由 aws ec2 create-route-table --vpc-id vpc-abc123 aws ec2 create-route --route-table-id rtb-abc123 --destination-cidr-block 0.0.0.0/0 --gateway-id igw-abc123逻辑说明cidr-block要规划好别和公司内网冲突。创建子网后要开“自动分配公有 IP”才能让实例直接有公网地址。路由表要显式关联子网否则不生效。4.3 Elastic Beanstalk 的部署流程与 CloudFormation 模板课件说 Elastic Beanstalk“简化部署和管理”并且“构筑于 EC2、负载均衡、云监控、自动缩放之上”。它本质是把这些资源打包成一个应用环境你只管传代码。支持 Java、Python、Node.js 等平台。部署时它自动创建 CloudFormation 栈所以你能在 CloudFormation 控制台看到底层资源。# 初始化 EB 应用 eb init -p python-3.9 my-app --region us-east-1 # 创建环境并部署 eb create my-app-env --instance-type t3.small --min-instances 2 --max-instances 4 # 后续更新代码 eb deploy逻辑说明eb init生成.elasticbeanstalk/config.yml记录应用名和区域。eb create会创建负载均衡、自动缩放组、安全组等一整套。eb deploy打包当前目录上传触发滚动更新。参数上--min-instances和--max-instances控制自动缩放范围。环境变量在eb setenv KEYVALUE设置不要硬编码在代码里。如果部署卡住去 CloudFormation 事件里看哪个资源创建失败通常是权限或配额问题。5. 避坑与排查那些课件不会写但一定会遇到的事5.1 现象S3 上传报 403但 IAM 策略看起来没问题原因桶策略里有一条显式 Deny或者请求走了 VPC 终端节点但终端节点策略没放行。IAM 允许不等于桶策略允许两者是交集关系显式 Deny 一票否决。解决先用aws s3api get-bucket-policy看桶策略再用 IAM Policy Simulator 模拟请求。如果走了 VPC 终端节点检查终端节点策略是否包含该桶的 ARN。5.2 现象EC2 能 SSH 但访问不了外网原因实例在私有子网路由表没有 NAT Gateway 的默认路由或者 NAT Gateway 所在公有子网的路由表没指向 Internet Gateway。解决确认私有子网路由表有0.0.0.0/0指向 NAT GatewayNAT Gateway 在公有子网且公有子网路由表有0.0.0.0/0指向 Internet Gateway。安全组出站默认全放行一般不是它的问题。5.3 现象SQS 消息被重复消费原因可见性超时小于实际处理时间消息在处理完成前重新可见或者消费者处理成功但删除消息失败。解决把可见性超时调到 P99 处理时间的 1.5 倍处理逻辑做幂等删除消息失败要重试。配死信队列兜底避免无限循环。5.4 现象CloudFront 更新 S3 文件后用户仍看到旧内容原因边缘节点缓存未过期TTL 设得太长或者没有提交失效请求。解决发版时提交 Invalidation路径写/*或具体文件。日常把静态资源文件名带哈希TTL 设长也没关系因为文件名变了就是新对象。5.5 现象Route 53 改了记录但解析没生效原因本地 DNS 缓存、TTL 未到期或者域名注册商的 NS 记录没改到 Route 53 分配的服务器。解决用dig 8.8.8.8 example.com指定公共 DNS 查询排除本地缓存。确认注册商处 NS 记录和托管区的 NS 一致。TTL 设 60 秒可以加快传播但已经缓存的旧记录要等过期。6. 进阶技巧用 CloudFormation 把整套环境写成代码课件里提到 CloudFormation 是“服务模板”但没展开。实际工作中把 VPC、EC2、S3、SQS 这些资源写成模板一键创建和销毁比控制台点几十次靠谱得多。下面是一个最小模板创建 S3 桶和 SQS 队列并让桶事件通知发到队列。AWSTemplateFormatVersion: 2010-09-09 Resources: DataBucket: Type: AWS::S3::Bucket Properties: BucketName: !Sub demo-bucket-${AWS::AccountId} NotificationConfiguration: QueueConfigurations: - Event: s3:ObjectCreated:* Queue: !GetAtt OrderQueue.Arn OrderQueue: Type: AWS::SQS::Queue Properties: QueueName: order-queue VisibilityTimeout: 60 QueuePolicy: Type: AWS::SQS::QueuePolicy Properties: Queues: [!Ref OrderQueue] PolicyDocument: Statement: - Effect: Allow Principal: {Service: s3.amazonaws.com} Action: sqs:SendMessage Resource: !GetAtt OrderQueue.Arn Condition: ArnLike: aws:SourceArn: !Sub arn:aws:s3:::demo-bucket-${AWS::AccountId}逻辑说明!Sub做字符串替换!GetAtt取资源属性。S3 通知到 SQS 必须配队列策略允许 S3 发消息否则事件静默丢失。Condition限制只有这个桶能发避免其他桶误发。参数上VisibilityTimeout和消费者处理时间匹配。模板部署用aws cloudformation deploy --template-file template.yaml --stack-name demo-stack更新时它会计算变更集删除栈会按依赖顺序清理资源。验证方法部署后往桶里传个文件去 SQS 看有没有消息。没有的话先查队列策略再查桶的通知配置。我一般会在模板里加一个 CloudWatch 告警监控队列的ApproximateNumberOfMessagesVisible积压超过阈值就通知。从那以后我每次上云资源都强制走一遍 CloudFormation控制台只用来查状态不用来改配置。手点出来的环境没法复现出了问题也说不清改过什么。希望帮到你。本文还有配套的精品资源点击获取