AWS EC2实例创建全攻略:从新手避坑到自动化部署
发布时间:2026/10/3 13:15:15 锦皓数字建站

创建AWS EC2实例这件事远没有“点几下鼠标”那么简单先说个我自己的经历。有次帮朋友搭一台EC2他以为创建云服务器就是把页面打开、选个系统、点Launch就完事结果卡在“选择密钥对”那一步整整十分钟后面又因为安全组没放行SSH端口拿到公网IP也连不上折腾了快两个小时才看到终端登录界面。这不是他笨而是AWS这条创建链路里藏着太多“不点进去根本不知道存在”的隐藏关卡。这篇东西就是想把“创建AWS云服务器EC2实例”这条链路彻底讲透。适合三种人看第一次接触AWS、准备跑通第一台云服务器的新手玩过但只会在控制台点点点、对网络和安全组一知半解的半熟手以及想从手动创建升级到用CLI或启动模板实现批量部署的进阶用户。目标只有一个——让你看完之后不只是会创建而是知道每一步为什么要这么选。1. 创建EC2前必须搞清楚的三个隐形门槛账号、区域、计费模式很多人打开AWS官网第一反应是注册账号但注册这件事本身就有细节。如果你用的是个人邮箱注册过程中需要绑定一张支持外币的信用卡用于身份验证验证时会扣一笔小额费用通常1-2美元验证后返还。有些朋友卡在电话验证环节——AWS会打国际电话或发短信验证国内手机号正常情况下能收到但如果收不到检查一下手机是否开启了国际来电拦截。另外强烈建议开启多因素认证MFA哪怕只是手机上装个Google Authenticator也行AWS控制台的权限级别非常高账号一旦被盗后果不只是钱包问题。1.1 区域选择比你想的更关键登录控制台后右上角那个区域Region选择器很多人直接忽略。你要知道AWS的每个区域是物理隔离的你在东京区域创建的实例和美国弗吉尼亚区域的实例是完全不相干的两套资源。选区域的逻辑有三个延迟优先你的用户和业务主要在哪里实例就放哪里。国内访问新加坡、东京区域的延迟普遍低于美东区域。价格差异同样规格的实例不同区域价格可能差20%-30%。例如t3.micro在美东区域和在新加坡区域的价格就不一样。服务可用性有些新实例类型或新功能只在部分区域上线比如某些最新的GPU实例可能只在us-east-1或us-west-2提供。区域选错不是不能改但迁移成本很高——镜像要重新复制、IP要重新分配、安全组要重建甚至数据都要重新传输。所以第一次创建前花两分钟想清楚业务目标用户在哪比事后折腾迁移划算得多。1.2 免费套餐的边界在哪里AWS有“免费套餐”的概念但很多人理解偏差很大。它分两部分一部分是账号注册后12个月内的“有限免费额度”另一部分是部分服务“永久免费”。以EC2为例符合条件的用户可以在750小时/月的t2.micro或t3.micro实例上享受12个月免费——注意是750小时/月按实例运行时长累计。如果你同时开了两台实例那就超过750小时了超出的部分正常计费。所以“免费”不等于“无限免费”搞清楚额度边界月底看账单时才不会吓一跳。我自己被坑过一次。早期为了测试同时跑了两台t2.micro跑了半个月才意识到免费时长是按小时累计的结果那个月账单多了十几美元。后来我学乖了只在需要的时候启动实例测试完立刻Stop甚至直接Terminate。2. EC2实例到底是个什么东西把“虚拟电脑”这个概念拆到能落地用大白话说EC2实例就是一台放在亚马逊机房里的虚拟电脑。但和你在VMware里创建虚拟机不一样EC2的这台“虚拟电脑”有一堆配套概念每一个都对应着你实体电脑上的某个部件理解了这套映射关系后面所有操作都不难。2.1 EC2实例的五大核心组成创建一台EC2实例本质上是在定义下面五件事组成对应实体电脑的概念说明AMIAmazon Machine Image操作系统安装盘包含操作系统、预装软件、配置文件的模板实例类型CPU/内存规格决定这台机器的计算能力EBS存储卷硬盘持久化存储关机后数据不丢失安全组Security Group防火墙规则决定谁能从哪些端口访问这台机器密钥对Key Pair登录凭证SSH连接时的身份验证凭据新手最容易忽略的是“实例类型”和“存储卷”这两个概念的区别。实例类型决定了CPU和内存的搭配比如t3.micro是2核1GBm5.large是2核8GB——选得越大越贵。而存储卷是独立的硬盘空间你可以在创建时选择8GB、30GB甚至更大的容量。两者相互独立就像你可以买一台低配电脑小内存但给它配一块大硬盘反过来也一样。2.2 按需、预留、竞价三种计费模式怎么选创建实例时AWS会问你“购买选项”常见的三种模式按需On-Demand按秒计费想用就用、想停就停灵活但单价最高。预留实例Reserved Instance承诺用1年或3年换取折扣适合长期稳定运行的生产环境最多可省60%以上。竞价实例Spot Instance用竞价方式获取闲置计算资源价格通常是按需的10%-20%但实例可能随时被回收适合容错性强的批处理、渲染任务。我第一次用竞价实例时对“随时被回收”没当回事结果跑一个数据任务跑到一半实例被AWS回收了任务直接中断。后来做容错设计把任务拆成小批次、支持断点续跑才敢在正式流程里用Spot。所以如果你跑的是有状态的服务比如数据库、Web服务器老老实实用按需或预留如果是无状态的计算任务Spot是省钱利器。3. 控制台创建实例的完整路径从选择AMI到安全组放行下面这一段我会按控制台的实际操作顺序来走一遍每一步都讲清楚“为什么这么选”而不是简单告诉你点哪里。3.1 第一关选择亚马逊机器镜像AMI进入EC2控制台的“实例”页面点击“启动实例”按钮后第一步是选择AMI。你会看到一堆选项Amazon Linux、Ubuntu、Red Hat、Windows Server、SUSE等。这里给新手一个建议如果只是学习用选Amazon Linux 2或Amazon Linux 2023原因有三个。与AWS各项服务集成度最高预装了很多AWS CLI工具。轻量启动速度快默认配置就适合做服务器。社区文档丰富遇到问题容易搜到答案。如果你需要跑特定软件比如用Ubuntu 22.04 LTS也没问题。我自己的习惯是生产环境用Amazon Linux 2023因为它的安全更新策略和AWS官方支持更紧密测试和学习环境用Ubuntu因为很多开源软件的安装文档默认基于Ubuntu写。3.2 第二关选实例类型与密钥对实例类型那一栏新手很容易被几十种型号搞晕。别急你只需要记住几个系列的就够了t系列如t3.micro、t3.small、t3.medium突发性能实例适合开发测试、小型网站、低流量应用。免费套餐就是这个系列。m系列如m5.large、m5.xlarge通用型CPU和内存比例均衡适合大多数生产环境应用。c系列计算优化型适合CPU密集任务比如视频编码、批处理。r系列内存优化型适合数据库、内存缓存这类吃内存的场景。g/ p系列GPU实例适合机器学习训练、图形渲染。密钥对这一步是新手重灾区。AWS默认不允许你用账号密码登录EC2Windows实例除外而是用密钥对做SSH验证。创建密钥对时系统会下载一个.pem文件这个文件只有一次下载机会一定要收好。我见过太多人把密钥对放在Downloads目录里结果重装系统后密钥丢了实例也没法登录了——只能拍快照、重建实例非常折腾。注意密钥对是一次性的。若丢失只能通过创建新密钥对、修改实例的authorized_keys文件来恢复登录操作繁琐且容易把权限搞坏唯一的王道就是好好保管.pem文件。3.3 第三关网络和安全组配置这是最容易出错的地方AWS默认会给你创建好一个默认VPC和默认子网。新手直接选默认VPC通常没问题但你要知道几个概念因为后面排查问题全靠它们VPC你的虚拟私有网络相当于局域网。子网SubnetVPC下的网段划分分为公有子网和私有子网。公有子网里的实例分配公网IP可以直接被外网访问私有子网里的实例没有公网IP只能内网访问。安全组Security Group相当于云防火墙用白名单机制控制进出流量。创建实例时在“网络设置”区块如果你选择“允许SSH流量”AWS会自动帮你创建一条放行22端口的安全组规则。但很多人不知道这个方法有隐患——它默认对来源是“0.0.0.0/0”意思是所有人都能尝试SSH连接你的服务器。虽然登录还需要密钥对但端口裸奔在公网上每天都会被大量暴力扫描脚本问候。我的做法是在来源那里选择“我的IP”AWS会自动填入你当前的公网IP这样只有你所在的网络能SSH连接。如果你用的是家用宽带IP地址可能是动态的那就每个一段时间需要更新规则。如果你在公司或学习环境IP固定的话这个配置就非常安全。3.4 第四关配置存储和高级细节默认情况下AWS会给你配置一个8GB的EBS存储卷。这个大小对于Linux系统来说是够用的但如果你要装数据库、跑Docker之类的建议至少给到20GB-30GB。存储容量的价格很低但注意存储卷也按量计费且和实例费用分开计算。下面还有几个容易被忽略但会影响账单的选项删除实例时删除存储卷默认勾选是删除。如果你不勾选实例终止后EBS卷会残留继续产生存储费用很多人账单异常就是这里出的问题。启用停止保护开启后实例不会因为误操作被直接停止或终止尤其是生产环境强烈建议开启。购买选项默认是按需如果你要省成本可以考虑竞价实例。高级细节里还有一个“用户数据User Data”的输入框。你可以把一些启动时要执行的初始化脚本写进去比如安装Nginx、更新系统包、设置主机名等。这个功能非常实用后面讲自动化部署时再展开。4. 实例启动之后才是真正的开始SSH连不上、弹性IP、密钥丢失这些坑点击“启动实例”后AWS会创建这台实例状态会从“待处理”变“运行中”。到这里你以为结束了不真正考验才开始。4.1 拿到公网IP后的SSH连接实例状态变成“运行中”后控制台会分配一个公网IP如果你是在默认VPC的默认子网里创建默认会自动分配公网IP。但要注意这个公网IP是临时的实例每次重启不是停止后再启动而是直接Reboot会保留但如果你Stop再Start它就会变。后面我会讲弹性IP。SSH连接命令很简单chmod 400 my-key.pem ssh -i my-key.pem ec2-user52.XX.XX.XX注意用户名Amazon Linux是ec2-userUbuntu是ubuntuDebian是admin或rootCentOS是centos。用户名错了也会导致连接失败。如果你遇到“Connection timed out”大概率是安全组没放行22端口或者放行了但来源限定了IP而你当前的出口IP变了。如果你遇到“Permission denied (publickey)”大概率是密钥对不对或者.pem文件权限太开放必须执行chmod 400。4.2 弹性IP让公网IP固定下来刚才提到的Stop后再Start公网IP会变如果你需要一个固定IP来跑服务或做白名单可以用“弹性IP”功能。操作路径是弹性IP - 分配弹性IP地址然后绑定到你的实例上。这里有个关键坑弹性IP有两个收费规则。绑定在运行中的实例上免费。绑定了但实例是停止状态收费。分配了但没绑定任何实例收费。我自己曾经分配了一个弹性IP绑定了一台已经停止的实例半个月没注意账单上多出几美元。不太多但完全没必要花这个冤枉钱。所以弹性IP的原则是要么绑定在运行的实例上要么干脆释放掉。4.3 主机名配置和root用户的坑用默认用户名如ec2-user登录后你可能会发现没有root权限执行sudo命令才行。这是AWS的安全设计不建议你直接改用root登录。有几个常用命令先掌握sudo whoami # 确认当前已经是root sudo yum update -y # Amazon Linux更新包 sudo hostnamectl set-hostname my-server # 修改主机名修改主机名后重新SSH就能看到新的提示符。很多新手会忽略主机名但当你管理多台实例时终端里区分哪台是哪台全靠它建议创建后立刻改一个有业务含义的名字。4.4 Web服务器快速验证确认实例真的“能用”很多新手做完上面的步骤SSH能连上但还是不太确定“这台服务器能干啥”。最简单的验证方式给它装上Nginxsudo yum install -y nginx sudo systemctl start nginx sudo systemctl enable nginx然后在安全组里放行80端口访问http://你的公网IP看到Nginx欢迎页就说明这台EC2已经从“空壳机器”变成了“Web服务器”。这个正反馈很重要——我教了很多人做到这一步他们才真正对“云服务器”有概念。5. 从点击鼠标到代码化管理用AWS CLI和启动模板把创建过程固化下来如果你只创建一两台实例控制台点一点足够了。但如果你要经常创建、销毁、批量搭建环境纯手工点控制台效率太低也容易漏配置。这时候就该上AWS CLI了。5.1 安装和配置AWS CLIAWS CLI可以装在你本地电脑上然后用Access Key ID和Secret Access Key去操作AWS资源。安装方式官方文档写得很清楚macOS和Linux用pip或二进制安装包Windows有安装向导。装完后执行aws configure按提示输入你的Access Key ID、Secret Access Key、默认区域和输出格式。Access Key在IAM控制台创建建议创建一个只用于API调用的专用IAM用户并只授予它“AmazonEC2FullAccess”这类最小权限不要直接用根账号的Access Key——根账号的权限太大泄露了就是灾难。5.2 用一行命令创建实例配置好CLI后创建一台实例只需要一条命令aws ec2 run-instances \ --image-id ami-xxxxxxxxxxxxxxxxx \ --instance-type t3.micro \ --key-name my-key-pair \ --security-group-ids sg-xxxxxxxxxxxxxxxxx \ --subnet-id subnet-xxxxxxxxxxxxxxxxx \ --associate-public-ip-address \ --tag-specifications ResourceTypeinstance,Tags[{KeyName,Valuemy-first-cli-instance}]注意--image-id要用你所在区域对应的AMI ID--security-group-ids和--subnet-id都要先创建好然后填对应的ID。最后那句--tag-specifications是给实例起名字的别忘了加——不加的话控制台里实例名称栏是空的管理起来很痛苦。5.3 用启动模板实现“一次配置、反复复用”如果连命令都懒得反复敲更高级的玩法是使用“启动模板Launch Template”。你在控制台或CLI里把一个实例的完整配置AMI、实例类型、安全组、存储、用户数据等保存为模板之后每次创建实例时选用这个模板只需指定模板ID和实例数量即可。这个场景特别适合批量创建多台配置完全一致的实例。我做过一个测试环境用了启动模板后从原来每台手动配置20分钟变成一秒钟创建5台。配合自动扩缩容实例数量还能根据负载自动调整。另外用户数据User Data脚本可以和启动模板结合每次新实例创建后自动完成环境初始化#!/bin/bash sudo yum update -y sudo yum install -y git docker sudo systemctl start docker sudo systemctl enable docker这样新实例拉起的那一刻就已经是“能直接跑代码”的状态了全程不需要人工介入。6. 账单惊吓预警与免费额度边界怎么把EC2成本控制在预期内创建实例一时爽月底账单火葬场。EC2的成本坑主要包括实例运行时长、存储卷容量、弹性IP闲置费、公网流量费。前两个大多数人知道后两个经常被忽略。6.1 免费额度的真实边界和实例生命周期管理再次提醒免费套餐的EC2额度是750小时/月对应t2.micro或t3.micro这类特定实例类型。如果你用的是m5.large哪怕只跑1小时也是按m5.large的全价计费。所以刚开始学习时不要一上来就选大实例先用免费档位把流程跑通够用了。更实用的建议是用完就停Stop不用的就删Terminate。很多人创建了实例后就把这事忘了实例空转了半个月账单上多了几十上百美元。AWS控制台里可以设置CloudWatch账单告警——当预估费用超过某个阈值比如10美元时发送邮件通知。这个一定要设它能救你钱包一命。6.2 公网流量这个隐形消费项EC2的公网流量也就是用户访问你网站产生的流量是单独计费的。aws官方有提供免费的流出流量额度每月100GB具体以官方页面为准超出后按每GB计费。如果你的网站图片多、视频多流量成本可能比实例本身还贵。降低流量成本的办法有三个用CDN如CloudFront扛静态资源回源流量少很多。给大文件做压缩、缩略图。把Web服务器和数据库放在同一可用区内走内网流量不产生公网费用。这里顺便提一句之前有段时间AWS发生区域性故障很多人网站挂了才反应过来“我居然只有一个可用区的单点”。所以如果你对可用性有要求至少在两个可用区各起一台实例前面加个负载均衡器ALB这是后话但架构思维要从创建第一台实例时就开始建立。6.3 快照备份的成本要不要省EBS卷可以创建快照用于数据备份。快照按存储容量计费很多人觉得贵就不做。我的建议是系统盘没必要天天快照但关键数据盘一定要定期快照。创建快照命令aws ec2 create-snapshot --volume-id vol-xxxxxxxxxxxxxxxxx --description backup-$(date %Y-%m-%d)快照费用相对较低但它是你数据安全事故时的救命稻草。把快照策略写进运维清单里比到处找运维工具靠谱得多。7. 常见故障排查速查表与生命周期治理建议只有真正被卡过才觉得排查手段重要。下面把创建EC2实例后最常见的几个问题整理成一张表方便出问题时对照排查。症状大概率原因排查/解决办法SSH Connection timed out安全组未放行22端口检查安全组入站规则确认来源IP是不是自己当前公网IPSSH Permission denied密钥对不对或权限太开放确认用的. pem是否正确执行chmod 400确认登录用户名和AMI匹配公网IP变了实例Stop后Start默认的公网IP会变需要固定IP时绑定弹性IP实例启动后Nginx/网站打不开安全组未放行80/443端口添加入站规则放行HTTP/HTTPS不知道实例每月花费未设置账单告警在CloudWatch中设置费用阈值告警实例被终止后数据还在收费存储卷未随实例删除检查EBS卷是否残留不用的卷手动删除无法用root直接SSHAWS默认禁用root密码登录用默认用户ec2-user/ ubuntu等登录后用sudo7.1 从创建实例到运维清单一个好习惯胜过花哨操作最后分享几个我在实际运维中沉淀下来的习惯都是从踩坑里换来的给每台实例打标签至少包含Name、Environmentprod/dev/test和Owner三个标签。当你有几十台实例时没有标签的实例就像找不到名字的文件管理起来极度痛苦。停止服务前先拍快照。尤其是数据库所在实例停止前拍一个快照万一操作失误能快速回滚。定期审查安全组规则。AWS安全组是白名单机制规则越少越安全不要长期保留“0.0.0.0/0”的大范围放行。不要在生产环境用root跑服务。即使是EC2上的Linux也应该创建普通用户用sudo执行管理员操作这是Linux运维的基本素养。把密钥对和账单告警当作第一优先级设置。密钥丢了你可能登录不上机器没设账单告警你的钱包可能在无声中变薄。7.2 接下来你可以往哪个方向拓展创建好实例SSH能连上Web服务器也能跑这只是万里长征第一步。接下来你可以按需拓展如果你在做个人博客或网站可以研究下如何把域名解析到弹性IP再用SSL证书开启HTTPS。如果这台实例要跑数据库建议数据盘单独挂载一块EBS卷不要把数据放在系统盘里方便备份和扩容。如果你想用Docker打包应用可以在实例上装Docker再用docker-compose管理多个容器。如果实例会被频繁启停试试AMI镜像功能——把配置好的实例做成自定义AMI下次创建时直接复用省去重新配置环境的时间。如果实例数量上来了研究一下Auto Scaling Group和负载均衡这会让你的架构具备“自动扩容”和“高可用”的能力。我自己现在的习惯是能用CLI解决的问题绝不打开控制台能用启动模板批量创建的场景绝不一个个点鼠标。这倒不是为了炫技而是当实例数量超过个位数纯手工管理不可避免地会出疏漏——少了标签、漏了安全组规则、忘记绑定弹性IP这些看似小问题在故障排查时都会变成大麻烦。创建EC2实例是整个AWS旅程的起点但也恰恰是很多人“入门即放弃”的地方。只要把前面的概念理清楚、把路径走顺后面不管是部署应用、做架构、还是踩坑排查都会顺理成章。希望这篇东西能帮你少走几步弯路把第一台云服务器稳稳地跑起来。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。