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/0
EBS 卷
基本写法:列出卷
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"
弹性 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定期审计; 创建卷时可用区必须与目标实例一致,否则无法挂载。