Benutzerdefinierte Bootstrap-Aktionen - AWS ParallelCluster

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.

Benutzerdefinierte Bootstrap-Aktionen

Wenn Sie die OnNodeStartKonfigurationseinstellungen HeadNode/CustomActions/definieren, AWS ParallelCluster führt unmittelbar nach dem Start des Knotens beliebigen Code aus. Wenn Sie die OnNodeConfiguredKonfigurationseinstellungen HeadNode/CustomActions/definieren, AWS ParallelCluster wird der Code ausgeführt, nachdem die Knotenkonfiguration korrekt abgeschlossen wurde.

Ab AWS ParallelCluster Version 3.4.0 kann der Code nach dem Update des Kopfknotens ausgeführt werden, wenn Sie die OnNodeUpdatedKonfigurationseinstellungen HeadNode/CustomActions/definieren.

In den meisten Fällen wird dieser Code in Amazon Simple Storage Service (Amazon S3) gespeichert und der Zugriff erfolgt über eine HTTPS-Verbindung. Der Code wird in jeder Skriptsprache ausgeführt, die vom Cluster-Betriebssystem unterstützt wird, root und kann in dieser Sprache sein. Oft ist der Code in Bash oder Python.

Anmerkung

Ab AWS ParallelCluster Version 3.7.0 lautet die ImdsSupportStandardeinstellung cluster Imds/. v2.0

Wenn Sie einen neuen Cluster für ein Upgrade auf Version 3.7.0 und spätere Versionen erstellen, aktualisieren Sie entweder Ihre benutzerdefinierten Bootstrap-Aktionsskripte, sodass sie mit IMDSv2 kompatibel sind, oder setzen Sie v1.0 in Ihrer ImdsCluster-Konfigurationsdatei ImdsSupportauf/.

Warnung

Sie sind für die Konfiguration der benutzerdefinierten Skripts und Argumente verantwortlich, wie im Modell der gemeinsamen Verantwortung beschrieben. Stellen Sie sicher, dass Ihre benutzerdefinierten Bootstrap-Skripts und Argumente aus Quellen stammen, denen Sie vertrauen, dass sie vollen Zugriff auf Ihre Clusterknoten haben.

Warnung

AWS ParallelClusterunterstützt nicht die Verwendung interner Variablen, die über die /etc/parallelcluster/cfnconfig Datei bereitgestellt werden. Diese Datei wird möglicherweise als Teil einer future Version entfernt.

OnNodeStartAktionen werden aufgerufen, bevor eine Bootstrap-Aktion zur Knotenbereitstellung gestartet wird, z. B. die Konfiguration von NAT, Amazon Elastic Block Store (Amazon EBS) oder des Schedulers. OnNodeStartBootstrap-Aktionen können das Ändern von Speicher, das Hinzufügen zusätzlicher Benutzer und das Hinzufügen von Paketen umfassen.

Anmerkung

Wenn Sie ein HeadNodeCustomActionsOnNodeStart//-Skript für Ihren Cluster konfigurieren DirectoryService, AWS ParallelCluster konfiguriert DirectoryService und startet das neusssd, bevor es das Skript ausführt. OnNodeStart

OnNodeConfiguredAktionen werden aufgerufen, nachdem die Bootstrap-Prozesse des Knotens abgeschlossen sind. OnNodeConfiguredAktionen dienen den letzten Aktionen, die ausgeführt werden, bevor eine Instanz als vollständig konfiguriert und abgeschlossen betrachtet wird. Einige OnNodeConfigured Aktionen umfassen das Ändern von Scheduler-Einstellungen, das Ändern des Speichers und das Ändern von Paketen. Sie können Argumente an Skripts übergeben, indem Sie sie bei der Konfiguration angeben.

OnNodeUpdatedAktionen werden aufgerufen, nachdem die Aktualisierung des Hauptknotens abgeschlossen ist und der Scheduler und der gemeinsam genutzte Speicher an die neuesten Änderungen der Cluster-Konfiguration angepasst wurden.

