从 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 堆栈时出现回滚错误