aws ec2现场实例管理工具
getbox的Python项目详细描述
获取框
“Playground”实例管理器
简而言之:
一键启动EC2 SPOT实例并将EBS卷附加到它们
实例和卷将使用您的团队和your名称正确标记。
安装:
来自Pypi
pip3 install getbox
手动
唯一的依赖关系是boto3
,您可能已经拥有了它。如果没有,您可以使用pip install boto3
安装它。之后:
python3 getbox install
这将把二进制文件安装到/usr/local/bin
,并尝试安装bash完成。
认证
它假设您有用于访问ssh代理中的ec2实例的ssh密钥对。
你需要美国焊接学会的证书。如果你以前在你的机器上用过awscli,你应该做得很好。如果没有,请安装awscli并运行aws configure
。
权限
getbox
启动和终止实例需要一些权限。
IAM策略示例:
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["ec2:AttachVolume","ec2:CancelSpotInstanceRequests","ec2:CreateTags","ec2:DeleteVolume","ec2:DescribeInstances","ec2:DescribeKeyPairs","ec2:DescribeSpotInstanceRequests","ec2:DescribeSubnets","ec2:DescribeVolumes","ec2:ModifyInstanceAttribute","ec2:RequestSpotInstances","ec2:RunInstances","ec2:TerminateInstances"],"Resource":["*"]}]}
魔术
在一个命令中获取实例的最懒方法:
$ getbox get <..a minute later..>[ubuntu@ip-172-18-142-171 ~]$
你在us-west-2
中得到了一个ubuntu 17.04linux的盒子。它将在/mnt
安装一个100gb的ebs驱动器。
默认情况下,实例终止时将删除ebs驱动器。您可以使用getbox keep
命令更改该行为,也可以组合该getbox get r3.4xlarge keep
。记住,您的spot实例可以随时被amazon终止。
用法:
因为它将标记实例将是您的unix用户名,所以不要以根用户身份或在容器中运行它。
Usage: getbox <cmd> [parameters]
get Get an ec2 instance and ssh into it. getbox get r3.8xlarge
...optionally, pass EBS volume id to attach. getbox get vol-321
...or both getbox get r3.8xlarge vol-321
...you can also name it getbox get r3.8xlarge --name mytestbox
...or specify EBS volume size getbox get r3.8xlarge 200GB
list List your instances and volumes getbox list
kill Kill an instance or (unattached) volume getbox kill 123
getbox kill vol-456
ssh Log into the instance (uses utility1 key) getbox ssh 123
keep Disable delete-on-termination on an attached EBS volume getbox keep vol-123
unkeep Enable delete-on-termination on an attached EBS volume getbox unkeep vol-123
install Install getbox to /usr/local/bin and add bash autocomplete getbox install
getbox ssh <instance-id>
有点神奇;如果从交互式控制台使用,它只会让您登录。但如果检测到其输出被重定向,它将返回user@host string。它允许您使用自定义ssh标志或rsync/scp,如下所示:rsync -av . $(getbox ssh):
具有临时驱动器的实例
在IOPS和延迟方面,临时驱动器通常比EBS提供更好的性能。使用getbox
,您有两个选项:要么将临时驱动器作为单独的“暂存”卷装载,要么自动将数据镜像到ebs和临时驱动器,这样它就可以在实例终止后生存。
1.使用临时驱动器作为临时存储
ebs将在/mnt
上装载,临时驱动器将作为一个raid-0 lvm voume在/scratch
下装载。当实例被终止时,将丢失/scratch
下的所有内容。
2。使用临时驱动器作为镜像
在这种模式下,通过--mirror
标志切换,getbox
创建一个raid卷,以便所有写操作都可以同时到临时驱动器和ebs卷。它的设置是为了在可能的情况下只对临时驱动器进行读操作,这样就可以获得最接近临时驱动器的随机读性能和最慢的两个驱动器的写性能,并且在实例终止时不会丢失数据。
你得到了(读)性能和持久性!
有几个注意事项:
- 在此模式下不能选择EBS卷大小;它将自动选择以匹配临时存储,这取决于实例类型。
- 目前,您只能重用具有相同实例类型的镜像EBS卷(因为临时驱动器大小必须与EBS大小匹配)。
getbox
记住所使用的实例类型,因此您可以运行getbox get <volume-id>
,它将启动同一类型的实例并重新组装raid数组。 - 首次在此模式下启动实例时,需要10-50分钟来重新同步RAID阵列;您可以在重新同步期间使用该实例,但读取性能将与EBS相同。您可以使用
mdadm --detail /dev/md0
检查重新同步的状态。 - 记住,您仍然需要
getbox keep
来保持ebs驱动器运行当实例终止时。
配置
可以使用名为.getbox
的主目录中的json配置文件自定义一些getbox
默认参数。
Name | Description | Default |
---|---|---|
^{ | Tags to assign to ec2 instance and EBS drive | |
^{ | ^{ | ^{ |
^{ | Linux username used to ssh into instances | ^{ |
^{ | Name of ssh keypair to use when creating an instance | ^{ |
^{ | Timeout when trying to connect to a newly created instance | ^{ |
^{ | Flags to use with ssh command for ^{ | ^{ |
^{ | Default size of the root EBS drive (GiB) | ^{ |
^{ | EC2 AMI id to use | ^{ |
^{ | EC2 AMI id to use with GPU-enabled instances (can be null, then ^{ | ^{ |
^{ | EC2 IAM role arn to use for instance profile | |
^{ | A list of security group ids to use | |
^{ | A list of subnets to use | |
^{ | Spot price | ^{ |
^{ | A list of additional commands to execute on instance initialization |