Wenn OnNodeStart unsere OnNodeConfigured benutzerdefinierten Aktionen erfolgreich sind, wird der Erfolg mit dem Exit-Code Null (0) angezeigt. Jeder andere Exit-Code weist darauf hin, dass der Instanz-Bootstrap fehlgeschlagen ist.

Wenn OnNodeUpdated benutzerdefinierte Aktionen erfolgreich sind, wird der Erfolg mit dem Exit-Code Null (0) signalisiert. Jeder andere Exit-Code weist darauf hin, dass das Update fehlgeschlagen ist.

Anmerkung

Wenn Sie die Konfiguration OnNodeUpdatedvornehmen, müssen Sie die OnNodeUpdated Aktionen bei fehlgeschlagenen Updates manuell auf den vorherigen Status zurücksetzen.

Wenn eine OnNodeUpdated benutzerdefinierte Aktion fehlschlägt, wird das Update auf den vorherigen Status zurückgesetzt. Die OnNodeUpdated Aktion wird jedoch nur zur Aktualisierungszeit und nicht zur Stack-Rollback-Zeit ausgeführt.

In den CustomActionsKonfigurationsabschnitten/und HeadNode//können Sie unterschiedliche Skripten für den Hauptknoten CustomActionsund Schedulingfür jede Warteschlange angeben. SlurmQueues OnNodeUpdatedkann nur im HeadNode Abschnitt konfiguriert werden.

Anmerkung

Vor AWS ParallelCluster Version 3.0 war es nicht möglich, unterschiedliche Skripte für Head- und Compute-Knoten anzugeben. Weitere Informationen finden Sie unter Umstellung von AWS ParallelCluster 2.x auf 3.x.

Konfiguration

Die folgenden Konfigurationseinstellungen werden verwendet, um HeadNode/CustomActions/OnNodeStart& OnNodeConfigured& OnNodeUpdatedund Scheduling/CustomActions/OnNodeStart& OnNodeConfiguredAktionen und Argumente zu definieren.

HeadNode: [...] CustomActions: OnNodeStart: # Script URL. This is run before any of the bootstrap scripts are run Script: s3://bucket-name/on-node-start.sh Args: - arg1 OnNodeConfigured: # Script URL. This is run after all the bootstrap scripts are run Script: s3://bucket-name/on-node-configured.sh Args: - arg1 OnNodeUpdated: # Script URL. This is run after the head node update is completed. Script: s3://bucket-name/on-node-updated.sh Args: - arg1 # Bucket permissions Iam: S3Access: - BucketName: bucket_name EnableWriteAccess: false Scheduling: Scheduler: slurm [...] SlurmQueues: - Name: queue1 [...] CustomActions: OnNodeStart: Script: s3://bucket-name/on-node-start.sh Args: - arg1 OnNodeConfigured: Script: s3://bucket-name/on-node-configured.sh Args: - arg1 Iam: S3Access: - BucketName: bucket_name EnableWriteAccess: false

Verwenden der Sequence Einstellung (in AWS ParallelCluster Version 3.6.0 hinzugefügt):

