【问题标题】:How to create an ec2 instance using boto3如何使用 boto3 创建 ec2 实例
【发布时间】:2015-12-28 02:27:05
【问题描述】:

是否可以在 python 中使用 boto3 创建一个 ec2 实例? Boto3 文档在这里没有帮助,我在网上找不到任何帮助文档。请提供一些示例代码/链接。

【问题讨论】:

    标签: python amazon-web-services amazon-ec2 boto boto3


    【解决方案1】:

    API 已更改,但它在文档中

    # Boto 3
    ec2.create_instances(ImageId='<ami-image-id>', MinCount=1, MaxCount=5)
    

    文档链接: http://boto3.readthedocs.org/en/latest/guide/migrationec2.html#launching-new-instances

    【讨论】:

    • 你知道是否有关键字参数来指定安全组吗?这样我就可以创建实例,并设置正确的安全组,让我 ssh 进入服务器。
    • 它应该接受 SecurityGroups=['secgroup', ..] 关键字参数。这个issue 似乎暗示create_instances 在幕后运行经典的boto2 run_instances,所以run_instances 的原始参数应该是有效的。见documentation
    • 谢谢老哥,试试看
    • 嗨。文档非常简陋和模糊。如果我希望新实例为 c3.xlarge,如何设置参数?
    • 将此关键字参数添加到create_instancesInstanceType="c3.xlarge"
    【解决方案2】:

    您可以从boto3 docs 运行我使用的代码。您可以根据需要添加或删除参数,但这是您通常需要的:

    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',
        ],
    )
    

    【讨论】:

    • 我如何知道实例是否已创建并准备好登录?
    • 您必须使用从 RunInstances API 调用中获得的实例 ID 运行 DescribeInstances API 调用。
    • 但是没有 API 调用可以让您知道实例是否已准备好登录。
    • 对我来说很有魅力
    【解决方案3】:

    您真正在文档中寻找的链接是create_instances() method of the ServiceResource object。如果您像这样创建 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() method。)

    (注意:如果您想知道 Client 和 Resource 之间的区别是什么,它们在同一端有不同的用途 - 客户端是较低级别的接口,而 Resource 是较高级别的接口。)

    【讨论】:

    • 感谢您解释客户端和资源之间的区别!
    • 你是怎么想出来的?我在文档中看到了 ec2.create_instances 但我不知道 ec2 是什么。
    【解决方案4】:

    请参阅 API 文档,其中包含创建实例的所有可用选项

    http://boto3.readthedocs.org/en/latest/reference/services/ec2.html#EC2.Subnet.create_instances

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-21
        • 1970-01-01
        • 2020-09-30
        • 1970-01-01
        • 2016-07-29
        • 2020-07-20
        • 1970-01-01
        • 2016-06-13
        相关资源
        最近更新 更多