2012-03-30 4 views
3

Ich möchte gerne ein Tag einfügen, wenn ich eine Spot-Anfrage über PHP mache. Bei On-Demand-Instanzen erstellen, können Sie die Instanz erstellen, verwenden Sie dann Instanz es ist folgendes heraus:AWS EC2 Spot Instance PHP Tag bei der Spot-Anfrage hinzufügen

$ec2->create_tags($instance_id, array(
     array('Key' => 'Name', 'Value' => 'MyTestMachine'), 
    )); 

Wenn jedoch eine Stelle Gebot Ausgabe, wird die Instanz nicht sofort gestartet, so würden Sie müssen ein Watcher-Tag erstellen, um damit umzugehen ... es sei denn, Sie können ein Tag in der Anfrage-Phase hinzufügen. Ich habe keine Dokumentation gefunden, um zu zeigen, wie das aussehen würde. Gibt es sie?

Antwort

3

Die Antwort ist, dass Sie ein Tag nicht zuweisen können, bis die Instanz tatsächlich erstellt wird. Um dies zu markieren, habe ich einen Listener-Daemon verwendet, um neue Instanzen zu beobachten und sie zu markieren, sobald sie gestartet wurden.

+0

Wie haben Sie den Listener Daemon erstellt? –

1

Für zukünftige Menschen für eine Lösung dieses Problems ohne Zuhörer suchen:

Sie auch die Instanz-Tag selbst haben könnte, sobald seine erstellt, durch einen Tag Anfrage an die CLI in der Anwenderdaten einschließlich. Dies wird auf der EC2-Instanz als Skript beim Booten für viele der EC2-Standard-AMIs ausgeführt (in denen auch die CLI standardmäßig installiert ist).

Um das zu tun (eine Aktie Bild verwenden):

  1. Eine IAM Rolle mit Erlaubnis Tags auf EC2 zu erstellen.
  2. Geben Sie in Ihrer Spot-Instanzanforderung die Rolle an.
  3. In Ihrer Spot-Instanz Anfrage Benutzerdaten, enthalten die CLI-Befehl create tags (für Linux - Sie könnten auch das Äquivalent mit Powershell, wenn Sie Windows verwenden). Sie werden sehen, dass es ein Inline-Befehl ist die Instanz-ID aus der EC2-Metadaten-Service zu erhalten:

    #!/bin/bash 
    aws ec2 create-tags --resources `wget -q -O - http://169.254.169.254/latest/meta-data/instance-id` --tags Key=somekey1,Value=somevalue1 Key=somekey2,Value=somevalue2 
    

Sie müssen die Benutzer-Daten wie oben base64 Eknoten, wenn Sie die verwenden CLI oder ein SDK, um die Spot-Anfrage zu machen. Die AWS-Webkonsole kann dies für Sie tun, sonst können Sie die Benutzerdaten übergeben, wie folgt:

user="$(cat /scripts/userdata.sh | base64 -w 0)" 

aws ec2 request-spot-instances \"UserData\": \"$user\",\"InstanceType\": \"m1.small\"}" 

Das ist es!

Verwandte Themen