Beispiel: AMI-Startindexwert - Amazon Elastic Compute Cloud

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Beispiel: AMI-Startindexwert

In diesem Beispiel wird gezeigt, wie Sie Ihre Instances mit Benutzerdaten und mit Instance-Metadaten konfigurieren können.

Anmerkung

In den Beispielen in diesem Abschnitt wird die IPv4-Adresse des IMDS verwendet: 169.254.169.254. Wenn Sie Zeit Instance-Metadaten für EC2-Instances über die IPv6-Adresse abrufen, stellen Sie sicher, dass Sie stattdessen die IPv6-Adresse verwenden: [fd00:ec2::254]. Die IPv6-Adresse des IMDS ist mit IMDSv2-Befehlen kompatibel. Auf die IPv6-Adresse kann nur auf Instances zugegriffen werden, die auf dem AWS Nitro-System basieren.

Alice möchte vier Instances ihres bevorzugten Datenbank-AMI starten; die erste soll dabei als Master-Instance fungieren, die übrigen drei als Replikate. Beim Start der Instances möchte sie Benutzerdaten für die Replikationsstrategien der einzelnen Replikate hinzufügen. Sie weiß, dass diese Daten in allen vier Instances verwendet werden, d. h. sie muss die Benutzerdaten so strukturieren, dass jede Instance erkennt, welcher Teile für sie gedacht ist. Dies kann mithilfe des Instance-Metadatenwerts ami-launch-index erreicht werden; dieser ist für jede Instance eindeutig. Wenn sie mehrere Instances gleichzeitig startet, gibt das ami-launch-index die Reihenfolge an, in der die Instances gestartet wurden. Der Wert für die zuerst gestartete Instance ist 0.

Hier sind die Benutzerdaten, die Alice erstellt hat.

replicate-every=1min | replicate-every=5min | replicate-every=10min

Die replicate-every=1min-Daten definieren die Konfiguration für das erste Replikat, replicate-every=5min definiert die Konfiguration für das zweite Replikat usw. Alice beschließt, diese Daten als ASCII-Zeichenfolge bereitzustellen; die Daten für die einzelnen Instances werden dabei durch ein Pipe-Symbol (|) voneinander getrennt.

Alice startet vier Instances mit dem Befehl run-instances unter Angabe der Benutzerdaten.

aws ec2 run-instances \ --image-id ami-0abcdef1234567890 \ --count 4 \ --instance-type t2.micro \ --user-data "replicate-every=1min | replicate-every=5min | replicate-every=10min"

Nach dem Start sind in jeder Instance eine Kopie der Benutzerdaten und die folgenden Metadaten vorhanden:

  • AMI-ID: ami-0abcdef1234567890

  • Reservation ID: r-1234567890abcabc0

  • Public keys: none

  • Security group name: default

  • Instance type: t2.micro

Für jede Instance sind aber auch bestimmte Metadaten vorhanden, die sich von denen der anderen unterscheiden.

Instance 1
Metadaten Value
instance-id i-1234567890abcdef0
ami-launch-index 0
public-hostname ec2-203-0-113-25.compute-1.amazonaws.com
public-ipv4 67.202.51.223
local-hostname ip-10-251-50-12.ec2.internal
local-ipv4 10.251.50.35
Instance 2
Metadaten Value
instance-id i-0598c7d356eba48d7
ami-launch-index 1
public-hostname ec2-67-202-51-224.compute-1.amazonaws.com
public-ipv4 67.202.51.224
local-hostname ip-10-251-50-36.ec2.internal
local-ipv4 10.251.50.36
Instance 3
Metadaten Value
instance-id i-0ee992212549ce0e7
ami-launch-index 2
public-hostname ec2-67-202-51-225.compute-1.amazonaws.com
public-ipv4 67.202.51.225
local-hostname ip-10-251-50-37.ec2.internal
local-ipv4 10.251.50.37
Instance 4
Metadaten Value
instance-id i-1234567890abcdef0
ami-launch-index 3
public-hostname ec2-67-202-51-226.compute-1.amazonaws.com
public-ipv4 67.202.51.226
local-hostname ip-10-251-50-38.ec2.internal
local-ipv4 10.251.50.38

Alice mit dem Wert unter ami-launch-index bestimmen, welcher Teil der Benutzerdaten für eine bestimmte Instance anzuwenden ist.

  1. Sie stellt eine Verbindung mit einer der Instances her und ruft den ami-launch-index für diese Instance ab, um sicherzustellen, dass es sich um eines der Replikate handelt:

    IMDSv2
    [ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/meta-data/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-launch-index 2

    Für die folgenden Schritte verwenden die IMDSv2-Anfragen das gespeicherte Token aus dem vorhergehenden IMDSv2-Befehl (vorausgesetzt, das Token ist nicht abgelaufen).

    IMDSv1
    [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/ami-launch-index 2
  2. Sie speichert das ami-launch-index als Variable.

    IMDSv2
    [ec2-user ~]$ ami_launch_index=`curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-launch-index`
    IMDSv1
    [ec2-user ~]$ ami_launch_index=`curl http://169.254.169.254/latest/meta-data/ami-launch-index`
  3. Sie speichert die Benutzerdaten als Variable.

    IMDSv2
    [ec2-user ~]$ user_data=`curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/user-data`
    IMDSv1
    [ec2-user ~]$ user_data=`curl http://169.254.169.254/latest/user-data`
  4. Schließlich verwendet Alice den Befehl cut, um den Teil der Benutzerdaten zu extrahieren, der für diese Instance gilt.

    IMDSv2
    [ec2-user ~]$ echo $user_data | cut -d"|" -f"$ami_launch_index" replicate-every=5min
    IMDSv1
    [ec2-user ~]$ echo $user_data | cut -d"|" -f"$ami_launch_index" replicate-every=5min