Exécuter des commandes à grande échelle - AWS Systems Manager

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Exécuter des commandes à grande échelle

Vous pouvez utiliser Run Command, un outil d’AWS Systems Manager, pour exécuter des commandes sur une flotte de nœuds gérés à l’aide des targets. Le paramètre targets accepte une combinaison Key,Value basée sur les balises que vous avez spécifiées pour vos nœuds gérés. Lorsque vous exécutez la commande, le système recherche les fichiers et tente d'exécuter la commande sur tous les nœuds gérés qui correspondent aux balises spécifiées. Pour plus d'informations sur le balisage des instances gérées, veuillez consulter la rubrique Balisage de vos ressources AWS dans le Guide de l'utilisateur du balisage des ressources AWS. Pour plus d'informations sur le balisage des appareils IoT gérés, consultez.Baliser vos ressources AWS IoT Greengrass Version 2 dans le Guide du développeur AWS IoT Greengrass Version 2.

Vous pouvez aussi utiliser le paramètre targets pour cibler une liste d'ID de nœud géré spécifiques, tel que décrit dans la section suivante.

Pour contrôler l'exécution d'une commande sur des centaines de milliers de nœuds gérés, la fonctionnalité Run Command inclut également des paramètres pour limiter le nombre de nœuds gérés pouvant traiter simultanément une demande et le nombre d'erreurs pouvant être émises par une commande avant que la commande ne prenne fin.

Ciblage de plusieurs nœuds gérés

Vous pouvez exécuter une commande et cibler des nœuds gérés en spécifiant des balises, des noms de groupes de ressources AWS ou des ID de nœud géré.

Les exemples suivants montrent le format de commande lorsque vous utilisez Run Command depuis la AWS Command Line Interface (AWS CLI). Remplacez chaque example resource placeholder (espace réservé pour les ressources) avec vos propres informations. Les exemples de commandes de cette section sont tronqués à l'aide de [...].

Exemple 1 : ciblage de balises

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:tag-name,Values=tag-value \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:tag-name,Values=tag-value ^ [...]

Exemple 2 : ciblage d'un groupe de ressources AWS par nom

Vous pouvez spécifier au maximum un nom de groupe de ressources par commande. Lorsque vous créez un groupe de ressources, nous vous recommandons d'inclure AWS::SSM:ManagedInstance et AWS::EC2::Instance comme types de ressource dans vos critères de regroupement.

Note

Pour pouvoir envoyer des commandes qui ciblent un groupe de ressources, vous devez avoir reçu des autorisations AWS Identity and Access Management (IAM) pour répertorier, ou afficher, les ressources qui appartiennent à ce groupe. Pour plus d'informations, consultez Configuration d'autorisations dans le Guide de l'utilisateur AWS Resource Groups.

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=resource-groups:Name,Values=resource-group-name \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=resource-groups:Name,Values=resource-group-name ^ [...]

Exemple 3 : ciblage d'un groupe de ressources AWS par type de ressource

Vous pouvez spécifier au maximum cinq types de groupe de ressources par commande. Lorsque vous créez un groupe de ressources, nous vous recommandons d'inclure AWS::SSM:ManagedInstance et AWS::EC2::Instance comme types de ressource dans vos critères de regroupement.

Note

Pour pouvoir envoyer des commandes qui ciblent un groupe de ressources, vous devez avoir reçu des autorisations IAM pour répertorier, ou afficher, les ressources qui appartiennent à ce groupe. Pour plus d'informations, consultez Configuration d'autorisations dans le Guide de l'utilisateur AWS Resource Groups.

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=resource-groups:ResourceTypeFilters,Values=resource-type-1,resource-type-2 \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=resource-groups:ResourceTypeFilters,Values=resource-type-1,resource-type-2 ^ [...]

Exemple 4 : ciblage des ID d'instance

Les exemples suivants montrent comment cibler les nœuds gérés à l'aide de la clé instanceids avec le paramètre targets. Vous pouvez utiliser cette clé pour cibler les appareils Core AWS IoT Greengrass gérés car chaque appareil se voit affecter un mi-ID_number. Vous pouvez voir les ID des appareils dans Fleet Manager, un outil d’AWS Systems Manager.

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=instanceids,Values=instance-ID-1,instance-ID-2,instance-ID-3 \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=instanceids,Values=instance-ID-1,instance-ID-2,instance-ID-3 ^ [...]

Si vous avez balisé des nœuds gérés pour différents environnements à l'aide d'une Key nommée Environment et des Values de Development, Test, Pre-production et Production, vous pourrez donc envoyer une commande à tous les nœuds gérés dans l'un de ces environnements à l'aide du paramètre targets avec la syntaxe suivante.

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:Environment,Values=Development \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:Environment,Values=Development ^ [...]

Vous pouvez cibler des nœuds gérés supplémentaires dans d'autres environnements en ajoutant un élément à la liste Values. Séparez les éléments avec des virgules.

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:Environment,Values=Development,Test,Pre-production \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:Environment,Values=Development,Test,Pre-production ^ [...]

Variation : affiner vos cibles à l'aide de plusieurs critères Key

Vous pouvez affiner le nombre de cibles pour votre commande en incluant plusieurs critères Key. Si vous incluez plusieurs critères Key, le système cible les nœuds gérés qui répondent à tous les critères. La commande suivante cible tous les nœuds gérés balisés pour le service financier et balisés pour le rôle de serveur de base de données.

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:Department,Values=Finance Key=tag:ServerRole,Values=Database \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:Department,Values=Finance Key=tag:ServerRole,Values=Database ^ [...]

Variation : utilisation de plusieurs critères Key et Value

