我正在编写一个 Bash 脚本来从 S3 下载一些对象。运行此脚本的用户帐户没有可用的主目录。意思是 - $HOME 引用的文件夹不存在。
我已使用环境变量来重定向凭据和配置文件。此方法有效,文件已在新位置创建
export AWS_CONFIG_FILE=/newfolder/.aws/config
export AWS_SHARED_CREDENTIALS_FILE=/newfolder/.aws/credentials
运行此命令时出现权限被拒绝错误。
/usr/local/bin/aws --profile thisprofile s3 ls $BUCKET$FOLDER --recursive
它正尝试写入用户主目录中的缓存文件,但无法写入,因为 $HOME 目录不存在。
$HOME/.aws/cli/cache/a5e04d49e9fc210124ee0431e237dccc5ed84794.json
我尝试将 HOME 导出到有效文件夹。这可行,但我不认为这是解决问题的最佳方法。此脚本适用于具有主目录的用户帐户。
假设我无法修复丢失的主目录,有没有办法将此缓存文件或 .aws 中的所有内容重定向到类似于我对凭证所做操作的新位置?
编辑:除了 Anon Cowards 的答案显示它明确调用 HOME 变量的位置外,还有一个打开功能请求以禁用缓存
答案1
您找到的解决方法是唯一真正的解决方案。基本上,如果 boto3 需要使用承担角色,则以下代码最终被称为:
CACHE_DIR = os.path.expanduser(os.path.join('~', '.aws', 'boto', 'cache'))
如您所见,没有定制的希望,因为 Python 的波浪号扩展os.path.expanduser()
明确使用了。从技术上讲,使用$HOME
的代码有一个逃生舱口,允许指定不同的目录,但任何调用函数都不使用该选项。CACHE_DIR
JSONFileCache