summaryrefslogtreecommitdiff
path: root/doc/rtd/reference/datasources/ec2.rst
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rtd/reference/datasources/ec2.rst')
-rw-r--r--doc/rtd/reference/datasources/ec2.rst153
1 files changed, 153 insertions, 0 deletions
diff --git a/doc/rtd/reference/datasources/ec2.rst b/doc/rtd/reference/datasources/ec2.rst
new file mode 100644
index 00000000..7e2b522a
--- /dev/null
+++ b/doc/rtd/reference/datasources/ec2.rst
@@ -0,0 +1,153 @@
+.. _datasource_ec2:
+
+Amazon EC2
+**********
+
+The EC2 datasource is the oldest and most widely used datasource that
+``cloud-init`` supports. This datasource interacts with a *magic* IP provided
+to the instance by the cloud provider (typically this IP is
+``169.254.169.254``). At this IP a http server is provided to the
+instance so that the instance can make calls to get instance user data and
+instance metadata.
+
+Metadata is accessible via the following URL: ::
+
+ GET http://169.254.169.254/2009-04-04/meta-data/
+ ami-id
+ ami-launch-index
+ ami-manifest-path
+ block-device-mapping/
+ hostname
+ instance-id
+ instance-type
+ local-hostname
+ local-ipv4
+ placement/
+ public-hostname
+ public-ipv4
+ public-keys/
+ reservation-id
+ security-groups
+
+User data is accessible via the following URL: ::
+
+ GET http://169.254.169.254/2009-04-04/user-data
+ 1234,fred,reboot,true | 4512,jimbo, | 173,,,
+
+Note that there are multiple EC2 Metadata versions of this data provided
+to instances. ``Cloud-init`` attempts to use the most recent API version it
+supports in order to get the latest API features and instance-data. If a given
+API version is not exposed to the instance, those API features will be
+unavailable to the instance.
+
++----------------+----------------------------------------------------------+
++ EC2 version | supported instance-data/feature |
++================+==========================================================+
++ **2021-03-23** | Required for Instance tag support. This feature must be |
+| | enabled individually on each instance. See the |
+| | `EC2 tags user guide`_. |
++----------------+----------------------------------------------------------+
+| **2016-09-02** | Required for secondary IP address support. |
++----------------+----------------------------------------------------------+
+| **2009-04-04** | Minimum supports EC2 API version for metadata and |
+| | user data. |
++----------------+----------------------------------------------------------+
+
+To see which versions are supported by your cloud provider use the following
+URL: ::
+
+ GET http://169.254.169.254/
+ 1.0
+ 2007-01-19
+ 2007-03-01
+ 2007-08-29
+ 2007-10-10
+ 2007-12-15
+ 2008-02-01
+ 2008-09-01
+ 2009-04-04
+ ...
+ latest
+
+
+Configuration settings
+======================
+
+The following configuration can be set for the datasource in system
+configuration (in :file:`/etc/cloud/cloud.cfg` or
+:file:`/etc/cloud/cloud.cfg.d/`).
+
+The settings that may be configured are:
+
+``metadata_urls``
+-----------------
+
+This list of URLs will be searched for an EC2 metadata service. The first
+entry that successfully returns a 200 response for
+``<url>/<version>/meta-data/instance-id`` will be selected.
+
+Default: ['http://169.254.169.254', 'http://[fd00:ec2::254]',
+'http://instance-data:8773'].
+
+``max_wait``
+------------
+
+The maximum amount of clock time in seconds that should be spent searching
+``metadata_urls``. A value less than zero will result in only one request
+being made, to the first in the list.
+
+Default: 120
+
+``timeout``
+-----------
+
+The timeout value provided to ``urlopen`` for each individual http request.
+This is used both when selecting a ``metadata_url`` and when crawling the
+metadata service.
+
+Default: 50
+
+``apply_full_imds_network_config``
+----------------------------------
+
+Boolean (default: True) to allow ``cloud-init`` to configure any secondary
+NICs and secondary IPs described by the metadata service. All network
+interfaces are configured with DHCP (v4) to obtain a primary IPv4 address and
+route. Interfaces which have a non-empty ``ipv6s`` list will also enable
+DHCPv6 to obtain a primary IPv6 address and route. The DHCP response (v4 and
+v6) return an IP that matches the first element of ``local-ipv4s`` and
+``ipv6s`` lists respectively. All additional values (secondary addresses) in
+the static IP lists will be added to the interface.
+
+An example configuration with the default values is provided below:
+
+.. code-block:: yaml
+
+ datasource:
+ Ec2:
+ metadata_urls: ["http://169.254.169.254:80", "http://instance-data:8773"]
+ max_wait: 120
+ timeout: 50
+ apply_full_imds_network_config: true
+
+Notes
+=====
+
+ * There are 2 types of EC2 instances, network-wise: Virtual Private
+ Cloud (VPC) ones and Classic ones (also known as non-VPC). One major
+ difference between them is that Classic instances have their MAC address
+ changed on stop/restart operations, so ``cloud-init`` will recreate the
+ network config file for EC2 Classic instances every boot. On VPC instances
+ this file is generated only on the first boot of the instance.
+ The check for the instance type is performed by ``is_classic_instance()``
+ method.
+
+ * For EC2 instances with multiple network interfaces (NICs) attached, DHCP4
+ will be enabled to obtain the primary private IPv4 address of those NICs.
+ Wherever DHCP4 or DHCP6 is enabled for a NIC, a DHCP route-metric will be
+ added with the value of ``<device-number + 1> * 100`` to ensure DHCP
+ routes on the primary NIC are preferred to any secondary NICs.
+ For example: the primary NIC will have a DHCP route-metric of 100,
+ the next NIC will have 200.
+
+.. _EC2 tags user guide: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS