将控制台的输出重定向到AWS S3上的文件

时间:2017-02-16 20:40:19

标签: amazon-s3 aws-cli

当我使用 curl 发送 GET 请求时,我说有一个网站可以返回 JSON 数据。我想将curl的输出重定向到 AWS S3 。应该在S3上为它创建一个新文件。

目前,我可以将输出重定向到本地存储。

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

我安装了AWS CLIs3cmd。如何重定向create的输出以在AWS S3上创建新文件?

假设:

  1. 已设置AWS S3访问密钥和密钥。
  2. 商店文件的位置:mybucket/$(date +"%Y-%m-%d_%H-%M.json"

2 个答案:

答案 0 :(得分:7)

AWS Command-Line Interface (CLI)能够{/ 3}}来自Amazon S3:

  

以下cp命令将标准输入的本地文件流上传到指定的存储桶和密钥:

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

所以,你可以使用:

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

但是,在本地保存文件然后将其复制到Amazon S3可能更安全。

答案 1 :(得分:0)

如果您想在遥控器上运行该命令,请使用aws ssm send-command

然后,要将该命令的输出重定向到S3,您可以使用--output-s3-bucket-name参数。

这是在远程上运行PowerShell脚本并将其上传到S3存储桶的Bash脚本:

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