2017-02-16 7 views
2

Скажут, у меня есть сайт, который вернуть мне JSON данных, когда я отправить запрос GET с помощью завитка. Я хочу перенаправить вывод curl на AWS S3. Для этого на S3 должен быть создан новый файл.Перенаправить вывод консоли в файл на AWS S3

В настоящее время я могу перенаправить вывод для его локального хранения.

curl -s -X GET 'http://website_that_returns_json.com' > folder_to_save/$(date +"%Y-%m-%d_%H-%M.json") 

У меня есть AWS CLI и s3cmd установлен. Как мне перенаправить вывод create для создания нового файла на AWS S3?

Предположим:

  1. ключ доступа AWS S3 и секретный ключ уже установлены.
  2. Место для хранения файла: mybucket/$(date +"%Y-%m-%d_%H-%M.json"
+0

Один из способов я могу думать заключается в том, чтобы сохранить файл локально, а затем использовать - 'aws s3 cp local_copy s3_path'. Но есть ли эффективный способ (не сохранять промежуточный файл) для этого? –

ответ

1

AWS Command-Line Interface (CLI) обладает способностью stream data к/от Amazon S3:

Следующая cp команда загружает локальный файловый поток со стандартного ввода в указанный ковш и ключ:

aws s3 cp - s3://mybucket/stream.txt 

Так, лет u можете использовать:

curl xxx | aws s3 cp - s3://mybucket/object.txt 

Однако, возможно, более безопасно сохранять файл локально, а затем скопировать его в Amazon S3.

0

Если вы хотите запустить команду на пульте дистанционного управления, используйте 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 
Смежные вопросы