web-dev-qa-db-ja.com

複数のリモートサーバーでローカルシェルスクリプトを並行して実行し、ステータスを取得する

リモートサーバーでローカルスクリプトを実行する必要があります。並列実行するスクリプトを実行することは重要です。

[ec2-user@ip-172-31-43-140 ~]$ cat hosts.txt
             [email protected]
             [email protected]
             [email protected]
             [email protected]
             [email protected]
[ec2-user@ip-172-31-43-140 ~]$ cat hosts.txt  | xargs -I {} ssh {} -T 'bash -s' < ./file.sh
ssh: Could not resolve hostname #!/bin/sh: Name or service not known
xargs: ssh: exited with status 255; aborting
[ec2-user@ip-172-31-43-140 ~]$
4
vishnu

hello.bash

doit() {
  echo Define
  echo what you want done in a
  echo function
}
export -f doit

次に行います:

. hello.bash
parallel --env doit --slf hosts.txt --tag --nonall doit
1
Ole Tange

はい、AWS Systems Managerでこれを行うことができます。 AWS Systems Manager Run Commandを使用すると、リモートで安全にEC2とオンプレミスサーバーでコマンドのセットを実行できます。以下は、これを達成するための大まかな手順です。

インスタンスIAMロールのアタッチ:ec2インスタンスには、ポリシーAmazonSSMFullAccessのIAMロールが必要です。この役割により、インスタンスはSystems Manager APIと通信できます。

SSMエージェントのインストール:EC2インスタンスにはSSMエージェントがインストールされている必要があります。 SSMエージェントは、コマンドの実行要求を処理し、コマンドごとにインスタンスを構成します。

コマンドの実行:AWS CLIを介した使用例:In --instance-ids ec2インスタンスIDのリストを提供します。次のコマンドを実行して、インスタンスで実行されているサービスを取得します。 Instance-IDをec2インスタンスIDに置き換えます。

aws ssm send-command --document-name "AWS-RunShellScript" --comment "listing services" --instance-ids "Instance-ID" --parameters commands="service --status-all" --region us-west-2 --output text

詳細 ここ

1
ExploringApple