如何在模块化闪亮应用程序中连接 AWS S3 凭证

Cor*_*ton 5 r amazon-s3 amazon-web-services shiny shinydashboard

在 Shinyapps.io 上运行带有多个文件夹的闪亮应用程序。该应用程序有一个从 S3 中提取数据的函数(使用一个包装器get_bucket()),当我在我的项目 .Renviron 文件中设置 AWS 秘密和凭证时,它在本地工作正常,但一旦推送,我就会收到 HTTP 403 错误:

Error in value[[3L]](cond) : Forbidden (HTTP 403).
Calls: local ... tryCatch -> tryCatchList -> tryCatchOne -> <Anonymous>
Execution halted
Run Code Online (Sandbox Code Playgroud)

我尝试过的事情:

  • 直接在get_bucket()调用中包含 aws 密钥、秘密和区域
  • 将 aws 中的存储桶设置更改为“开放访问”
  • 在 global.R 文件中设置凭据,其中包括 sys.setenv()
  • 使用凭据将 .Renviron 添加到主项目文件夹
  • 在 server.R 文件中添加凭据(为了测试,为了保密,我不想这样做)

我对这个完全没有想法。它源于一个更广泛的问题,即如何在 Shinyapps.io 应用程序中设置 .Renviron 变量。我读过的内容说要添加到主文件夹或其他选项,但正如我上面所说的那样没有用。

我正在阅读数据,shiny::reactivePoll()但不知道这是怎么回事。

感谢您的帮助,这几天一直被困在这个问题上。

Cor*_*ton 3

所以,一直以来,答案都是直接Sys.getenv()调用get_bucket()

get_bucket(s3BucketName,
                       "AWS_ACCESS_KEY_ID" = Sys.getenv("AWS_ACCESS_KEY_ID"),
                       "AWS_SECRET_ACCESS_KEY" = Sys.getenv("AWS_SECRET_ACCESS_KEY")

Run Code Online (Sandbox Code Playgroud)

它可以调用我在主目录中的 .Renviron 。我认为在我之前的尝试中,我要么a)没有正确调用它Sys.getenv(),要么忘记正确解决它。