.. _ec2_tut:

=======================
Use Moto as EC2 backend
=======================

This tutorial explains ``moto.ec2``'s features and how to use it. This
tutorial assumes that you have already downloaded and installed boto and moto.
Before all code examples the following snippet is launched::

    >>> import boto.ec2, moto
    >>> mock_ec2 = moto.mock_ec2()
    >>> mock_ec2.start()
    >>> conn = boto.ec2.connect_to_region("eu-west-1")

Launching instances
-------------------

After mock is started, the behavior is the same than previously::

    >>> reservation = conn.run_instances('ami-f00ba4')
    >>> reservation.instances[0]
    Instance:i-91dd2f32

Moto set static or generate random object's attributes::

    >>> vars(reservation.instances[0])
    {'_in_monitoring_element': False,
     '_placement': None,
     '_previous_state': None,
     '_state': pending(0),
     'ami_launch_index': u'0',
     'architecture': u'x86_64',
     'block_device_mapping': None,
     'client_token': '',
     'connection': EC2Connection:ec2.eu-west-1.amazonaws.com,
     'dns_name': u'ec2-54.214.135.84.compute-1.amazonaws.com',
     'ebs_optimized': False,
     'eventsSet': None,
     'group_name': None,
     'groups': [],
     'hypervisor': u'xen',
     'id': u'i-91dd2f32',
     'image_id': u'f00ba4',
     'instance_profile': None,
     'instance_type': u'm1.small',
     'interfaces': [NetworkInterface:eni-ed65f870],
     'ip_address': u'54.214.135.84',
     'item': u'\n        ',
     'kernel': u'None',
     'key_name': u'None',
     'launch_time': u'2015-07-27T05:59:57Z',
     'monitored': True,
     'monitoring': u'\n          ',
     'monitoring_state': u'enabled',
     'persistent': False,
     'platform': None,
     'private_dns_name': u'ip-10.136.187.180.ec2.internal',
     'private_ip_address': u'10.136.187.180',
     'product_codes': [],
     'public_dns_name': u'ec2-54.214.135.84.compute-1.amazonaws.com',
     'ramdisk': None,
     'reason': '',
     'region': RegionInfo:eu-west-1,
     'requester_id': None,
     'root_device_name': None,
     'root_device_type': None,
     'sourceDestCheck': u'true',
     'spot_instance_request_id': None,
     'state_reason': None,
     'subnet_id': None,
     'tags': {},
     'virtualization_type': u'paravirtual',
     'vpc_id': None}