1

是否可以在没有 AWS cli 的情况下从 AWS s3 下载文件?在我的生产服务器中,我需要下载 S3 存储桶中的配置文件。

我正在考虑让 Amazon Systems Manger 运行一个脚本,该脚本将从 S3 下载配置(YAML 文件)。但是我们不想在生产机器上安装 AWS cli。我该怎么办?

4

2 回答 2

2

您需要某种程序来调用 Amazon S3 API 来检索对象。例如,PowerShell 脚本(使用适用于 Windows PowerShell 的 AWS 工具)或使用 AWS 开发工具包的 Python 脚本。

您也可以生成一个Amazon S3 预签名 URL,这将允许通过正常的 HTTPS 调用(例如curl)从 Amazon S3 下载私有对象。这可以使用适用于 Python 的 AWS 开发工具包轻松完成,或者您可以自己编写代码而不使用库(它有点复杂)。

在上述所有示例中,您都需要为脚本/程序提供一组 IAM 凭证,以便通过 AWS 进行身份验证。

于 2020-07-11T02:56:41.700 回答
0

只需为任何 C# 代码爱好者添加注释即可解决 .Net 问题

  1. 首先编写(C#)代码以将私有文件下载为字符串

     public string DownloadPrivateFileS3(string fileKey)
     {
         string accessKey = "YOURVALUE";
         string accessSecret = "YOURVALUE";;
         string bucket = "YOURVALUE";;
         using (s3Client = new AmazonS3Client(accessKey, accessSecret, "YOURVALUE"))
         {
                 var folderPath = "AppData/Websites/Cases";
                 var fileTransferUtility = new TransferUtility(s3Client);
                 Stream stream = fileTransferUtility.OpenStream(bucket, folderPath + "/" + fileKey);
                 using (var memoryStream = new MemoryStream())
                 {
                      stream.CopyTo(memoryStream);
                     var response = memoryStream.ToArray();
                     return Convert.ToBase64String(response);
                 }
    
                 return "";
        }
    }
    
  2. 第二编写 JQuery 代码以将字符串下载为 Base64

function downloadPrivateFile() {
$.ajax({url: 'DownloadPrivateFileS3?fileName=' + fileName, success: function(result){
        var link = this.document.createElement('a');
        link.download = fileName;
        link.href = "data:application/octet-stream;base64," + result;
        this.document.body.appendChild(link);
        link.click();
        this.document.body.removeChild(link);
  }});
}

从 HTML/C#/JQuery 的任何位置调用 downloadPrivateFile 方法 -

享受快乐的编码和复杂问题的解决方案

于 2021-01-03T21:38:19.730 回答