En reprenant l'exemple précédent, vous pouvez cibler plusieurs services et plusieurs rôles de serveur en incluant des éléments supplémentaires dans les critères Values.

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:Department,Values=Finance,Marketing Key=tag:ServerRole,Values=WebServer,Database \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:Department,Values=Finance,Marketing Key=tag:ServerRole,Values=WebServer,Database ^ [...]

Variation : ciblage de nœuds gérés balisés à l'aide de plusieurs critères Values

Si vous avez balisé des nœuds gérés pour différents environnements à l'aide d'une Key nommée Department et Values de Sales et Finance, vous pouvez envoyer une commande à tous les nœuds gérés dans l'un de ces environnements à l'aide du paramètre targets avec la syntaxe suivante.

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:Department,Values=Sales,Finance \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:Department,Values=Sales,Finance ^ [...]

Vous pouvez spécifier un maximum de cinq clés et cinq valeurs pour chaque clé.

Si une clé de balise (le nom de la balise) ou une valeur de balise inclut des espaces, placez la clé ou la valeur de balise entre guillemets, comme illustré dans les exemples suivants.

Exemple : espaces dans la balise Value

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:OS,Values="Windows Server 2016" \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:OS,Values="Windows Server 2016" ^ [...]

Exemple : espaces dans la clé tag et dans Value

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key="tag:Operating System",Values="Windows Server 2016" \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key="tag:Operating System",Values="Windows Server 2016" ^ [...]

Exemple : espaces dans un élément d'une liste de Values

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:Department,Values="Sales","Finance","Systems Mgmt" \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:Department,Values="Sales","Finance","Systems Mgmt" ^ [...]

Utilisation des contrôles de taux

Vous pouvez contrôler le taux d'envoi des commandes aux nœuds gérés d'un groupe à l'aide des contrôles de concurrence et des contrôles d'erreur.

Utilisation de contrôles d'accès simultanés

Le contrôle de nombre de nœuds gérés exécutant une commande simultanément est possible à l'aide du max-concurrency paramètre des options ( Simultanéité de la page Exécuter une commande ). Vous pouvez spécifier un nombre absolu de nœuds géré, par exemple, 10, ou un pourcentage de l'ensemble de la cible, par exemple, 10%. Le système de mise en file d'attente transmet la commande à un seul nœud et attend jusqu'à ce que le système reconnaisse l'appel initial avant d'envoyer la commande à deux autres nœuds. Le système envoie de façon exponentielle des commandes à plusieurs nœuds jusqu'à ce que la valeur max-concurrency soit atteinte. La valeur par défaut de max-concurrency est 50. Les exemples suivants vous montrent comment spécifier des valeurs pour le paramètre max-concurrency :

Linux & macOS
aws ssm send-command \ --document-name document-name \ --max-concurrency 10 \ --targets Key=tag:Environment,Values=Development \ [...]
aws ssm send-command \ --document-name document-name \ --max-concurrency 10% \ --targets Key=tag:Department,Values=Finance,Marketing Key=tag:ServerRole,Values=WebServer,Database \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --max-concurrency 10 ^ --targets Key=tag:Environment,Values=Development ^ [...]
aws ssm send-command ^ --document-name document-name ^ --max-concurrency 10% ^ --targets Key=tag:Department,Values=Finance,Marketing Key=tag:ServerRole,Values=WebServer,Database ^ [...]

Utilisation de contrôles d'erreur

Vous pouvez également contrôler l'exécution d'une commande sur des centaines ou des milliers de nœuds gérés en définissant une limite d'erreurs à l'aide des paramètres max-errors (champ Error threshold (Seuil d'erreur) de la page Exécuter une commande). Le paramètre spécifie le nombre d'erreurs autorisées avant que le système cesse d'envoyer la commande d'autres nœuds gérés. Vous pouvez spécifier un nombre absolu d'erreurs (par exemple, 10) ou un pourcentage de l'ensemble de la cible (par exemple, 10%). Si, par exemple, vous spécifiez 3, le système cesse d'envoyer la commande à la réception de la quatrième erreur. Si vous spécifiez 0, le système cesse d'envoyer la commande à des nœuds gérés supplémentaires une fois que le premier résultat d'erreur est renvoyé. Si vous envoyez une commande à 50 nœuds gérés et que vous définissez max-errors avec la valeur 10%, le système arrête d'envoyer la commande aux nœuds gérés supplémentaires à la réception de la sixième erreur.

Les appels qui exécutent déjà une commande lorsque max-errors est atteint sont autorisés à se terminer, mais certains de ces appels pourraient également échouer. Si vous devez vous assurer que le nombre d'appels ayant échoué ne dépassera pas la valeur de max-errors, définissez max-concurrency sur 1 pour que les appels soit exécutés un par un. La valeur par défaut pour max-errors est 0. Les exemples suivants vous montrent comment spécifier des valeurs pour le paramètre max-errors :

Linux & macOS
aws ssm send-command \ --document-name document-name \ --max-errors 10 \ --targets Key=tag:Database,Values=Development \ [...]
aws ssm send-command \ --document-name document-name \ --max-errors 10% \ --targets Key=tag:Environment,Values=Development \ [...]
aws ssm send-command \ --document-name document-name \ --max-concurrency 1 \ --max-errors 1 \ --targets Key=tag:Environment,Values=Production \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --max-errors 10 ^ --targets Key=tag:Database,Values=Development ^ [...]
aws ssm send-command ^ --document-name document-name ^ --max-errors 10% ^ --targets Key=tag:Environment,Values=Development ^ [...]
aws ssm send-command ^ --document-name document-name ^ --max-concurrency 1 ^ --max-errors 1 ^ --targets Key=tag:Environment,Values=Production ^ [...]