web-dev-qa-db-de.com

So definieren Sie die Größe des Stammvolumes in AWS-Stapel

Ich verwende AWS Batch und fand die Größe des Stammvolumes für meine Aufgabe zu niedrig.

Ich habe versucht, eine neue Computerumgebung/Jobwarteschlange zu erstellen, aber es gibt keine Option zum Festlegen der Volume-Größe. Ich habe versucht, die Startkonfiguration von hier zu ändern, aber die neue Startkonfiguration und/oder die Autoskalierungsgruppe werden von AWS Batch nicht berücksichtigt. Ich muss wahrscheinlich dm.basesize ändern, aber es ist unklar, wo dies geschehen soll.

Also habe ich ein benutzerdefiniertes AMI von Amazon 2 Linux mit 500 GB Speicherplatz eingerichtet und den --storage-opt mit dm.basesize=400GB wie angegeben geändert - hier aber obwohl meine Instanzen erzeugt werden, bleiben die Jobs unbegrenzt im RUNNABLE-Status. Ich überprüfte die möglichen Ursachen wie hier , aber i) "Automatische IPv4-Adresse für automatische Zuordnung aktivieren" ist markiert, ii) das Image sollte gut sein (es wurde beim Erstellen der Umgebung überprüft und kann erstellt werden) , iii) Ich habe ein Limit von 5 Instanzen für einen solchen Instanztyp (aber ich kann nicht einmal 1 ausführen), iv) meine Rollenberechtigungen sollten in Ordnung sein - ich habe dieselben Rollen mit einem Standard-Amazon-Image erfolgreich verwendet, v) nicht genügend Ressourcen (Die Instanz wird gestartet, also denke ich, dass dies nicht das Problem sein sollte), vi) Konnektivität - es sollte funktionieren, da die Autoskalierungsgruppe einen erfolgreichen Status anzeigt.

Eine mögliche Lösung könnte darin bestehen, ein bestimmtes AWS-Volume zur Laufzeit anzuschließen, aber es wäre begrenzt und ich würde gerne eine automatische Lösung finden, da ich stattdessen mehrere Volumes für die parallele Ausführung verwalten müsste.

