Amazon EC2操作指南与实用技巧
1. 常用EC2命令介绍
1.1 删除类命令
| 命令 | 作用 | 示例 |
|---|---|---|
| ec2-delete-group | 从账户中删除指定的安全组,需先移除所有对该组的引用 |
$ ec2-delete-group mydmz
|
| ec2-delete-keypair | 删除与指定密钥对关联的公钥 |
$ ec2-delete-keypair georgekey
|
| ec2-delete-snapshot | 删除账户中的指定快照 |
$ ec2-delete-snapshot snap-a5d8ef77
|
| ec2-delete-volume | 删除账户中的指定卷 |
$ ec2-delete-volume vol-12345678
|
| ec2-deregister | 注销机器镜像,需单独从S3中删除AMI以释放空间 |
$ ec2-deregister ami-f822a39b
|
1.2 描述类命令
| 命令 | 作用 | 示例 |
|---|---|---|
| ec2-describe-addresses | 列出指定弹性IP地址的信息,不指定则列出当前EC2区域分配的所有IP地址 |
$ ec2-describe-addresses
$ ec2-describe-addresses 67.202.55.255
|
| ec2-describe-availability-zones | 列出指定EC2可用区的信息,不指定则列出当前EC2区域的所有可用区 |
$ ec2-describe-availability-zones
$ ec2-describe-availability-zones us-east-1a
$ ec2-describe-availability-zones --region eu-west-1
|
| ec2-describe-bundle-tasks | 仅适用于Windows实例,列出指定捆绑任务的信息,不指定则列出所有捆绑任务 |
$ ec2-describe-bundle-tasks
$ ec2-describe-bundle-tasks bun-abd5209d8
|
| ec2-describe-group | 列出指定安全组的信息,不指定则列出账户关联的所有安全组 |
$ ec2-describe-group
$ ec2-describe-group mydmz
|
| ec2-describe-image-attribute | 描述特定AMI的属性,可选择查看启动权限或产品代码 |
$ ec2-describe-image-attribute ami-f822a39b -l
$ ec2-describe-image-attribute ami-f822a39b -p
|
| ec2-describe-images | 描述指定图像ID或匹配指定参数的图像信息,不指定参数则列出账户拥有的所有图像 |
$ ec2-describe-images
$ ec2-describe-images -o 063491364108
|
| ec2-describe-instances | 列出指定实例的信息,不指定则列出账户关联的所有实例 |
$ ec2-describe-instances
$ ec2-describe-instances i-b1a21bd8
|
| ec2-describe-keypairs | 列出指定密钥对的信息,不指定则列出所有拥有的密钥 |
$ ec2-describe-keypairs
|
| ec2-describe-regions | 列出指定区域的信息,不指定则列出所有区域 |
$ ec2-describe-regions
|
| ec2-describe-snapshots | 列出指定快照的信息,不指定则列出账户的所有快照 |
$ ec2-describe-snapshots
|
| ec2-describe-volumes | 列出指定卷的信息,不指定则列出账户的所有卷 |
$ ec2-describe-volumes
|
1.3 其他命令
| 命令 | 作用 | 示例 |
|---|---|---|
| ec2-detach-volume |
从当前附加的实例中分离指定卷,分离前需确保已卸载文件系统,失败时可使用
--force
选项
|
$ ec2-detach-volume
|
| ec2-disassociate-address | 解除指定弹性IP地址与任何实例的关联 |
$ ec2-disassociate-address 67.202.55.255
|
| ec2-get-console-output |
显示实例启动时的控制台输出,使用
-r
选项可无特殊格式显示
|
$ ec2-get-console-output i-b1a21bd8
|
| ec2-get-password | 仅适用于Windows实例,根据启动实例使用的密钥对提供管理员密码 |
$ ec2-get-password i-b1a21bd8 -k georgekey
|
| ec2-modify-image-attribute | 修改图像的属性,可修改启动权限或产品代码 |
$ ec2-modify-image-attribute ami-f822a39b -l -a 123456789
$ ec2-modify-image-attribute ami-f822a39b -l -r 123456789
$ ec2-modify-image-attribute ami-f822a39b -p crm114
|
| ec2-reboot-instances | 重启指定的实例,出错时会有显示 |
ec2-reboot-instances instanceid1 [...instanceidN]
|
| ec2-release-address | 释放当前分配的地址,释放后无法找回 |
$ ec2-release-address 67.202.55.255
|
| ec2-register | 注册指定位置的机器镜像清单文件对应的机器镜像 |
$ ec2-register myami/myami.manifest.xml
|
| ec2-reset-image-attribute | 重置指定机器镜像的启动权限属性 |
$ ec2-reset-image-attribute ami-f822a39b -l
|
| ec2-revoke | 撤销指定安全组的先前授权 |
$ ec2-revoke -P tcp -p 80 -s 0.0.0.0/0
|
| ec2-run-instances | 尝试根据指定的AMI和选项启动一个或多个EC2实例 |
$ ec2-run-instances ami-f822a39b
$ ec2-run-instances ami-f822a39b -n 2 -z us-east-1b
$ ec2-run-instances ami-f822a39b -g myapp -k georgekey
|
| ec2-terminate-instances | 终止指定的实例 |
$ ec2-terminate-instances i-b1a21bd8
|
1.4 ec2-run-instances命令选项说明
graph LR
A[ec2-run-instances imageid] --> B[-n count]
A --> C[-g groupname1 [... -g groupnameN]]
A --> D[-k keypair]
A --> E[-d customdata | -f customfile]
A --> F[-t type]
A --> G[-z zone]
A --> H[--kernel kernelid]
A --> I[--ramdisk ramdiskid]
A --> J[-B devicemapping]
B --> B1[指定启动的最小实例数]
C --> C1[指定安全组名称,可指定多个]
D --> D1[指定公钥]
E --> E1[-d:运行时提供给实例的数据; -f:包含运行时数据的文件]
F --> F1[指定Amazon实例类型]
G --> G1[指定可用区]
H --> H1[指定内核ID]
I --> I1[指定RAM磁盘ID]
J --> J1[定义块设备如何暴露给实例]
J1 --> J2[ami:实例看到的根文件系统设备]
J1 --> J3[root:内核看到的根文件系统设备]
J1 --> J4[swap:实例看到的交换设备]
J1 --> J5[ephemeralN:第N个临时存储]
2. Amazon EC2实用技巧
2.1 文件系统加密
在决定对Amazon文件系统进行加密之前,需要平衡安全需求和文件系统性能。加密的文件系统总是比未加密的文件系统慢,具体慢多少取决于所使用的底层文件系统以及是否使用RAID。一般在加密的RAID0上使用XFS。
要使用此技巧,需要安装
cryptsetup
包,如果需要XFS支持,还需要
xfsprogs
。在Debian下,需要以root身份执行以下命令:
apt-get install -y cryptsetup
apt-get install -y xfsprogs
echo sha256 >> /etc/modules
echo dm_crypt >> /etc/modules
以下Unix脚本在启动时将为Amazon m1.small实例上的临时卷设置加密的XFS卷:
# enStratus在启动时通过Web服务传入加密密钥
# 可以从启动参数中获取加密密钥,或者对于临时存储,只要不期望支持重启,甚至可以按需生成
# 无论如何,密钥会临时放在/var/tmp/keyfile或其他位置
KEYFILE=/var/tmp/keyfile
# 传入所需的文件系统;如果不支持,则回退到ext3
FS=${1}
if [ ! -x /sbin/mkfs.${FS} ] ; then
FS=ext3
if [ ! -x /sbin/mkfs.${FS} ] ; then
echo "Unable to identify a filesystem, aborting..."
exit 9
fi
fi
echo "Using ${FS} as the filesystem... "
if [ -f ${KFILE} ] ; then
if [[ -x /sbin/cryptsetup || -x /usr/sbin/cryptsetup ]]; then
# 卸载通常与实例预挂载的/mnt挂载点
sudo umount /mnt
# 在目标设备(此处为/dev/sda2)上设置加密
sudo cryptsetup -q luksFormat --cipher aes-cbc-essiv:sha256 /dev/sda2 ${KFILE}
if [ $? != 0 ] ; then
echo "luksFormat failed with exit code $?"
exit 10
fi
# 打开设备以供系统使用
sudo cryptsetup --key-file ${KFILE} -q luksOpen /dev/sda2 essda2
if [ $? != 0 ] ; then
echo "luksOpen failed with exit code $?"
exit 11
fi
# 使用前面指定的文件系统格式化文件系统
sudo mkfs.${FS} /dev/mapper/essda2
if [ $? != 0 ] ; then
echo "mkfs failed with exit code $?"
exit 12
fi
# 从/etc/fstab中删除当前/dev/sda2的条目
sudo perl -i -ane 'print unless /sda2/' /etc/fstab
# 在/etc/fstab中创建新条目(不自动挂载!)
echo "/dev/mapper/essda2 /mnt ${FS} noauto 0 0" | sudo tee -a /etc/fstab
# 挂载驱动器
sudo mount /mnt
if [ $? != 0 ] ; then
echo "Remount of /mnt failed with exit code $?"
exit 13
fi
fi
fi
为避免加密密钥以未加密形式存储在未加密的根分区上,可以采用以下方法:
1. 自动生成随机密钥并存储在
/var/tmp
中。
2. 将临时存储挂载为加密设备。
3. 擦除自动生成的密钥。
4. 从enStratus(或其他工具)传入永久密钥。
5. 将其存储在
/mnt/tmp
中。
6. 使用永久加密密钥挂载EBS卷。
7. 删除永久加密密钥。
8. 使用EBS卷存储所有关键数据。
如果想进一步加强加密,可以在使用驱动器之前通过原始写入随机数据来填充驱动器。
2.2 为多个EBS卷设置RAID
将多个EBS卷连接到RAID0(条带化)阵列可以显著提高磁盘I/O性能。但RAID1(镜像)的冗余效益不大,因为所有EBS卷必须与附加的实例位于同一可用区。而且EBS卷的镜像会消除条带化的大部分性能提升,所以RAID5和RAID10意义不大。
通常在每个实例上使用单个加密的EBS卷,除非性能至关重要。当性能至关重要时,会将卷加入RAID0阵列,是否对RAID0阵列进行加密取决于安全和磁盘性能的平衡。
使用
mdadm
包来设置RAIDs:
sudo apt-get install -y mdadm
以下脚本将创建一个包含两个驱动器的RAID0:
SVCMOUNT=/mnt/svc
# 传入所需的文件系统;如果不支持,则回退到ext3
FS=${1}
if [ ! -x /sbin/mkfs.${FS} ] ; then
FS=ext3
if [ ! -x /sbin/mkfs.${FS} ] ; then
echo "Unable to identify a filesystem, aborting..."
exit 9
fi
fi
echo "Using ${FS} as the filesystem... "
ISNEW=${2}
ARGS=($@)
DEVICELIST=${ARGS[@]:2}
DEVARR=($DEVICELIST)
DEVCOUNT=${#DEVARR[*]}
if [ ! -d ${SVCMOUNT} ] ; then
sudo mkdir ${SVCMOUNT}
sudo chmod 775 ${SVCMOUNT}
fi
# 验证有设备要挂载
if [ ${DEVCOUNT} -gt 0 ] ; then
# 如果有多个设备,设置RAID0
if [ ${DEVCOUNT} -gt 1 ] ; then
map=""
for d in ${DEVICELIST}; do
map="${map} /dev/${d}"
done
# 创建RAID0设备 /dev/md0
yes | sudo mdadm --create /dev/md0 --level 0 --metadata=1.1 --raid-devices ${DEVCOUNT} $map
if [ $? != 0 ] ; then
exit 20
fi
# 配置RAID以支持重启
echo "DEVICE ${DEVICELIST}" | sudo tee /etc/mdadm.conf
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf
# 这些是新创建的卷还是旧卷/快照的重新挂载?
if [ ${ISNEW} == "true" ] ; then
# 创建文件系统
sudo mkfs.${FS} /dev/md0
if [ $? != 0 ] ; then
exit 24
fi
echo "/dev/md0 ${SVCMOUNT} ${FS} noatime 0 0" | sudo tee -a /etc/fstab
else
echo "/dev/md0 ${SVCMOUNT} ${FS} noatime 0 0" | sudo tee -a /etc/fstab
fi
else
# 只有一个卷,不是RAID
if [ ${ISNEW} == "true" ] ; then
# 新卷,创建文件系统
sudo mkfs.${FS} /dev/${DEVICELIST}
if [ $? != 0 ] ; then
exit 29
fi
echo "/dev/${DEVICELIST} ${SVCMOUNT} ${FS} noauto 0 0" | sudo tee -a /etc/fstab
else
echo "/dev/${DEVICELIST} ${SVCMOUNT} ${FS} noauto 0 0" | sudo tee -a /etc/fstab
fi
fi
sudo mount ${SVCMOUNT}
fi
2.3 总结与注意事项
在使用上述技巧时,有以下几点需要注意:
-
文件系统加密
:
- 加密会带来性能损耗,需要根据实际情况平衡安全和性能。
- 确保加密密钥的安全存储,避免密钥泄露。
- 不同的文件系统和RAID配置对加密性能有影响,可根据实际需求选择。
-
RAID设置
:
- RAID0能提升性能,但没有冗余性,需要确保数据备份。
- RAID1、RAID5和RAID10在EBS卷场景下可能效果不佳,需谨慎选择。
- 配置RAID时,要注意设备的可用性和兼容性。
2.4 实用技巧流程图
graph LR
A[开始] --> B{是否需要文件系统加密}
B -- 是 --> C[安装cryptsetup和xfsprogs]
C --> D[设置加密XFS卷脚本]
D --> E[采用安全密钥存储方法]
E --> F[可选:填充随机数据]
B -- 否 --> G{是否需要设置RAID}
G -- 是 --> H[安装mdadm]
H --> I[创建RAID0脚本]
I --> J[配置RAID和挂载]
G -- 否 --> K[结束]
F --> K
J --> K
3. 常见问题解答
3.1 命令执行失败怎么办?
当执行EC2命令失败时,可以按照以下步骤排查:
1.
检查命令语法
:确认命令的参数和选项是否正确,参考命令文档进行修正。
2.
检查权限
:确保当前用户具有执行该命令的权限,可能需要使用
sudo
。
3.
检查网络连接
:确保网络连接正常,能够访问Amazon EC2服务。
4.
查看错误信息
:根据命令输出的错误信息进行针对性排查,可能是资源不存在、权限不足等原因。
3.2 文件系统加密后性能下降严重怎么办?
如果文件系统加密后性能下降严重,可以考虑以下方法:
1.
更换文件系统
:尝试使用不同的文件系统,如XFS、EXT4等,比较性能差异。
2.
调整RAID配置
:如果使用了RAID,尝试调整RAID级别或阵列配置。
3.
优化加密算法
:选择更高效的加密算法,减少加密带来的性能损耗。
3.3 RAID设置出现问题如何解决?
当RAID设置出现问题时,可以按照以下步骤解决:
1.
检查设备状态
:确保所有EBS卷设备正常可用。
2.
查看RAID配置文件
:检查
/etc/mdadm.conf
文件是否配置正确。
3.
重新创建RAID
:如果RAID配置错误,可以尝试删除并重新创建RAID。
4. 总结
本文介绍了Amazon EC2的常用命令,包括删除、描述、操作等各类命令,并详细说明了
ec2-run-instances
命令的选项。同时,分享了文件系统加密和为多个EBS卷设置RAID的实用技巧,以及常见问题的解答。通过合理运用这些命令和技巧,可以更好地管理和优化Amazon EC2环境,提高工作效率和数据安全性。在实际使用过程中,需要根据具体需求和场景选择合适的方法,并注意相关的注意事项。
希望这些内容能帮助你更好地使用Amazon EC2,如果你在使用过程中遇到其他问题,欢迎继续探索和学习。
| 类别 | 技巧总结 |
|---|---|
| 文件系统加密 | 平衡安全和性能,使用cryptsetup和xfsprogs,采用安全密钥存储方法 |
| RAID设置 | 使用RAID0提升性能,注意设备可用性和兼容性,谨慎选择RAID级别 |
| 命令使用 | 正确使用各类EC2命令,注意命令语法和权限 |
4.1 未来展望
随着云计算技术的不断发展,Amazon EC2也会不断更新和优化。未来可能会出现更高效的文件系统加密方法、更灵活的RAID配置方式以及更多便捷的命令和工具。我们可以持续关注Amazon EC2的官方文档和社区动态,及时掌握最新的技术和技巧,进一步提升我们在云计算环境中的工作能力和效率。同时,也可以结合其他云计算服务和技术,构建更加复杂和强大的云计算架构。
超级会员免费看
22

被折叠的 条评论
为什么被折叠?



