使用Python和Boto3在AWSEC2实例上执行命令
发布时间:2023-12-28 01:34:14
在AWS EC2实例上执行命令可以使用Boto3库提供的run_instances方法创建EC2实例,然后使用SSH连接到实例并执行所需的命令。
首先,确保已正确安装并配置了Boto3库。可以使用以下命令安装Boto3:
pip install boto3
接下来,导入所需的模块:
import boto3 import paramiko
然后,创建EC2实例:
ec2 = boto3.resource('ec2', region_name='us-west-2')
instance = ec2.create_instances(
ImageId='ami-0c94855ba95c71c99',
MinCount=1,
MaxCount=1,
InstanceType='t2.micro',
KeyName='your_key_pair_name',
SecurityGroupIds=['your_security_group_id'],
UserData='#!/bin/bash
apt-get update -y
apt-get install -y python3'
)[0]
# 等待实例变为可用
instance.wait_until_running()
# 刷新实例信息
instance.reload()
在上面的代码中,我们使用create_instances方法创建一个EC2实例,并传入所需的参数,如AMI ID,实例类型,密钥对名称和安全组ID等。还可以在UserData中传递一些启动脚本,例如在此处我们安装了Python 3。
接下来,使用ssh连接到实例:
key_pair = paramiko.RSAKey(filename='your_key_pair_path.pem')
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(
instance.public_ip_address,
username='ubuntu',
pkey=key_pair
)
# 执行命令
stdin, stdout, stderr = ssh_client.exec_command('ls')
# 获取结果
print(stdout.read().decode())
在上面的代码中,我们使用Paramiko库创建了一个SSH连接,并连接到EC2实例。我们需要提供与实例关联的密钥对文件路径以及实例的公共IP地址和用户名。然后,使用exec_command方法执行所需的命令,并使用stdout.read().decode()读取命令的输出结果。
完整的示例代码如下:
import boto3
import paramiko
# 创建EC2实例
ec2 = boto3.resource('ec2', region_name='us-west-2')
instance = ec2.create_instances(
ImageId='ami-0c94855ba95c71c99',
MinCount=1,
MaxCount=1,
InstanceType='t2.micro',
KeyName='your_key_pair_name',
SecurityGroupIds=['your_security_group_id'],
UserData='#!/bin/bash
apt-get update -y
apt-get install -y python3'
)[0]
# 等待实例变为可用
instance.wait_until_running()
# 刷新实例信息
instance.reload()
# SSH连接到实例
key_pair = paramiko.RSAKey(filename='your_key_pair_path.pem')
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(
instance.public_ip_address,
username='ubuntu',
pkey=key_pair
)
# 执行命令
stdin, stdout, stderr = ssh_client.exec_command('ls')
# 获取结果
print(stdout.read().decode())
# 关闭SSH连接
ssh_client.close()
以上示例演示了如何使用Python和Boto3在AWS EC2实例上执行命令。通过这种方式,您可以使用任何有效的命令来管理和操作EC2实例。记得替换示例代码中的必填信息(例如AMI ID、密钥对名称、安全组ID和文件路径)以便正确使用。
