【问题标题】:AWS CLI error while running command from Golang从 Golang 运行命令时出现 AWS CLI 错误
【发布时间】:2021-12-31 17:54:24
【问题描述】:

我正在尝试使用 os/exec 包中的 Golang 命令函数运行 aws 命令。但是这样做会出错。

命令aws s3 cp SOURCE_DIR s3://BUCKET_NAME/TARGET_DIR --recursive

错误Unable to locate credentials

但凭据设置为shared configuration file。请指导我在这里做错了什么以及如何解决。

【问题讨论】:

  • 为什么要调用 AWS CLI 而不是使用 AWS SDK for Go
  • AWS 凭证通常存储在 ~/.aws/credentials 中——Go 应用程序是否以具有此凭证文件的用户身份运行?
  • @JohnRotenstein 我正在使用 AWS CLI,因为我需要复制目录中的所有对象,而不是复制单个对象。凭据文件也属于不同的用户,并且正在复制的目录属于不同的用户。这可能是问题吗?
  • 如果凭证文件不在您的主目录中,则无法找到。这可能就是您收到错误的原因。我不确定您所说的“正在复制的目录是不同的用户”是什么意思。
  • “被复制的目录是不同的用户”意味着凭证文件是“myuser”,我需要复制的目录是“root”用户。但是我在主目录中有凭据文件。我在 ubuntu 上将 go 应用程序作为服务运行。

标签: amazon-web-services go amazon-s3


【解决方案1】:

假设 Go 程序由正确的用户运行,尝试执行而不是 aws configure list

this thread 中所述,您将看到如何您的凭据是如何配置的:

  • 配置文件
  • 环境变量
  • 实例配置文件
  • 或者...在 Go 运行时会话的上下文中根本没有。

此外,凭据文件属于不同的用户,并且正在复制的目录属于不同的用户。这可能是问题吗?

是的,这就是这个答案的重点:仔细检查您的 Go 程序在执行过程中看到的环境变量(如 $HOME)。

【讨论】:

  • 感谢 VonC 的回复。但我已经检查了这篇文章。并且我的配置设置为共享配置文件,我在问题中已经提到过。
  • @Amandeepkaur 是的,但是您是否在您的 Go 程序中测试了该命令,以检查是否检测到配置(再次,在 Go 运行时会话的上下文中)?
  • 是的,aws configure list 返回未设置凭据。我已经有凭据文件,但在运行时 go 无法找到,对吧?但是如何解决这个问题?
  • @Amandeepkaur 一种解决方案是确保 Go 服务以您的用户而不是 root 身份运行,以便继承与当前用户相同的环境变量。
猜你喜欢
  • 2022-08-18
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 2021-01-08
  • 1970-01-01
  • 2021-12-20
  • 2021-01-01
相关资源
最近更新 更多