【问题标题】:AttributeError: 'dict' object has no attribute 'Instance' pythonAttributeError: \'dict\' 对象没有属性 \'Instance\' python
【发布时间】:2022-12-22 00:43:06
【问题描述】:

我正在尝试使用 PrivateIP 启动 EC2 实例,我在其中提供参数“PrivateIP”,下面的代码将描述 ec2 并获取 InstanceId。收到 InstanceId 后,它会启动 EC2 实例

def status_ec2_instance(instanceIds_list, region_Name):
    ec2 = boto3.resource('ec2', region_name=region_Name)
    ec2_client = boto3.client('ec2', region_name=region_Name)
    print(instanceIds_list)
    a=instanceIds_list[0]
    print(a)
    #response=ec2_client.describe_instances(InstanceIds=instanceIds_list)
    response = ec2_client.describe_instances(Filters=[
        {
            'Name': 'private-ip-address',
            'Values': [
                a,
            ]    
        }
    ])
    for ec2 in response['Reservations'][0]['Instances']:
        instanceIds = ec2['InstanceId']
        print(instanceIds)
        response=ec2_client.start_instances(InstanceIds=[instanceIds])
        print('started your instances: ' + str(instanceIds))
        instance_started = []
        print(instanceIds)
        instance_response = ec2.Instance([instanceIds])
        instance_state = instance_response.state
        if instance_state['Name'] == 'running'and instance not in instance_started:
            instance_started.append(instance)
            print(instance,instance_state['Name'])
                
                    
    print("started instances ",str(instance_started))
    return instance_started

if __name__ == "__main__":
    PrivateIP = sys.argv[1]
    region_Name = "us-east-1"
    #instanceIds_list = [instanceIds]
    instanceIds_list = [PrivateIP]
    status_list=status_ec2_instance(instanceIds_list, region_Name)

但是,我收到以下错误

Traceback (most recent call last):
  File "test3-status.py", line 100, in <module>
    status_list=status_ec2_instance(instanceIds_list, region_Name)
  File "test3-status.py", line 71, in status_ec2_instance
    instance_response = ec2.Instance([instanceIds])
AttributeError: 'dict' object has no attribute 'Instance'

请帮助如何解决这个问题?

【问题讨论】:

  • 您正在重用您的 ec2 变量。当您第二次使用它时,它不再存储 boto 客户端。

标签: python python-3.x amazon-ec2 boto3 boto


【解决方案1】:

您重用了以前存储 boto 客户端的 ec2 变量,但现在包含一个字典

def status_ec2_instance(instanceIds_list, region_Name):
    ec2 = boto3.resource('ec2', region_name=region_Name)
    //...
    for ec2 in response['Reservations'][0]['Instances']:
        instanceIds = ec2['InstanceId']
        // ...
        instance_response = ec2.Instance([instanceIds])

【讨论】:

    猜你喜欢
    • 2020-09-11
    • 2018-06-22
    • 2018-10-13
    • 2019-08-02
    • 2018-09-02
    • 2021-01-30
    • 2021-06-07
    • 2021-12-28
    • 2019-03-31
    相关资源
    最近更新 更多