如何使用boto3创建一个EC2实例

37

能否使用Python的Boto3创建EC2实例? Boto3文档在这方面没有帮助,我找不到任何有用的在线文档,请提供一些样本代码/链接。

6个回答

43

你知道是否有一个关键字参数来指定安全组吗?这样我就可以创建实例,并设置正确的安全组,让我可以通过ssh登录到服务器。 - applecider
2
它应该接受一个 SecurityGroups=['secgroup', ..] 关键字参数。这个 问题 似乎表明 create_instances 在幕后运行经典的 boto2 run_instances,因此 run_instances 的原始参数应该是有效的。请参阅文档 - gbs
谢谢,我会试一下的。 - applecider
嗨。文档非常简略和模糊。如果我想要新实例成为c3.xlarge,我该如何设置参数? - Moses Liao GZ
1
create_instances 中添加这个关键字参数:InstanceType="c3.xlarge" - gbs
显示剩余4条评论

21
你可以从 boro3 文档中运行我使用的代码。您可以根据自己的要求添加或删除参数,但通常需要以下内容:

您可以从 boro3文档 运行我所用的代码。您可以根据自己的需求添加或删除参数,但这通常是您需要的内容:

import boto3

client = boto3.client('ec2', region_name='us-west-2')

response = client.run_instances(
    BlockDeviceMappings=[
        {
            'DeviceName': '/dev/xvda',
            'Ebs': {

                'DeleteOnTermination': True,
                'VolumeSize': 8,
                'VolumeType': 'gp2'
            },
        },
    ],
    ImageId='ami-6cd6f714',
    InstanceType='t3.micro',
    MaxCount=1,
    MinCount=1,
    Monitoring={
        'Enabled': False
    },
    SecurityGroupIds=[
        'sg-1f39854x',
    ],
)

我如何知道实例是否已创建并准备好登录? - Macindows
你需要使用RunInstances API调用获取的实例ID运行DescribeInstances API调用。 - captainblack
然而,没有API调用可以让您知道实例何时准备好登录。 - captainblack
1
对我来说非常顺利地工作了。 - Trect

11

您真正需要查找的文档链接是ServiceResource对象的create_instances()方法。如果您像这样创建EC2资源,则调用此类型的对象:

s = boto3.Session(region_name="us-west-1")
ec2 = s.resource('ec2')
...
instance = ec2.create_instances(**y_kwargs)

这里包含一个更详细的示例和可用参数的长列表。

您还可以使用AWS命令行界面获取已经运行的AWS实例的参数值:

$ aws ec2 describe-instances

这将打印出一个JSON文件,可以从中提取相关参数并传递给create_instances()方法。(或者,您可以使用boto客户端并调用describe_instances()方法。)
(注意: 如果您想知道客户端和资源之间的区别是什么,它们为同一目的提供不同的服务——客户端是较低级别的接口,而资源是较高级别的接口。)

2
感谢您解释客户端和资源之间的区别! - timbram
你是怎么想到的?我在文档中看到了ec2.create_instances,但我不知道ec2是什么。 - user3180

6

2

如果您在Windows计算机上运行,则需要使用适当的EC2权限配置AWS Cli以启动实例。

import boto3

ec2 = boto3.resource('ec2')

instance = ec2.create_instances(
    ImageId='ami-5eb63a32',
    MinCount=1,
    MaxCount=1,
    InstanceType='t2.micro',
)
print(instance[0].id)

0
import boto3

ec2 = boto3.client('ec2', region_name='')

conn = ec2.run_instances(ImageId='<ami-image-id>', 
                         InstanceType='<instance-type>',
                         MinCount=1, 
                         MaxCount=5
                            )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接