AWS云平台SDK boto3(python)--自动化创建实例、创建挂载卷以及远程操作
1 介绍
Boto3是AWS python版的SDK,可以向python开发者在编写程序过程中使用Amazon S3和 Amazon EC2等服务。
Boto提供了简单的面向对象的API和基本的AWS相关服务。Boto3是最新版本,老版本例如boto2不建议使用。
这篇文章介绍了如何在本地windows环境下,进行AWS云服务的一些基本操作,例如创建实例创建、
卷创建和挂载、资源状态查询、资源使用后的清理回收,以及通过paramiko远程操作实例。
2 安装环境
安装AWS CLI(Command Line Interface)
AWS命令行接口(CLI)是一个统一的工具来管理的AWS服务。只需下载并完成配置,便可以从命令行控制多个AWS服务,并通过脚本实现对AWS云服务的自动化操作。
下载链接:https://aws.amazon.com/cli/
可参考 https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html#guide-configuration
主要配置修改:
1 2 3 4 5 6 7 8
| [default] aws_access_key_id = YOUR_KEY aws_secret_access_key = YOUR_SECRET
[default] region=cn-north-1a
|
安装Boto3
3 基本命令
3.1 操作流程
基本操作流程示例:
- 创建实例
- 查询实例状态
- 创建卷
- 查看卷状态
- 若实例与卷均已创建完成并可以使用,挂载卷到已创建的云主机
- 资源使用完毕,清理回收
3.2 客户端和资源
boto3.client(“ec2”)
该命令主要可以进行EC2客户端的一些基本操作。例如:关联、挂载、创建、查询,取消、删除、修改等。
boto3.resource(“ec2”)
该命令主要可以进行EC2云服务中的各类资源的相关操作。该命令与client有交集的部分也有独立的一部分。
3.3 控制AWS代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| import boto3
ec2 = boto3.client("ec2") ec2_resource = boto3.resource("ec2")
createInstance = ec2_resource.create_instances( Placement={ "AvailabilityZone": "cn-north-1b", }, ImageId="ami-0c52e2685c7218558", InstanceType="t2.micro", MaxCount=1, MinCount=1, KeyName="gsz", )
instanceID = createInstance[0].id
instance_state = ec2_resource.Instance(instanceID).state["Name"]
snap2vol = ec2.create_volume( AvailabilityZone= "cn-north-1b", Encrypted=True, Size = 100, SnapshotId = "snap-096b5af48e45fe262" )
volID = create_vol['VolumeId'] attach_vol2 = ec2.attach_volume( ice=Device2, InstanceId=InstanceID, VolumeId=volID, ) attach_state = ec2_resource.Volume(datavolID).attachments[0]['State']
instance = ec2_resource.Instance(instanceID) instance.terminate() volume = ec2_resource.Volume(vol_id) volume.delete()
|
3.4 远程操作云主机
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import paramiko
sshc = paramiko.SSHClient() sshc.set_missing_host_key_policy(paramiko.AutoAddPolicy()) sshc.connect(host, username=username,port=port,pkey=key)
sftp = sshc.open_sftp() localfile1 = "path to your locoal file" remotepath1 = "path/file.name" sftp.put(localfile1, remotepath1) sftp.close()
commands = [ "shell command list" ] for command in commands: stdin, stdout, stderr = sshc.exec_command(command)
|
参考资料
Paramiko: https://www.cnblogs.com/xiao-apple36/p/9144092.html
Boto3: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#ec2