当我使用 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 CLI
和s3cmd
。如何重定向create的输出以在AWS S3上创建新文件?
假设:
mybucket/$(date +"%Y-%m-%d_%H-%M.json"
答案 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