Ich habe auch versucht, die Aufgabe auszuführen, indem ich die Eingabe von einem S3-Bucket leitete, die Daten analysiert und die Ausgabe an einen zweiten S3-Bucket weiterleitete, aber ich bekomme Connection Reset by Peer Error jedes Mal, wahrscheinlich weil die Task zu lang läuft (I Setze auch --cli-read-timeout auf 0, aber das wird überhaupt nicht behoben.

Gibt es eine Möglichkeit, die Root-Volume-Größe für Jobs in AWS Batch zu konfigurieren?

6
gc5

Die empfohlene Lösung ist die Verwendung einer nicht verwalteten Rechenumgebung. Leider wurde dies zu einem schlechten Ratschlag, da nicht nur die Erstellung einer eigenen, nicht verwalteten Rechenumgebung schwierig und esoterisch ist, sondern dass dadurch nicht nur der gesamte Zweck der AWS-Stapelverarbeitung besiegt wird, sondern es gibt auch eine viel bessere (und viel einfachere) Lösung.

Die Lösung für dieses Problem besteht darin, ein Amazon Machine Image zu erstellen, das von der Standard-AMI abgeleitet ist, die AWS Batch verwendet. Mit einem AMI können Sie ein Betriebssystem genau nach Ihren Wünschen konfigurieren, indem Sie Bibliotheken installieren, Startskripts ändern, Konfigurationsdateien anpassen und, was am wichtigsten ist, für unsere Zwecke: Definieren Sie die logischen Partitionierungs- und Bereitstellungspunkte von Datenvolumes.

1. Wählen Sie ein Basis-AMI aus, von dem aus gestartet werden soll, konfigurieren Sie Ihre Instanz

Die AMIs, auf die wir uns stützen wollen, sind die offiziellen ECS-optimierten AMIs. Schauen Sie sich diese Seite an /, um herauszufinden, welches AMI Sie für die AWS-Region benötigen, in der Sie laufen.

Nachdem Sie Ihre AMI identifiziert haben, klicken Sie in der rechten Spalte auf den Link "Instanz starten". Sie werden zu dieser Seite weitergeleitet:

 enter image description here

Wählen Sie den Instanztyp t2.micro.

Wählen Sie Next: Configuration Details.

Geben Sie Ihrer Instanz auf Wunsch eine geeignete IAM-Rolle. Was als "angemessen" gilt, liegt in Ihrem Ermessen. Behalten Sie den Rest der Standardoptionen bei. Klicken Sie auf Next: Add Storage.

Jetzt können Sie konfigurieren, wie Ihre Datenmengen auf Ihrem AMI aussehen werden. In diesem Schritt wird auch nicht die endgültige Volume-Konfiguration für Ihre AMI definiert. Ich finde es jedoch nützlich, diese Konfiguration nach Ihren Wünschen zu konfigurieren. Sie haben die Möglichkeit, dies später zu ändern, bevor Sie Ihr AMI erstellen. Wenn Sie fertig sind, klicken Sie auf Next: Add Tags.

Fügen Sie beliebige Tags hinzu (optional). Klicken Sie auf Next: Configure Security Group.

Wählen Sie SSH für Type und legen Sie als Quelle Anywhere fest. Wenn Sie mehr als ich verantwortlich sind, legen Sie einen bestimmten Satz von IP-Bereichen fest, von denen Sie wissen, dass Sie eine Verbindung zu Ihrer Instanz herstellen. Klicken Sie auf Review and Launch.

Auf dieser Seite können Sie die von Ihnen festgelegten Optionen überprüfen. Wenn alles gut aussieht, dann Launch. Wenn Sie nach einem Schlüsselpaar gefragt werden, wählen Sie entweder ein bereits erstelltes Schlüsselpaar aus oder erstellen Sie ein neues. Wenn Sie diesen Schritt nicht ausführen, können Sie keine Verbindung zu Ihrer Instanz herstellen.

2. Konfigurieren Sie Ihre Softwareumgebung

Nachdem Sie auf Start geklickt haben, wechseln Sie zu Ihrem EC2-Dashboard, um Ihre laufenden Instanzen anzuzeigen:

 enter image description here

Warten Sie, bis Ihre Instanz gestartet ist, und klicken Sie mit der rechten Maustaste darauf. Klicken Sie auf Connect und fügen Sie den Befehl Beispiel ssh in ein ssh-fähiges Terminal ein. -i "keyname.pem" ist eigentlich ein Pfad zu Ihrer .pem-Datei. Stellen Sie daher sicher, dass Sie entweder cd in Ihr ~/.ssh-Verzeichnis eingeben oder den Wert des Flags in den Pfad zum Speicherort Ihres privaten SSH-Schlüssels ändern. Möglicherweise müssen Sie auch „root“ in „ec2-user“ ändern.

 enter image description here

Nachdem Sie sich angemeldet haben, können Sie Ihr VM wie gewünscht konfigurieren, indem Sie alle Pakete, Bibliotheken und Konfigurationen installieren, die Sie für Ihr VM benötigen. Wenn Sie die von AWS bereitgestellte ECS-optimierte AMI verwendet haben, erfüllt Ihre AMI bereits die Basisanforderungen für eine ECS-AMI. Wenn Sie aus einem (merkwürdigen) Grund die ECS-optimierte AMI nicht verwenden, müssen Sie die folgenden Pakete installieren und konfigurieren:

  1. Die neueste Version des Amazon ECS-Containeragenten
  2. Die neueste Version des ecs-init-Agenten
  3. Die empfohlene Version von Docker für Ihre Version des ECS-Containeragenten.

Beachten Sie auch, dass Sie die /etc/fstab-Datei ändern möchten, wenn Sie ein anderes Volume als Ihr Root-Volume anhängen möchten, damit das neue Volume beim Start der Instanz gemountet wird. Ich verweise Sie an Google, wie Sie dies tun können.

3. Speichern Sie Ihre AMI

Nachdem Sie Ihre Softwarekonfiguration und -installation abgeschlossen haben, kehren Sie zu Ihrem EC2-Dashboard zurück und sehen Sie Ihre laufenden Instanzen.

Klicken Sie mit der rechten Maustaste auf die gerade erstellte Instanz. Bewegen Sie den Mauszeiger über Image und wählen Sie Create Image aus.

 enter image description here

Wie Sie sehen, hat dies die Volumenkonfiguration, die Sie in Schritt 1 ausgewählt haben. Ich habe meine Volumes nicht in ihren Standardeinstellungen geändert. In der Abbildung oben sehen Sie, dass die Default-Volumes für die ECS-optimierte AMI tatsächlich 8 GB sind /dev/xvda/ (root) und 22 GB für /dev/xvdc/ (Docker-Images usw.). Stellen Sie sicher, dass die Delete on Termination-Optionen ausgewählt sind, sodass Ihre Batch-Berechnungsumgebung die Volumes entfernt, nachdem die Instanzen beendet wurden. Andernfalls besteht die Gefahr, dass eine unbegrenzte Anzahl von EBS-Volumes erstellt wird (dies ist sehr teuer, wurde mir gesagt). Ich werde mein AMI so konfigurieren, dass es nur 111 GB Root-Speicher hat, und sonst nichts. Sie benötigen nicht unbedingt ein separates Volume für Docker.

Geben Sie Ihrem Bild einen Namen und eine Beschreibung, und wählen Sie dann Create Image aus.

Ihre Instanz wird neu gestartet. Sobald die Instanz deaktiviert ist, erstellt AWS ein Image davon und aktiviert die Instanz wieder.

Wechseln Sie in Ihrer EC2-Konsole zu Images, AMIs auf der linken Seite. Nach einigen Minuten sollte Ihr neu erstelltes AMI in der Liste angezeigt werden.

 enter image description here

4. Konfigurieren Sie AWS Batch für die Verwendung Ihrer neuen AMI

Gehen Sie zurück zu Ihrem AWS-Dashboard und navigieren Sie zur AWS Batch-Seite. Wählen Sie auf der linken Seite Compute environments aus. Wählen Sie Create environment.

 enter image description here

Konfigurieren Sie Ihre Umgebung, indem Sie die entsprechenden IAM-Rollen für Ihre Container- (Service-Rolle) und EC2-Instanz (Instanzrolle), das Bereitstellungsmodell, das Netzwerk und die Tags auswählen.

Option                             Value

Compute environment type          Managed
Compute environment name          AMI_test
Service role                      AWSBatchServiceRole
Instance role                     ecsInstanceRole
EC2 key pair                      landonkey.pem (use name of your private key)
Provisioning model                On-Demand (choose spot for significantly cheaper provisioning)
Allowed instance types            Optimal
Minimum vCPUs                     0
Desired vCPUs                     0
Maximum vCPUs                     256
Enable user-specified AMI ID      True
AMI ID                            [ID of AMI you generated]
VPC id                            [default value]
Subnets                           [select all options]
Security groups                   default

Der entscheidende Schritt hierfür ist die Auswahl von Enable user-specified AMI ID und die Angabe der AMI-ID, die Sie in den vorherigen Schritten erstellt haben.

Wenn alle Optionen konfiguriert sind, wählen Sie Create aus.

5. Jobwarteschlangen und Jobdefinitionen erstellen

Um zu testen, ob unsere Computerumgebung tatsächlich funktioniert, erstellen wir einige einfache Warteschlangen und Jobdefinitionen.

Wählen Sie auf der linken Seite Job queues aus und geben Sie die folgenden Optionen ein:

Option                                  Value

Queue name                            AMI_test_queue
Priority                              1
Enable Job queue                      True
Select a compute environment          AMI_test

Wählen Sie Create. Warten Sie, bis der Status in Ihrer neuen Warteschlange VALID ist.

Gehen Sie zu Job definitions und wählen Sie Create aus. Geben Sie die folgenden Werte ein:

Option                           Value

Job definition name            AMI_test_job_def
Job role                       ECS_Administrator
Container image                amazonlinux
Command                        df -h
vCPUs                          1
Memory (MiB)                   1000
Job attempts                   1
Execution timeout              100
Parameters                     [leave blank]
Environment variables          [leave blank]
Volumes                        [leave blank]
Mount points                   [leave blank]

Wählen Sie Create job definition.

Gehen Sie schließlich zu Jobs auf der linken Seite und wählen Sie Submit job. Geben Sie Ihrem Job einen Namen und wählen Sie den AMI_test_job_def:1 für die Jobdefinition aus. Übernehmen Sie den Rest der Standardwerte und wählen Sie Submit job.

Wenn alles gut geht, sollten Sie jetzt sehen, dass Ihr Job entweder die Pending- oder Runnable-Zustände eingegeben hat. Beachten Sie, dass es bis zu 10 Minuten dauern kann, bis der Job tatsächlich ausgeführt wird. Die Instanz der EC2-Instanz dauert normalerweise 5 bis 10 Minuten, und die Statusüberprüfung wird noch einige Minuten durchlaufen. Wenn sich Ihr Job weiterhin im Status Runnable befindet, nachdem die Instanz erstellt wurde und alle Statusprüfungen bestanden haben. Etwas ist schief gelaufen.

 enter image description here

1
Kousic

Sie können jetzt auch Startvorlagen verwenden. Erhöhen Sie in der Startvorlage die Größe des Stammvolumes. Mounten Sie dann aus der Jobdefinition das lokale Dateisystem, z.

0
Bekzot Asimov