HeadNode: [...] CustomActions: OnNodeStart: # Script URLs. The scripts are run in the same order as listed in the configuration, before any of the bootstrap scripts are run. Sequence: - Script: s3://bucket-name/on-node-start1.sh Args: - arg1 - Script: s3://bucket-name/on-node-start2.sh Args: - arg1 [...] OnNodeConfigured: # Script URLs. The scripts are run in the same order as listed in the configuration, after all the bootstrap scripts are run. Sequence: - Script: s3://bucket-name/on-node-configured1.sh Args: - arg1 - Script: s3://bucket-name/on-node-configured2.sh Args: - arg1 [...] OnNodeUpdated: # Script URLs. The scripts are run in the same order as listed in the configuration, after the head node update is completed. Sequence: - Script: s3://bucket-name/on-node-updated1.sh Args: - arg1 - Script: s3://bucket-name/on-node-updated2.sh Args: - arg1 [...] # Bucket permissions Iam: S3Access: - BucketName: bucket_name EnableWriteAccess: false Scheduling: Scheduler: slurm [...] SlurmQueues: - Name: queue1 [...] CustomActions: OnNodeStart: # Script URLs. The scripts are run in the same order as listed in the configuration, before any of the bootstrap scripts are run Sequence: - Script: s3://bucket-name/on-node-start1.sh Args: - arg1 - Script: s3://bucket-name/on-node-start2.sh Args: - arg1 [...] OnNodeConfigured: # Script URLs. The scripts are run in the same order as listed in the configuration, after all the bootstrap scripts are run Sequence: - Script: s3://bucket-name/on-node-configured1.sh Args: - arg1 - Script: s3://bucket-name/on-node-configured2.sh Args: - arg1 [...] Iam: S3Access: - BucketName: bucket_name EnableWriteAccess: false

Die Sequence Einstellung wird ab AWS ParallelCluster Version 3.6.0 hinzugefügt. Wenn Sie angebenSequence, können Sie mehrere Skripts für eine benutzerdefinierte Aktion auflisten. AWS ParallelClusterunterstützt weiterhin die Konfiguration einer benutzerdefinierten Aktion mit einem einzigen Skript, ohne dies einzuschließenSequence.

AWS ParallelClusterunterstützt nicht, sowohl ein einzelnes Skript als auch Sequence dieselbe benutzerdefinierte Aktion einzubeziehen. Schlägt beispielsweise AWS ParallelCluster fehl, wenn Sie die folgende Konfiguration angeben.

[...] CustomActions: OnNodeStart: # Script URL. This is run before any of the bootstrap scripts are run Script: s3://bucket-name/on-node-start.sh Args: - arg1 # Script URLs. The scripts are run in the same order as listed in the configuration, before any of the bootstrap scripts are run. Sequence: - Script: s3://bucket-name/on-node-start1.sh Args: - arg1 - Script: s3://bucket-name/on-node-start2.sh Args: - arg1 [...]

Argumente

Anmerkung

In AWS ParallelCluster 2.x waren die $1 Argumente reserviert, um die URL des benutzerdefinierten Skripts zu speichern. Wenn Sie die für AWS ParallelCluster 2.x erstellten benutzerdefinierten Bootstrap-Skripte mit AWS ParallelCluster 3.x wiederverwenden möchten, müssen Sie sie anpassen, indem Sie die Verschiebung der Argumente berücksichtigen. Weitere Informationen finden Sie unter Umstellung von AWS ParallelCluster 2.x auf 3.x.

Beispielcluster mit benutzerdefinierten Bootstrap-Aktionen

