sshでできるような単発コマンドをセッションマネージャーで実行する

sshではコマンドの最後にリモートホスト上で実行したいコマンドを記述すると、そのコマンドを実行した上で接続を切断する。
例えばssh ホスト ls -lのように実行するとリモートホスト上でls -lコマンドを実行する。

AWS CLIによるセッションマネージャーでの接続でも同様に単発コマンドを実行できる。
aws ssm start-sessionコマンドに--document-name AWS-StartNonInteractiveCommandオプションを付けて以下のように実行する。

$ aws ssm start-session \
  --target <EC2インスタンスID> \
  --document-name AWS-StartNonInteractiveCommand \
  --parameters '{"command": ["コマンド"]}'

例えばls /homeコマンドを実行するには以下のようになる。

$ aws ssm start-session \
  --target <EC2インスタンスID> \
  --document-name AWS-StartNonInteractiveCommand \
  --parameters '{"command": ["ls /home"]}'

Starting session with SessionId: xxx-xxxxxxxxxxxxxxxxx
ec2-user
ssm-user

Exiting session with sessionId: xxx-xxxxxxxxxxxxxxxxx.

コマンドの結果は標準出力・標準エラーに出力される

コマンドの標準出力・標準エラーはこのコマンドの標準出力・標準エラーとなるので、ローカルでリダイレクトしたり、パイプでつなげたりできる。

$ aws ssm start-session \
  --target <EC2インスタンスID> \
  --document-name AWS-StartNonInteractiveCommand \
  --parameters '{"command": ["ls /home"]}' | grep ec2-user
ssm-user