
简介这份PPT课件面向云计算初学者、高校学生及需要系统了解AWS服务体系的IT从业者以《云计算》第三版配套教学材料的形式梳理Amazon云计算的核心服务与典型应用场景帮助读者建立对公有云解决方案的整体认知。资源包内含1个pptx文件大小约2.85MB以图文并茂的幻灯片呈现便于课堂讲解与自学翻阅。内容从基础存储架构Dynamo切入依次讲解弹性计算云EC2、简单存储服务S3、非关系型数据库SimpleDB与DynamoDB、关系数据库RDS、简单队列服务SQS、内容推送服务CloudFront并延伸至Elastic Beanstalk、Route 53、VPC、SNS与SES、弹性MapReduce、Redshift、AppStream、Kinesis等多项服务最后结合AWS应用实例与小结收束。目前已有454人学习浏览适合作为云计算课程配套资料或AWS入门参考帮助读者快速把握各服务的特点、功能定位与适用场景。1. 从一份 PPT 说起AWS 云计算到底在讲什么很多人第一次接触 AWS是从一份《Amazon云计算AWS介绍.pptx》开始的。翻完几十页幻灯片满眼是 EC2、S3、IAM、VPC合上电脑却不知道从哪下手。这个标题背后真正的问题不是“AWS 是什么”而是“我该怎么用 AWS 把一台服务跑起来并且知道钱花在哪、坑埋在哪”。它适合三类人准备转云计算运维工程师的初学者、需要把本地服务搬上云的后端开发、以及被要求做技术选型却对云账单心里没底的小团队负责人。这篇笔记不逐页翻译 PPT而是顺着这份介绍里最该被讲透的主线——计算、存储、网络、权限、计费——把每一步落到能复现的命令和参数上。读完你至少能独立开出一台按量计费的实例、挂上一块对象存储、配好最小权限并且知道哪些默认设置会让你月底收到一张意外的账单。2. AWS 全球基础设施与核心服务选型先搞懂区域、可用区和计费单位2.1 区域、可用区、边缘站点到底怎么选AWS 把基础设施分成区域Region、可用区Availability ZoneAZ和边缘站点。区域是地理上独立的数据中心集群比如东京、新加坡、法兰克福每个区域内部由多个物理隔离的可用区组成AZ 之间用低延迟专线互联。选区域的第一原则不是“离我近”而是“离我的用户近且合规”。如果你的用户主要在华东选东京或首尔通常比选美东延迟低得多如果业务涉及数据驻留要求就得先确认目标区域是否满足。可用区的意义在于容错。把同一套服务部署在同一个区域的两个 AZ一个 AZ 断电时另一个还能扛。但要注意AZ 之间的内网流量虽然快跨 AZ 的数据传输是要计费的很多新手把主从数据库放在不同 AZ月底发现流量费比实例费还高这就是没算清计费单位的血泪经验。边缘站点是 CloudFront 这类 CDN 服务用的和你在控制台开 EC2 的区域不是一回事。做静态资源加速时源站放在哪个区域、边缘缓存怎么配直接决定回源流量成本。2.2 计算、存储、网络、权限四类核心服务对照一份合格的 AWS 介绍 PPT 通常会把这四类服务各列一页但真正落地时你需要知道它们之间的依赖关系。下面这张表是我给团队新人做培训时用的最小对照只列最常用的入口服务。类别代表服务一句话定位计费关键点计算EC2 / Lambda虚拟机与无服务器函数实例按秒计费Lambda 按调用次数和时长存储S3 / EBS对象存储与块存储S3 按存储量请求数EBS 按容量IOPS网络VPC / CloudFront私有网络与内容分发跨 AZ 流量、NAT 网关、出站流量都收费权限IAM身份与访问管理本身免费但配错会导致安全事件选型的顺序建议是先定区域再划 VPC 网段然后在 VPC 里开 EC2 或配 Lambda最后用 IAM 把权限收紧。反过来先开实例再补网络和权限很容易出现实例在默认 VPC 里、安全组全开、根账号密钥满天飞的局面。2.3 用 AWS CLI 完成第一次身份验证与区域配置在动手开资源之前先把命令行工具配好。控制台点选虽然直观但批量操作和复现步骤必须靠 CLI。安装 AWS CLI v2 后用 IAM 用户的访问密钥做初始化配置。# 安装 AWS CLI v2以 Linux x86_64 为例 curl https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o awscliv2.zip unzip awscliv2.zip sudo ./aws/install # 配置凭证区域设为 ap-northeast-1东京 aws configure # 依次输入 Access Key ID、Secret Access Key、默认区域、输出格式 json # 验证身份和区域 aws sts get-caller-identity aws ec2 describe-regions --query Regions[?RegionNameap-northeast-1]aws configure会把凭证写入~/.aws/credentials区域写入~/.aws/config。sts get-caller-identity返回当前身份如果报InvalidClientTokenId说明密钥错了或没启用。describe-regions用来确认目标区域可用。注意不要用根账号的密钥也不要把密钥提交到 Git 仓库这是最常见的翻车点。提示生产环境建议用 IAM 角色Role而不是长期访问密钥EC2 实例绑定角色后无需在机器上存密钥。3. 用 EC2 和 S3 搭出最小可用环境从开实例到传文件3.1 创建 VPC 与子网别直接用默认 VPC默认 VPC 在每个区域自动存在网段通常是 172.31.0.0/16所有实例共享。做实验可以但一旦要接数据库、做网络隔离就必须自建 VPC。下面用 CLI 建一个 10.0.0.0/16 的 VPC并在两个 AZ 各开一个子网。# 创建 VPC VPC_ID$(aws ec2 create-vpc --cidr-block 10.0.0.0/16 \ --query Vpc.VpcId --output text) aws ec2 create-tags --resources $VPC_ID --tags KeyName,Valuemy-vpc # 在东京区域的两个 AZ 创建子网 SUBNET_A$(aws ec2 create-subnet --vpc-id $VPC_ID \ --cidr-block 10.0.1.0/24 --availability-zone ap-northeast-1a \ --query Subnet.SubnetId --output text) SUBNET_C$(aws ec2 create-subnet --vpc-id $VPC_ID \ --cidr-block 10.0.2.0/24 --availability-zone ap-northeast-1c \ --query Subnet.SubnetId --output text) # 创建互联网网关并挂到 VPC IGW_ID$(aws ec2 create-internet-gateway \ --query InternetGateway.InternetGatewayId --output text) aws ec2 attach-internet-gateway --vpc-id $VPC_ID --internet-gateway-id $IGW_ID # 创建路由表把 0.0.0.0/0 指向互联网网关 RT_ID$(aws ec2 create-route-table --vpc-id $VPC_ID \ --query RouteTable.RouteTableId --output text) aws ec2 create-route --route-table-id $RT_ID \ --destination-cidr-block 0.0.0.0/0 --gateway-id $IGW_ID aws ec2 associate-route-table --route-table-id $RT_ID --subnet-id $SUBNET_Acreate-vpc的--cidr-block决定整个私有网段建议用 RFC1918 地址段。两个子网分在不同 AZ 是为了后续做高可用。互联网网关让子网里的实例能出公网但实例还需要公网 IP 或弹性 IP 才能被访问。路由表关联到子网后该子网才真正有默认路由。如果漏了associate-route-table实例有公网 IP 也上不了网这是排查时第一个要看的地方。3.2 启动一台按量计费的 EC2 实例接下来开一台 t3.micro 实例用 Amazon Linux 2023 镜像绑定刚才的子网和安全组。安全组先只放行 SSH。# 创建安全组只允许你的公网 IP 访问 22 端口 SG_ID$(aws ec2 create-security-group --group-name my-ssh-sg \ --description ssh only --vpc-id $VPC_ID \ --query GroupId --output text) MY_IP$(curl -s https://checkip.amazonaws.com)/32 aws ec2 authorize-security-group-ingress --group-id $SG_ID \ --protocol tcp --port 22 --cidr $MY_IP # 查询最新的 Amazon Linux 2023 AMI AMI_ID$(aws ssm get-parameters \ --names /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64 \ --query Parameters[0].Value --output text) # 启动实例 INSTANCE_ID$(aws ec2 run-instances \ --image-id $AMI_ID --instance-type t3.micro \ --subnet-id $SUBNET_A --security-group-ids $SG_ID \ --associate-public-ip-address \ --query Instances[0].InstanceId --output text) # 等待运行并获取公网 IP aws ec2 wait instance-running --instance-ids $INSTANCE_ID aws ec2 describe-instances --instance-ids $INSTANCE_ID \ --query Reservations[0].Instances[0].PublicIpAddress --output text--instance-type t3.micro是突发性能实例适合测试CPU 积分耗尽后会限速。--associate-public-ip-address给实例分配临时公网 IP重启可能变化生产环境应绑弹性 IP。authorize-security-group-ingress里的$MY_IP只放行你自己的地址比 0.0.0.0/0 安全得多。ssm get-parameters拿到的 AMI ID 是动态的不要硬编码某个镜像 ID否则区域换了就找不到。注意t3.micro 在部分区域有免费额度限制超出后按秒计费。测试完记得aws ec2 terminate-instances停止stop实例仍然会收 EBS 存储费。3.3 用 S3 存静态文件并设置生命周期S3 是对象存储适合放图片、备份、日志。先建桶再传文件最后配生命周期规则自动清理。# 创建全局唯一名称的桶区域与实例一致 BUCKETmy-demo-bucket-$(date %s) aws s3api create-bucket --bucket $BUCKET \ --region ap-northeast-1 \ --create-bucket-configuration LocationConstraintap-northeast-1 # 上传一个本地文件 echo hello aws test.txt aws s3 cp test.txt s3://$BUCKET/data/test.txt # 配置生命周期30 天后转低频存储90 天后删除 cat lifecycle.json EOF { Rules: [ { ID: archive-and-delete, Status: Enabled, Filter: {Prefix: data/}, Transitions: [ {Days: 30, StorageClass: STANDARD_IA} ], Expiration: {Days: 90} } ] } EOF aws s3api put-bucket-lifecycle-configuration \ --bucket $BUCKET --lifecycle-configuration file://lifecycle.jsoncreate-bucket在非 us-east-1 区域必须带LocationConstraint否则报错。桶名全局唯一用时间戳后缀避免冲突。put-bucket-lifecycle-configuration里的STANDARD_IA是低频访问存储单价低但有最小存储时长和取回费适合不常读的备份。Expiration到期自动删除避免长期堆积。如果桶里放的是网站静态资源还需要开静态网站托管并配桶策略但注意不要给桶开公共写权限。4. IAM 权限与账单控制把最小权限和预算告警配到位4.1 创建最小权限的 IAM 用户与策略根账号只用来开账号和付钱日常操作全部用 IAM 用户或角色。下面建一个只能读写指定 S3 桶前缀的用户。# 创建用户 aws iam create-user --user-name app-reader # 写一条只允许访问指定桶 data/ 前缀的策略 cat policy.json EOF { Version: 2012-10-17, Statement: [ { Effect: Allow, Action: [s3:GetObject, s3:ListBucket], Resource: [ arn:aws:s3:::my-demo-bucket-*, arn:aws:s3:::my-demo-bucket-*/data/* ] } ] } EOF aws iam create-policy --policy-name app-reader-policy \ --policy-document file://policy.json # 把策略挂到用户 aws iam attach-user-policy --user-name app-reader \ --policy-arn arn:aws:iam::你的账号ID:policy/app-reader-policyAction里s3:ListBucket作用于桶本身s3:GetObject作用于对象所以Resource要写两条。arn:aws:s3:::my-demo-bucket-*用了通配符实际生产建议写死桶名。创建策略后必须attach-user-policy才生效只建不挂是新手常犯的错。如果需要临时凭证用aws sts assume-role而不是给用户发长期密钥。4.2 用预算和告警拦住意外账单AWS 的计费是后付费等账单出来已经晚了。Budget 可以在花费接近阈值时发邮件。# 创建一个每月 10 美元的预算超过 80% 告警 aws budgets create-budget --account-id 你的账号ID \ --budget { BudgetName: monthly-10usd, BudgetLimit: {Amount: 10, Unit: USD}, TimeUnit: MONTHLY, BudgetType: COST } \ --notifications-with-subscribers [{ Notification: { NotificationType: ACTUAL, ComparisonOperator: GREATER_THAN, Threshold: 80, ThresholdType: PERCENTAGE }, Subscribers: [{SubscriptionType: EMAIL, Address: youexample.com}] }]BudgetType选COST是按实际花费选USAGE是按用量。Threshold80 表示达到预算的 80% 就发邮件。这个命令需要账号 ID可以用aws sts get-caller-identity查。预算告警不是硬性拦截只是通知真正要硬停需要配合 Lambda 或 Service Control Policy。另外NAT 网关、弹性 IP 未绑定、快照堆积是三个最隐蔽的扣费项建议每周用aws ce get-cost-and-usage拉一次分服务账单。4.3 用 CloudWatch 看基础指标并设 CPU 告警实例开起来后至少要知道它活着没有。CloudWatch 默认收集 CPU、网络、磁盘指标内存和磁盘使用率需要装 Agent。# 查看最近 10 分钟 CPU 使用率 aws cloudwatch get-metric-statistics \ --namespace AWS/EC2 --metric-name CPUUtilization \ --dimensions NameInstanceId,Value$INSTANCE_ID \ --start-time $(date -u -d 10 minutes ago %Y-%m-%dT%H:%M:%SZ) \ --end-time $(date -u %Y-%m-%dT%H:%M:%SZ) \ --period 300 --statistics Average # 创建 CPU 持续高于 70% 的告警 aws cloudwatch put-metric-alarm --alarm-name high-cpu \ --metric-name CPUUtilization --namespace AWS/EC2 \ --statistic Average --period 300 --threshold 70 \ --comparison-operator GreaterThanThreshold \ --evaluation-periods 2 \ --dimensions NameInstanceId,Value$INSTANCE_ID \ --alarm-actions arn:aws:sns:ap-northeast-1:账号ID:my-topic--period 300是 5 分钟一个数据点--evaluation-periods 2表示连续两个周期超阈值才触发避免毛刺误报。--alarm-actions需要提前建好 SNS 主题并订阅邮箱。内存指标默认没有要装 CloudWatch Agent 并在配置里开启mem_used_percent。如果告警一直处于INSUFFICIENT_DATA先确认实例是否在运行、指标是否已上报。5. 避坑与排查AWS 新手最容易翻车的 5 个场景5.1 现象实例有公网 IP 却连不上 SSH原因通常有三层安全组没放行你的当前 IP、子网路由表没关联互联网网关、或者实例没有公网 IP。解决顺序是先aws ec2 describe-instances看公网 IP 是否存在再aws ec2 describe-route-tables确认子网关联的路由有0.0.0.0/0指向 igw最后检查安全组入站规则里的 CIDR 是不是你现在的公网 IP。家庭宽带 IP 会变昨天能连今天连不上很常见重新查checkip.amazonaws.com再改规则。5.2 现象S3 桶策略改了却依然 403原因多半是桶策略和 IAM 策略同时存在时取交集或者对象所有权设置阻止了访问。先aws s3api get-bucket-policy看桶策略再确认 IAM 用户有没有s3:GetObject。如果桶开了“阻止公共访问”而你又想公开读需要在桶级别关闭对应选项。另一个隐蔽点是 KMS 加密的桶调用方还需要kms:Decrypt权限否则读对象报AccessDenied。5.3 现象月底账单比预期高出一截先按服务维度拉账单aws ce get-cost-and-usage --granularity MONTHLY --metrics BlendedCost --group-by TypeDIMENSION,KeySERVICE。常见元凶是 NAT 网关按小时和流量双计费、未绑定的弹性 IP 按小时收费、EBS 快照越积越多、跨 AZ 流量费。解决方法是给非生产资源打标签用 Budget 告警定期清理未挂载的卷和旧快照。免费额度只覆盖部分实例类型和存储量超出部分照常收费。5.4 现象Lambda 函数冷启动慢且超时原因可能是包体积过大、VPC 配置导致 ENI 创建慢、或者内存设太小。解决方法是精简依赖、把不常变的库放层Layer、给函数至少 256MB 内存CPU 随内存比例分配、避免把 Lambda 放进需要 NAT 的私有子网除非必要。如果必须访问 VPC 内资源确认子网有足够空闲 IPENI 创建失败会直接导致调用超时。5.5 现象IAM 策略明明允许却报权限不足先看错误信息里的Action和Resource是否和策略完全匹配注意大小写和通配符位置。如果用了条件键Condition比如aws:SourceIp或aws:RequestedRegion实际请求不满足条件也会拒绝。还有一种情况是服务控制策略SCP在组织层面做了限制IAM 策略再宽也没用。排查时用 IAM Policy Simulator 模拟请求比反复改策略快得多。6. 把成本算清楚用 Cost Explorer 和标签做一次真实复盘6.1 给资源打标签并按标签看账单标签是成本归集的基础。开实例和桶的时候就该打上Project、Env、Owner三个标签。# 给实例打标签 aws ec2 create-tags --resources $INSTANCE_ID \ --tags KeyProject,Valuedemo KeyEnv,Valuetest KeyOwner,Valueme # 激活成本分配标签在账单控制台或 CLI aws ce update-cost-allocation-tags-status \ --cost-allocation-tags-status [{TagKey:Project,Status:Active}] # 按 Project 标签拉本月成本 aws ce get-cost-and-usage \ --time-period Start$(date -u %Y-%m-01),End$(date -u %Y-%m-%d) \ --granularity MONTHLY --metrics UnblendedCost \ --group-by TypeTAG,KeyProjectupdate-cost-allocation-tags-status激活后标签才会出现在 Cost Explorer 里激活前产生的费用不会追溯。UnblendedCost是未混合成本反映实际单价。按标签分组能直接看出哪个项目在烧钱。如果返回空先确认标签键拼写和激活状态。6.2 用 Cost Explorer 找出增长最快的服务Cost Explorer 控制台可以按服务、区域、标签多维下钻CLI 也能拉。下面这条命令按服务看最近 6 个月趋势适合每月复盘。aws ce get-cost-and-usage \ --time-period Start$(date -u -d 6 months ago %Y-%m-01),End$(date -u %Y-%m-%d) \ --granularity MONTHLY --metrics UnblendedCost \ --group-by TypeDIMENSION,KeySERVICE输出里如果 EC2 或 S3 突然跳升结合标签定位到具体资源。常见增长源是测试实例忘了关、日志桶没设生命周期、快照自动备份策略太激进。我自己的习惯是每月 1 号花十分钟跑一次这条命令比等账单邮件再手忙脚乱强得多。6.3 一个具体技巧用实例调度和 S3 智能分层压成本非生产实例不需要 7×24 运行。用 Instance Scheduler 或简单的 Lambda 定时启停能省下一大半计算费。S3 这边访问模式不固定的数据用 INTELLIGENT_TIERING让 AWS 自动在访问层之间移动不用自己猜什么时候转低频。# 把桶的默认存储类设为智能分层 aws s3api put-bucket-lifecycle-configuration --bucket $BUCKET \ --lifecycle-configuration { Rules: [{ ID: intelligent-tiering, Status: Enabled, Filter: {Prefix: }, Transitions: [{ Days: 0, StorageClass: INTELLIGENT_TIERING }] }] }Days: 0表示上传后立即进入智能分层AWS 根据访问频率自动调整。智能分层有监控和自动化费用数据量很小的时候不一定划算一般超过 128KB 的对象才建议用。实例定时启停可以用 EventBridge 加 Lambda工作日 9 点到 19 点运行其余时间停止停止期间只收 EBS 费用。这套东西我踩过最深的坑是以为“停止”实例就不花钱结果 EBS 卷和弹性 IP 一直在计费。后来养成习惯实验做完直接terminate需要保留的卷单独打标签并记进台账。云上的成本控制没有后悔药只有提前配好的预算告警和每月复盘。希望帮到你。本文还有配套的精品资源点击获取