AWS EC2 命令
EC2 命令实战:实例生命周期、密钥与安全组、EBS 卷、弹性 IP 与常见陷阱。
概念 30 秒:一台 EC2 = AMI 镜像 + 实例规格 + 网络(子网/安全组)+
密钥对。三个生命周期动词要分清:stop(停机不收费计算费,公有 IP 会
变)、terminate(销毁,默认同时删除根卷)、reboot(原地重启)。
实例选型与计费模型见 270-AWSCore。
实例查询
基本写法:列出所有实例
aws ec2 describe-instances [--filters <过滤器>]
# 列出当前账号所有 EC2 实例
aws ec2 describe-instances基本写法:过滤运行中实例
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running"
# 仅列出 running 状态的实例
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running"基本写法:查询指定字段
aws ec2 describe-instances --query '<JMESPath>' --output table
# 提取实例 ID 类型状态公网 IP
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId,InstanceType,State.Name,PublicIpAddress]' --output table实例生命周期
基本写法:启动新实例
aws ec2 run-instances --image-id <AMI> --instance-type <类型> [--key-name <密钥名>] [--security-group-ids <安全组ID>]
# 启动一台 t3.micro 实例
aws ec2 run-instances --image-id ami-0c55b159cbfafe1f0 --instance-type t3.micro --key-name my-key-pair基本写法:在 VPC 子网中启动
aws ec2 run-instances --image-id <AMI> --instance-type <类型> --subnet-id <子网ID> --security-group-ids <安全组ID>
# 指定子网与安全组启动实例
aws ec2 run-instances --image-id ami-12345 --instance-type t3.small --subnet-id subnet-abc123 --security-group-ids sg-12345基本写法:启动已停止的实例
aws ec2 start-instances --instance-ids <实例ID>
# 启动停止状态的实例
aws ec2 start-instances --instance-ids i-1234567890abcdef0基本写法:停止实例
aws ec2 stop-instances --instance-ids <实例ID>
# 停止实例保留 EBS 卷
aws ec2 stop-instances --instance-ids i-1234567890abcdef0基本写法:终止实例
aws ec2 terminate-instances --instance-ids <实例ID>
# 永久终止实例(根卷默认随实例删除;额外挂载的数据卷不会被删)
aws ec2 terminate-instances --instance-ids i-1234567890abcdef0基本写法:重启实例
aws ec2 reboot-instances --instance-ids <实例ID>
# 重启指定实例
aws ec2 reboot-instances --instance-ids i-1234567890abcdef0密钥对
基本写法:创建密钥对
aws ec2 create-key-pair --key-name <密钥名> --query 'KeyMaterial' --output text > <文件>
# 创建密钥对并保存私钥到本地
aws ec2 create-key-pair --key-name my-new-key --query 'KeyMaterial' --output text > my-new-key.pem基本写法:列出密钥对
aws ec2 describe-key-pairs
# 查看所有密钥对
aws ec2 describe-key-pairs基本写法:删除密钥对
aws ec2 delete-key-pair --key-name <密钥名>
# 删除指定密钥对
aws ec2 delete-key-pair --key-name my-old-key安全组
基本写法:创建安全组
aws ec2 create-security-group --group-name <名称> --description <描述> [--vpc-id <VPC ID>]
# 在指定 VPC 中创建安全组
aws ec2 create-security-group --group-name my-sg --description "My security group" --vpc-id vpc-12345基本写法:开放 SSH 端口
aws ec2 authorize-security-group-ingress --group-id <安全组ID> --protocol tcp --port 22 --cidr <IP 段>
# SSH 应只对办公网/跳板网段开放(0.0.0.0/0 仅限临时调试,用完立即撤)
aws ec2 authorize-security-group-ingress --group-id sg-12345 --protocol tcp --port 22 --cidr 203.0.113.0/24基本写法:开放 HTTP 端口
aws ec2 authorize-security-group-ingress --group-id <安全组ID> --protocol tcp --port 80 --cidr 0.0.0.0/0
# 允许任意 IP 访问 80 端口
aws ec2 authorize-security-group-ingress --group-id sg-12345 --protocol tcp --port 80 --cidr 0.0.0.0/0基本写法:撤销入站规则
aws ec2 revoke-security-group-ingress --group-id <安全组ID> --protocol tcp --port 22 --cidr 0.0.0.0/0
# 撤销 SSH 入站规则
aws ec2 revoke-security-group-ingress --group-id sg-12345 --protocol tcp --port 22 --cidr 0.0.0.0/0EBS 卷
基本写法:列出卷
aws ec2 describe-volumes [--filters <过滤器>]
# 列出所有 EBS 卷
aws ec2 describe-volumes基本写法:创建卷
aws ec2 create-volume --availability-zone <可用区> --size <GB>
# 在 us-east-1a 创建 100GB 卷
aws ec2 create-volume --availability-zone us-east-1a --size 100基本写法:附加卷到实例
aws ec2 attach-volume --volume-id <卷ID> --instance-id <实例ID> --device <设备名>
# 将卷附加为 /dev/sdf
aws ec2 attach-volume --volume-id vol-12345 --instance-id i-1234567890abcdef0 --device /dev/sdf基本写法:创建快照
aws ec2 create-snapshot --volume-id <卷ID> [--description <描述>]
# 为卷创建快照备份
aws ec2 create-snapshot --volume-id vol-12345 --description "Volume backup"AMI 镜像管理
基本写法:镜像类型
| 类型 | 说明 | 适用 |
|---|---|---|
| 公共镜像 | 云商提供的官方镜像 | 标准化部署 |
| 自定义镜像(AMI) | 基于实例或快照创建的私有镜像 | 快速复制整台环境 |
| 共享镜像 | 其他账号共享的镜像 | 跨账号协作 |
| 市场镜像 | 第三方预装软件镜像 | 快速搭建 |
基本写法:从实例创建自定义镜像
aws ec2 create-image --instance-id <实例ID> --name <名称> [--no-reboot]
# 把配置好的实例打成镜像(--no-reboot 不停机,但落盘数据可能不完整)
aws ec2 create-image --instance-id i-1234567890abcdef0 \
--name "myapp-v2.3.1" --description "Application image v2.3.1" --no-reboot基本写法:跨区域复制镜像
aws ec2 copy-image --source-region <源区域> --source-image-id <镜像ID> --region <目标区域>
# 多区域部署时先复制镜像
aws ec2 copy-image --source-region us-east-1 --source-image-id ami-12345 \
--region us-west-2 --name "myapp-v2.3.1-west"基本写法:共享镜像给其他账号
aws ec2 modify-image-attribute --image-id <镜像ID> --launch-permission ...
aws ec2 modify-image-attribute --image-id ami-12345 \
--launch-permission "Add=[{UserId=123456789012}]"弹性 IP
基本写法:分配弹性 IP
aws ec2 allocate-address --domain vpc
# 在 VPC 中分配弹性 IP
aws ec2 allocate-address --domain vpc基本写法:关联弹性 IP 到实例
aws ec2 associate-address --instance-id <实例ID> --allocation-id <分配ID>
# 将弹性 IP 绑定到实例
aws ec2 associate-address --instance-id i-1234567890abcdef0 --allocation-id eipalloc-12345基本写法:释放弹性 IP
aws ec2 release-address --allocation-id <分配ID>
# 释放未使用的弹性 IP
aws ec2 release-address --allocation-id eipalloc-12345小结
- 初学者要点:查实例用
describe-instances --filters+--query; stop 后公有 IP 会变,需要固定公网地址就挂弹性 IP;terminate 默认删 根卷但保留额外数据卷;私钥只在create-key-pair时下发一次。 - 进阶注意:闲置的弹性 IP 计费(未绑定实例时),清理实例时连 EIP 一起
释放;安全组 SSH 不对全网开放,优先用 SSM Session Manager 免密钥
登录;EBS 卷与快照都是持续计费项,
describe-volumes定期审计; 创建卷时可用区必须与目标实例一致,否则无法挂载。