从 Golang 运行命令时出现 AWS CLI 错误

Posted

技术标签:

【中文标题】从 Golang 运行命令时出现 AWS CLI 错误【英文标题】:AWS CLI error while running command from Golang 【发布时间】: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 应用程序作为服务运行。 【参考方案1】:

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

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

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

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

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

【讨论】:

感谢 VonC 的回复。但我已经检查了这篇文章。并且我的配置设置为共享配置文件,我在问题中已经提到过。 @Amandeepkaur 是的,但是您是否在您的 Go 程序中测试了该命令,以检查是否检测到配置(再次,在 Go 运行时会话的上下文中)? 是的,aws configure list 返回未设置凭据。我已经有凭据文件,但在运行时 go 无法找到,对吧?但是如何解决这个问题? @Amandeepkaur 一种解决方案是确保 Go 服务以您的用户而不是 root 身份运行,以便继承与当前用户相同的环境变量。

以上是关于从 Golang 运行命令时出现 AWS CLI 错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 golang 从 DynamoDB 获取记录时出现紧急运行时错误

尝试使用 AWS CLI 运行 ECS 任务时出现资源:内存错误

AWS Elastic Beanstalk 使用 CLI 部署时出现 Botocore 错误

使用 AWS CLI 时发布的错误中更新 cloudformation 堆栈时出现回滚错误

QProcess CLI 命令 - 指定输出保存位置时出现“错误参数”

安装 eb cli 时出现问题,ZipImportError