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

Amazon s3 将控制台的输出重定向到AWS S3上的文件,amazon-s3,aws-cli,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 CLI和s3cmd。如何重定向create的输出以在AWS S3上创建新文件

假设我有一个网站,当我使用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上创建新文件

假设:

  • AWS S3访问密钥和密钥已设置
  • 存储文件的位置:
    mybucket/$(日期+%Y-%m-%d\u%H-%m.json)
  • 可以从Amazon S3往返:

    以下
    cp
    命令将本地文件流从标准输入上传到指定的bucket和key:

    因此,您可以使用:

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

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

    如果您想在远程运行该命令,请使用
    aws ssm send command

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

    下面是在远程上运行PowerShell脚本并将其上载到S3 bucket的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
    

    我能想到的一种方法是在本地保存文件,然后使用-
    aws s3 cp local\u copy s3\u path
    。但是有没有一种有效的方法(不保存中间文件)要做到这一点?旁注:使用
    --endpoint url
    标志,也可以将Amazon的CLI与其他S3兼容服务一起使用。此外,该工具似乎可以将文件正确地流式传输到服务器,而无需先将整个文件缓存在内存中,这对于大型文件很重要。它也可以反向工作!您可以使用
    -
    作为读取文件的输出文件。我使用它查看gzip SQL备份,如下所示:
    aws s3 cp“s3://bucket\u where\u I\u keep\u db\u backups/Sat Oct 13 23:53:27 UTC 2018.SQL.gz”-| gzip-d | less
    @John Rotenstein是否有任何数据限制,我是否可以像1GB的数据流一样重定向到
    aws s3 cp-
    ?@Vishrant是的,最有可能。它只是使用stdin/stdout而不是文件。
    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