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 dans AWS Systems Manager, permettant d'exécuter des commandes sur un parc de nœuds gérés à l'aide dutargets. 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, consultez la section Marquage de vos AWS ressources dans le Guide de l'utilisateur des AWS ressources de balisage. Pour plus d'informations sur le balisage de vos appareils IoT gérés, consultez la section Marquer vos AWS IoT Greengrass Version 2 ressources dans le guide du AWS IoT Greengrass Version 2 développeur.

Vous pouvez également utiliser le targets paramètre pour cibler une liste de nœuds gérés spécifiques IDs, comme décrit dans la section suivante.

Pour contrôler le mode d'exécution des commandes sur des centaines ou des milliers de nœuds gérés, Run Command inclut également des paramètres permettant de limiter le nombre de nœuds pouvant traiter simultanément une demande et le nombre d'erreurs pouvant être générées par une commande avant son annulation.

Ciblage de plusieurs nœuds gérés

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

Les exemples suivants montrent le format de commande lors de l'utilisation Run Command depuis le AWS Command Line Interface (AWS CLI ). Remplacez chaque example resource placeholder par 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 : Cibler un groupe de AWS ressources par son 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 envoyer des commandes ciblant un groupe de ressources, vous devez avoir obtenu des autorisations AWS Identity and Access Management (IAM) pour répertorier ou afficher les ressources appartenant à 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 : Cibler un groupe de AWS ressources 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 : instance de ciblage IDs

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 AWS IoT Greengrass principaux appareils gérés, car un mi- est attribué à chaque appareilID_number. Vous pouvez voir l'appareil IDs dans Fleet Manager, un outil dans 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 ^ [...]