Wie erhalte ich die Instanz-ID aus einer ec2-Instanz?


Antworten:


534

Siehe die EC2-Dokumentation zu diesem Thema .

Lauf:

wget -q -O - http://169.254.169.254/latest/meta-data/instance-id

Wenn Sie innerhalb eines Skripts programmgesteuerten Zugriff auf die Instanz-ID benötigen,

die() { status=$1; shift; echo "FATAL: $*"; exit $status; }
EC2_INSTANCE_ID="`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id || die \"wget instance-id has failed: $?\"`"

Ein Beispiel für eine erweiterte Verwendung (Abrufen der Instanz-ID sowie der Verfügbarkeitszone und -region usw.):

EC2_INSTANCE_ID="`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id || die \"wget instance-id has failed: $?\"`"
test -n "$EC2_INSTANCE_ID" || die 'cannot obtain instance-id'
EC2_AVAIL_ZONE="`wget -q -O - http://169.254.169.254/latest/meta-data/placement/availability-zone || die \"wget availability-zone has failed: $?\"`"
test -n "$EC2_AVAIL_ZONE" || die 'cannot obtain availability-zone'
EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed -e 's:\([0-9][0-9]*\)[a-z]*\$:\\1:'`"

Sie können auch curlanstelle von verwenden wget, je nachdem, was auf Ihrer Plattform installiert ist.


@Leopd, Sie kennen sich offensichtlich besser aus als die Leute bei Amazon, die EC2 implementiert und die Dokumente geschrieben haben. Übrigens hindert Sie niemand daran, einen Alias ​​für 169.254.169.254in zu erstellen, /etc/hostswenn Sie sich dadurch sicherer fühlen, falls Sie sich darum kümmern sollten.
Vladr

2
Was ist mit dem Java SDK? Gibt es eine Möglichkeit, dies zu erreichen, ohne ein GET für diese URL durchführen zu müssen? Scheint seltsam, wenn es nicht im SDK ist
Kevin M

1
Sehr hilfreich, danke. Für andere, die versuchen, den regulären Ausdruck in der letzten Zeile herauszufinden, habe ich $Folgendes gefunden: Suchen Sie am Ende der Zeile ( ) eine oder mehrere Ziffern, gefolgt von einem oder mehreren Kleinbuchstaben. Ersetzen Sie nur durch die Ziffern. (Backslash + Klammern weisen sed an, sich an einen Teilstring zu erinnern, an den erinnert wird \1.) Ich fand dies etwas einfacher zu lesen - die einzigen Backslashes sind die von sed geforderten : EC2_REGION="$(echo "$EC2_AVAIL_ZONE" | sed -e 's:\([0-9][0-9]*\)[a-z]*$:\1:')".
Mark Berry

66
Sie können die magischen Zahlen beseitigen, indem Sie http://instance-data/anstelle von169.254.169.254
Jay P.

20
Ich habe dies am 04.02.2016 überprüft. Ich habe festgestellt, dass der Hostname "Instanzdaten" (a) in dieser Dokumentation nicht aufgeführt ist und (b) auf einem neuen EC2-Host (für mich) nicht funktioniert. In der Dokumentation - docs.aws.amazon.com/AWSEC2/latest/UserGuide/… - wird nur die Adresse 169.254 erwähnt und der Hostname "Instanzdaten" nicht erwähnt. dh verwenden Sie 169.254.169.254/latest/meta-data/instance-id
JDS

138

Auf Amazon Linux AMIs können Sie Folgendes tun:

$ ec2-metadata -i
instance-id: i-1234567890abcdef0

Oder unter Ubuntu und einigen anderen Linux-Varianten ec2metadata --instance-id(Dieser Befehl ist unter Ubuntu möglicherweise nicht standardmäßig installiert, aber Sie können ihn mit hinzufügen sudo apt-get install cloud-utils).

Wie der Name schon sagt, können Sie mit dem Befehl auch andere nützliche Metadaten abrufen.


3
Wenn Sie darüber nachdenken, diesen Artikel zu verwenden, ist dieser Artikel eine Lektüre wert (tldr: was Befehlszeilentools sind Java und Java hat eine lange Startzeit)
James

Die beste Antwort
Chuck Le Butt

@ Marc Nein. Nein -danach ec2. Es istec2metadata --instance-id
Dawny33

5
Der Befehl ist unter verschiedenen Linuxen unterschiedlich: Unter Amazon Linux ec2-metadatascheint es , unter Ubuntu scheint es zu sein ec2metadata.
James

Richtig James, ich habe festgestellt, dass die gleichen ec2metadata unter Ubuntu funktionieren.
PyAddict

69

Unter Ubuntu können Sie:

sudo apt-get install cloud-utils

Und dann können Sie:

EC2_INSTANCE_ID=$(ec2metadata --instance-id)

Sie können die meisten mit der Instanz verknüpften Metadaten folgendermaßen abrufen:

ec2metadata --help
Syntax: / usr / bin / ec2metadata [Optionen]

Abfragen und Anzeigen von EC2-Metadaten.

Wenn keine Optionen angegeben sind, werden alle Optionen angezeigt

Optionen:
    -h --help zeigt diese Hilfe

    --kernel-id zeigt die Kernel-ID an
    --ramdisk-id zeigt die Ramdisk-ID an
    --reservation-id zeigt die Reservierungs-ID an

    --ami-id zeigt die ami id an
    --ami-launch-index zeigt den ami-Startindex an
    --ami-manifest-path zeigt den ami-manifest-Pfad an
    --ancestor-ami-ids zeigen die ami-Vorfahren-ID an
    --Produktcodes zeigen die ami zugeordneten Produktcodes an
    --Verfügbarkeitszone Zeigt die Ami-Platzierungszone an

    --instance-id zeigt die Instanz-ID an
    --instance-type zeigt den Instanztyp an

    --local-hostname zeigt den lokalen Hostnamen an
    --public-hostname zeigt den öffentlichen Hostnamen an

    --local-ipv4 zeigt die lokale IPv4-IP-Adresse an
    --public-ipv4 zeigt die öffentliche IPv4-IP-Adresse an

    --block-device-Mapping zeigt die Block-Geräte-ID an
    --Sicherheitsgruppen zeigen die Sicherheitsgruppen an

    --mac zeigt die Mac-Adresse der Instanz an
    --profile zeigt das Instanzprofil an
    --instance-action zeigt die Instanzaktion an

    --public-keys zeigen die öffentlichen openssh-Schlüssel an
    --user-data zeigt die Benutzerdaten an (keine Metadaten)

Unter Ubuntu apt-get installruft lucid die Version 0.11-0ubuntu1 ab, die dieses Dienstprogramm nicht enthält. Es wurde dem Paket kurz danach hinzugefügt .
Aryeh Leib Taurog

7
Das Cloud-Utils-Paket ist standardmäßig in Ubuntu 12.04.1 LTS Cluster Compute AMI enthalten.
Andrew

2
Cloud-Utils scheinen auch in RHEL / CentOS zu sein
Craig Ringer

50

Verwenden Sie die /dynamic/instance-identity/documentURL, wenn Sie auch mehr als nur Ihre Instanz-ID abfragen müssen.

wget -q -O - http://169.254.169.254/latest/dynamic/instance-identity/document

Auf diese Weise erhalten Sie JSON- Daten wie diese - mit nur einer einzigen Anfrage .

{
    "devpayProductCodes" : null,
    "privateIp" : "10.1.2.3",
    "region" : "us-east-1",
    "kernelId" : "aki-12345678",
    "ramdiskId" : null,
    "availabilityZone" : "us-east-1a",
    "accountId" : "123456789abc",
    "version" : "2010-08-31",
    "instanceId" : "i-12345678",
    "billingProducts" : null,
    "architecture" : "x86_64",
    "imageId" : "ami-12345678",
    "pendingTime" : "2014-01-23T45:01:23Z",
    "instanceType" : "m1.small"
}

1
+1 für die
Anzeige

1
+1 für eine ziemlich standardmäßige (nur wget) und funktionierende Zeile (Instanzdaten-URL funktionierte bei mir unter Amazon Linux nicht), ohne zusätzliche Pakete nur für diese einfache Aufgabe zu installieren.
Tishma

27

Für .NETMenschen:

string instanceId = new StreamReader(
      HttpWebRequest.Create("http://169.254.169.254/latest/meta-data/instance-id")
      .GetResponse().GetResponseStream())
    .ReadToEnd();

24

unter AWS Linux:

ec2-metadata --instance-id | cut -d " " -f 2

Ausgabe:

i-33400429

Verwenden in Variablen:

ec2InstanceId=$(ec2-metadata --instance-id | cut -d " " -f 2);
ls "log/${ec2InstanceId}/";

Sauber und prägnant. Arbeiten für eine Instanz mit Ubuntu 14.
berbt

22

Für Powershell-Leute:

(New-Object System.Net.WebClient).DownloadString("http://169.254.169.254/latest/meta-data/instance-id")

4
nur ein anderes Kommando:$instanceId=(Invoke-WebRequest -Uri 'http://169.254.169.254/latest/meta-data/instance-id').Content
Sumit Murari

Invoke-WebRequest funktioniert nicht immer, wenn ein Skript auf dieser EC2-Instanz mit einem ssm-Sendebefehl (oder Send-SSMCommand) ausgeführt wird. Es steht nicht wirklich in den Dokumenten . Möglicherweise ist es nicht asynchron ... was seltsam wäre. Aber die Option von stefancaunter funktioniert bisher ohne Probleme.
J-Roel

22

Für Python:

import boto.utils
region=boto.utils.get_instance_metadata()['local-hostname'].split('.')[1]

was auf den Einzeiler hinausläuft:

python -c "import boto.utils; print boto.utils.get_instance_metadata()['local-hostname'].split('.')[1]"

Anstelle von local_hostname können Sie auch public_hostname verwenden oder:

boto.utils.get_instance_metadata()['placement']['availability-zone'][:-1]

In allen neueren Versionen von boto, die ich sehe, können Sie den Schlüssel "instance_id" direkt aufrufen. Ich habe die entsprechenden vorgeschlagenen Änderungen vorgenommen.
Saccharin

8
inst_id = boto.utils.get_instance_metadata () ['Instanz-ID']
Atisman

Sie erkennen, dass dadurch die Region abgerufen wird, in der sich die Instanz befindet, und nicht die Instanz-ID, nach der die Frage gestellt wurde, oder?
LukeGT

2
Für alle, die sich fragen, ist dies in Boto, aber noch nicht in Boto3. Eine Problemumgehung mit urllib finden Sie unter stackoverflow.com/a/33733852. Es gibt eine offene Feature-Anfrage unter github.com/boto/boto3/issues/313 FWIW. Das JS SDK hat auch Folgendes : docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/… Verwendungnew AWS.MetadataService().request('instance-id',function(error,data) { myInstanceId = data; })
Armadillo Jim

20

Für alle ec2-Maschinen befindet sich die Instanz-ID in der Datei:

    /var/lib/cloud/data/instance-id

Sie können die Instanz-ID auch abrufen, indem Sie den folgenden Befehl ausführen:

    ec2metadata --instance-id

2
Dies ist eine sehr saubere Lösung, für die keine HTTP-Anforderung erforderlich ist.
Yuri

Die bestmögliche Antwort
Shlublu

1
Tolle Antwort, aber ich konnte in der Dokumentation keine Referenz dafür finden. Darf ich fragen, was Ihre Referenz ist? Die Sorge ist, dass wenn wir diesen Code in der Produktion ausführen, woher wissen wir, dass er sich in Zukunft nicht ändern wird?
Shaya Ajzner

Vielleicht alle Linux- Ec2-Maschinen, aber definitiv nicht alle Ec2-Maschinen. Keine solche Datei unter Windows. C:\ProgramData\Amazon\EC2-Windows\Launch\Log\Ec2Launch.logenthält die Instanz-ID, hat aber auch eine Menge anderen Müll.
James

14

Siehe diesen Beitrag - beachten Sie, dass die IP-Adresse in der angegebenen URL konstant ist (was mich zunächst verwirrte), die zurückgegebenen Daten jedoch spezifisch für Ihre Instanz sind.


Link ist 404ing für mich
Repalviglator

Überprüfen Sie die Antwort von @ DEtDev unten; Meine Antwort ist ziemlich alt und es sieht so aus, als ob der Link entfernt wurde.
gareth_bowles

10

Für Ruby:

require 'rubygems'
require 'aws-sdk'
require 'net/http'

metadata_endpoint = 'http://169.254.169.254/latest/meta-data/'
instance_id = Net::HTTP.get( URI.parse( metadata_endpoint + 'instance-id' ) )

ec2 = AWS::EC2.new()
instance = ec2.instances[instance_id]

1
WTF Jungs?! Du hast meine Bearbeitung gestohlen! stackoverflow.com/review/suggested-edits/4035074
kixorz

3
Es tut uns leid. Ich wusste nicht, wie ich sagen soll "Es ist eine gute Bearbeitung. Ich bin der OP. Akzeptiere das".
Kevin Meyer

10

Eine zeitgemäßere Lösung.

Unter Amazon Linux ist der Befehl ec2-metadata bereits installiert.

Vom Terminal

ec2-metadata -help

Gibt Ihnen die verfügbaren Optionen

ec2-metadata -i

wird zurückkehren

instance-id: yourid

1
viel besser als abhängig von der Pseudo-IP
Mike D

Kombinieren Sie ec2-metadatamit Ihren motdDokumenten hier: coderwall.com/p/hr_9pw/motds-on-amazon-amis
Mike D

2
Im Ubuntu-Image lautet der Befehl "ec2metadata --instance-id" und gibt nur den Wert der Instanz-ID zurück
Alberto Megía


9

Sie können dies versuchen:

#!/bin/bash
aws_instance=$(wget -q -O- http://169.254.169.254/latest/meta-data/instance-id)
aws_region=$(wget -q -O- http://169.254.169.254/latest/meta-data/hostname)
aws_region=${aws_region#*.}
aws_region=${aws_region%%.*}
aws_zone=`ec2-describe-instances $aws_instance --region $aws_region`
aws_zone=`expr match "$aws_zone" ".*\($aws_region[a-z]\)"`

8

Eine c # .net-Klasse, die ich für EC2-Metadaten aus der http-API geschrieben habe. Ich werde es mit Funktionalität nach Bedarf aufbauen. Sie können damit laufen, wenn Sie es mögen.

using Amazon;
using System.Net;

namespace AT.AWS
{
    public static class HttpMetaDataAPI
    {
        public static bool TryGetPublicIP(out string publicIP)
        {
            return TryGetMetaData("public-ipv4", out publicIP);
        }
        public static bool TryGetPrivateIP(out string privateIP)
        {
            return TryGetMetaData("local-ipv4", out privateIP);
        }
        public static bool TryGetAvailabilityZone(out string availabilityZone)
        {
            return TryGetMetaData("placement/availability-zone", out availabilityZone);
        }

        /// <summary>
        /// Gets the url of a given AWS service, according to the name of the required service and the AWS Region that this machine is in
        /// </summary>
        /// <param name="serviceName">The service we are seeking (such as ec2, rds etc)</param>
        /// <remarks>Each AWS service has a different endpoint url for each region</remarks>
        /// <returns>True if the operation was succesful, otherwise false</returns>
        public static bool TryGetServiceEndpointUrl(string serviceName, out string serviceEndpointStringUrl)
        {
            // start by figuring out what region this instance is in.
            RegionEndpoint endpoint;
            if (TryGetRegionEndpoint(out endpoint))
            {
                // now that we know the region, we can get details about the requested service in that region
                var details = endpoint.GetEndpointForService(serviceName);
                serviceEndpointStringUrl = (details.HTTPS ? "https://" : "http://") + details.Hostname;
                return true;
            }
            // satisfy the compiler by assigning a value to serviceEndpointStringUrl
            serviceEndpointStringUrl = null;
            return false;
        }
        public static bool TryGetRegionEndpoint(out RegionEndpoint endpoint)
        {
            // we can get figure out the region end point from the availability zone
            // that this instance is in, so we start by getting the availability zone:
            string availabilityZone;
            if (TryGetAvailabilityZone(out availabilityZone))
            {
                // name of the availability zone is <nameOfRegionEndpoint>[a|b|c etc]
                // so just take the name of the availability zone and chop off the last letter
                var nameOfRegionEndpoint = availabilityZone.Substring(0, availabilityZone.Length - 1);
                endpoint = RegionEndpoint.GetBySystemName(nameOfRegionEndpoint);
                return true;
            }
            // satisfy the compiler by assigning a value to endpoint
            endpoint = RegionEndpoint.USWest2;
            return false;
        }
        /// <summary>
        /// Downloads instance metadata
        /// </summary>
        /// <returns>True if the operation was successful, false otherwise</returns>
        /// <remarks>The operation will be unsuccessful if the machine running this code is not an AWS EC2 machine.</remarks>
        static bool TryGetMetaData(string name, out string result)
        {
            result = null;
            try { result = new WebClient().DownloadString("http://169.254.169.254/latest/meta-data/" + name); return true; }
            catch { return false; }
        }

/************************************************************
 * MetaData keys.
 *   Use these keys to write more functions as you need them
 * **********************************************************
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
instance-action
instance-id
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
*************************************************************/
    }
}

7

Das neueste Java SDK hat EC2MetadataUtils :

In Java:

import com.amazonaws.util.EC2MetadataUtils;
String myId = EC2MetadataUtils.getInstanceId();

In Scala:

import com.amazonaws.util.EC2MetadataUtils
val myid = EC2MetadataUtils.getInstanceId

5

Für C ++ (mit cURL):

    #include <curl/curl.h>

    //// cURL to string
    size_t curl_to_str(void *contents, size_t size, size_t nmemb, void *userp) {
        ((std::string*)userp)->append((char*)contents, size * nmemb);
        return size * nmemb;
    };

    //// Read Instance-id 
    curl_global_init(CURL_GLOBAL_ALL); // Initialize cURL
    CURL *curl; // cURL handler
    CURLcode res_code; // Result
    string response;
    curl = curl_easy_init(); // Initialize handler
    curl_easy_setopt(curl, CURLOPT_URL, "http://169.254.169.254/latest/meta-data/instance-id");
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_to_str);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
    res_code = curl_easy_perform(curl); // Perform cURL
    if (res_code != CURLE_OK) { }; // Error
    curl_easy_cleanup(curl); // Cleanup handler
    curl_global_cleanup(); // Cleanup cURL

3

Überprüfen Sie einfach den var/lib/cloud/instanceSymlink, er sollte zeigen, /var/lib/cloud/instances/{instance-id}wo {instance_id}sich Ihre Instanz-ID befindet.


1
Ich würde das nicht benutzen. Verwenden Sie besser die genehmigte HTTP-Anforderung, um die Metadaten abzurufen.
Daisuke Aramaki

3

Wenn Sie die ID-Liste aller Instanzen in Python erhalten möchten, finden Sie hier den Code:

import boto3

ec2=boto3.client('ec2')
instance_information = ec2.describe_instances()

for reservation in instance_information['Reservations']:
   for instance in reservation['Instances']:
      print(instance['InstanceId'])

2

FWIW Ich habe ein FUSE-Dateisystem geschrieben, um den Zugriff auf den EC2-Metadatendienst zu ermöglichen: https://bitbucket.org/dgc/ec2mdfs . Ich führe dies auf allen benutzerdefinierten AMIs aus. es erlaubt mir, diese Redewendung zu verwenden: cat / ec2 / meta-data / ami-id


2

In Go können Sie das Goamz-Paket verwenden .

import (
    "github.com/mitchellh/goamz/aws"
    "log"
)

func getId() (id string) {
    idBytes, err := aws.GetMetaData("instance-id")
    if err != nil {
        log.Fatalf("Error getting instance-id: %v.", err)
    }

    id = string(idBytes)

    return id
}

Hier ist die GetMetaData-Quelle.


1

In der Frage, die Sie den Benutzer als root erwähnt haben, sollte ich erwähnen, dass die Instanz-ID nicht vom Benutzer abhängig ist.

Für Node- Entwickler

var meta  = new AWS.MetadataService();

meta.request("/latest/meta-data/instance-id", function(err, data){
    console.log(data);
});

1

Verwenden Sie zum Abrufen der Instanzmetadaten

wget -q -O - http://169.254.169.254/latest/meta-data/instance-id

0

Sie können einfach eine HTTP-Anforderung zum Abrufen von Metadaten stellen, indem Sie Ihre Metadatenparameter übergeben.

curl http://169.254.169.254/latest/meta-data/instance-id

oder

wget -q -O - http://169.254.169.254/latest/meta-data/instance-id

HTTP-Anforderungen zum Abrufen von Metadaten und Benutzerdaten werden Ihnen nicht in Rechnung gestellt.

Sonst

Sie können das Abfrage-Tool für EC2-Instanz-Metadaten verwenden, ein einfaches Bash-Skript, das mithilfe von Curl die Metadaten der EC2-Instanz aus einer laufenden EC2-Instanz abfragt, wie in der Dokumentation beschrieben.

Laden Sie das Tool herunter:

$ wget http://s3.amazonaws.com/ec2metadata/ec2-metadata

Führen Sie nun den Befehl aus, um die erforderlichen Daten abzurufen.

$ec2metadata -i

Verweisen:

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html

https://aws.amazon.com/items/1825?externalID=1825

Freue mich zu helfen.. :)


0

Alternativer Ansatz für PHP:

$instance = json_decode(file_get_contents('http://169.254.169.254/latest/dynamic/instance-identity/document'),true);
$id = $instance['instanceId'];
print_r($instance);

Dadurch werden viele Daten über die Instanz bereitgestellt, die alle gut in ein Array gepackt sind und keine externen Abhängigkeiten aufweisen. Da es sich um eine Anfrage handelt, die für mich nie fehlgeschlagen oder verzögert wurde, sollte es sicher sein, dies so zu tun, sonst würde ich mich für curl () entscheiden.


0

Für PHP:

$instance = json_decode(file_get_contents('http://169.254.169.254/latest/dynamic/instance-identity/document));
$id = $instance['instanceId'];

Bearbeiten per @John


Aber warum sollten Sie GuzzeHttp für diesen Zweck verwenden, wenn Sie Curl- und native Funktionen in PHP haben?
John

Es ist meine Präferenz. Ich benutze Guzzle für viele andere Dinge, es ist eine gemeinsame Voraussetzung für viele andere Pakete.
Beachhouse

$ instance = json_decode (file_get_contents (' 169.254.169.254/latest/dynamic/instance-identity/… ); $ id = $ instance [' instanceId ']; Ich weiß, dass Guzzle weit verbreitet ist, ich habe es selbst nie angefasst Eine einfache Aufgabe, die ich am leichtesten angehen würde.
John


0

Auf alle Metadaten, die sich auf die EC2-Ressource beziehen, kann die EC2-Instanz selbst mit Hilfe des folgenden ausgeführten Befehls zugreifen:

CURL:

http://169.254.169.254/<api-version>/meta-data/<metadata-requested>

Für Ihren Fall: " Metadaten angefordert " sollte Instanz-ID sein , " API-Version " ist normalerweise die neueste , die verwendet werden kann.

Zusätzlicher Hinweis: Mit dem obigen Befehl können Sie auch Informationen zu den folgenden EC2-Attributen abrufen.

Ami-ID, Ami-Start-Index, Ami-Manifest-Pfad, Block-Geräte-Mapping /, Hostname, iam /, Instanz-Aktion, Instanz-ID, Instanz-Typ, lokaler Hostname, lokaler IPv4, Mac, Metriken /, Netzwerk /, Platzierung /, Profil, öffentlicher Hostname, öffentliches IPv4, öffentliche Schlüssel /, Reservierungs-ID, Sicherheitsgruppen, Dienste /,

Weitere Informationen finden Sie unter folgendem Link: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html


0

Für eine Windows-Instanz:

(wget http://169.254.169.254/latest/meta-data/instance-id).Content

oder

(ConvertFrom-Json (wget http://169.254.169.254/latest/dynamic/instance-identity/document).Content).instanceId

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.