Mit den folgenden Schritten wird ein einfaches Skript erstellt, das nach der Konfiguration des Knotens ausgeführt wird und das die wget Pakete R, curl und in den Knoten des Clusters installiert.

  1. Erstellen Sie ein Skript.

    #!/bin/bash echo "The script has $# arguments" for arg in "$@" do echo "arg: ${arg}" done yum -y install "${@:1}"
  2. Laden Sie das Skript mit den richtigen Berechtigungen auf Amazon S3 hoch. Wenn öffentliche Leseberechtigungen für Sie nicht geeignet sind, verwenden HeadNodeSie die SlurmQueuesKonfigurationsabschnitte Scheduling//S3Accessund/. Iam Weitere Informationen finden Sie unter Arbeiten mit Amazon S3.

    $ aws s3 cp --acl public-read /path/to/myscript.sh s3://<bucket-name>/myscript.sh
    Wichtig

    Wenn das Skript unter Windows bearbeitet wurde, müssen die Zeilenenden von CRLF in LF geändert werden, bevor das Skript auf Amazon S3 hochgeladen wird.

  3. Aktualisieren Sie die AWS ParallelCluster Konfiguration, sodass sie die neue OnNodeConfigured Aktion enthält.

    CustomActions: OnNodeConfigured: Script: https://<bucket-name>.s3.<region>.amazonaws.com/myscript.sh Args: - "R" - "curl" - "wget"

    Wenn der Bucket nicht öffentlich lesbar ist, verwenden Sie ihn s3 als URL-Protokoll.

    CustomActions: OnNodeConfigured: Script: s3://<bucket-name>/myscript.sh Args: - "R" - "curl" - "wget"
  4. Starten Sie den Cluster.

    $ pcluster create-cluster --cluster-name mycluster \ --region <region> --cluster-configuration config-file.yaml
  5. Überprüfen Sie die Ausgabe.

    • Wenn Sie der HeadNode Konfiguration benutzerdefinierte Aktionen hinzugefügt haben, melden Sie sich beim Hauptknoten an und überprüfen Sie die cfn-init.log Datei unter, /var/log/cfn-init.log indem Sie den folgenden Befehl ausführen:

      $ less /var/log/cfn-init.log 2021-09-03 10:43:54,588 [DEBUG] Command run postinstall output: The script has 3 arguments arg: R arg: curl arg: wget Loaded plugins: dkms-build-requires, priorities, update-motd, upgrade-helper Package R-3.4.1-1.52.amzn1.x86_64 already installed and latest version Package curl-7.61.1-7.91.amzn1.x86_64 already installed and latest version Package wget-1.18-4.29.amzn1.x86_64 already installed and latest version Nothing to do
    • Wenn Sie der SlurmQueues Einstellung benutzerdefinierte Aktionen hinzugefügt haben, überprüfen Sie die Option, die sich /var/log/cloud-init.log in einem Rechenknoten cloud-init.log befindet. CloudWatch Dient zum Anzeigen dieser Protokolle.

    Sie können diese beiden Protokolle in der CloudWatch Amazon-Konsole einsehen. Weitere Informationen finden Sie unter Integration mit Amazon CloudWatch Logs.

Beispiel für die Aktualisierung eines benutzerdefinierten Bootstrap-Skripts für IMDSv2

Im folgenden Beispiel aktualisieren wir ein benutzerdefiniertes Bootstrap-Aktionsskript, das mit IMDSv1 für die Verwendung mit IMDSv2 verwendet wurde. Das IMDSv1-Skript ruft AMI-ID-Metadaten der EC2-Instanz ab.

#!/bin/bash AMI_ID=$(curl http://169.254.169.254/latest/meta-data/ami-id) echo $AMI_ID >> /home/ami_id.txt

Im Folgenden wird das benutzerdefinierte Bootstrap-Aktionsskript gezeigt, das so geändert wurde, dass es mit IMDSv2 kompatibel ist.

#!/bin/bash AMI_ID=$(TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/ami-id) echo $AMI_ID >> /home/ami_id.txt

Weitere Informationen finden Sie unter Instance-Metadaten abrufen im EC2-Benutzerhandbuch für Linux-Instances.

Beispiel für die Aktualisierung einer Konfiguration für IMDSv1

Im Folgenden finden Sie ein Beispiel für eine Clusterkonfiguration, die IMDSv1 unterstützt, wenn AWS ParallelCluster Versionen 3.7.0 und älter verwendet werden.

Region: us-east-1 Imds: ImdsSupport: v1.0 Image: Os: alinux2 HeadNode: InstanceType: t2.micro Networking: SubnetId: subnet-abcdef01234567890 Ssh KeyName: key-name CustomActions: OnNodeConfigured: Script: Script-path Scheduling: Scheduler: slurm SlurmQueues: - Name: queue1 CustomActions: OnNodeConfigured: Script: Script-path ComputeResources: - Name: t2micro Instances: - InstanceType: t2.micro MinCount: 11 Networking: SubnetIds: - subnet-abcdef01234567890