Если вы хотите запустить команду на пульте дистанционного управления, используйте aws ssm send-command
.
Затем, чтобы перенаправить вывод этой команды на S3, вы можете использовать параметр --output-s3-bucket-name
.
Вот Bash скрипт для запуска сценария PowerShell на пульте дистанционного управления и загрузить его в S3 ведро:
instanceId="i-xyz"
bucketName="bucket_to_save"
bucketDir="folder_to_save"
command="Invoke-WebRequest -UseBasicParsing -Uri http://example.com).Content"
cmdId=$(aws ssm send-command --instance-ids "$instanceId" --document-name "AWS-RunPowerShellScript" --query "Command.CommandId" --output text --output-s3-bucket-name "$bucketName" --output-s3-key-prefix "$bucketDir" --parameters commands="'${command}'")
while [ "$(aws ssm list-command-invocations --command-id "$cmdId" --query "CommandInvocations[].Status" --output text)" == "InProgress" ]; do sleep 1; done
outputPath=$(aws ssm list-command-invocations --command-id "$cmdId" --details --query "CommandInvocations[].CommandPlugins[].OutputS3KeyPrefix" --output text)
echo "Command output uploaded at: s3://${bucketName}/${outputPath}"
aws s3 ls "s3://${bucketName}/${outputPath}"
Для вывода загруженных файлов S3, выполните команду:
aws s3 ls s3://${bucketName}/${outputPath}/stderr.txt && aws s3 cp --quiet s3://${bucketName}/${outputPath}/stderr.txt /dev/stderr
aws s3 cp --quiet s3://${bucketName}/${outputPath}/stdout.txt /dev/stdout
Один из способов я могу думать заключается в том, чтобы сохранить файл локально, а затем использовать - 'aws s3 cp local_copy s3_path'. Но есть ли эффективный способ (не сохранять промежуточный файл) для этого? –