How to override the env variables and use the AWS credential file instead in AWS CLI?
当使用aws cli时,是否可以指定它使用凭证文件而不是存储在env变量中的值?
不幸的是,您不能指定凭据文件相对于环境变量的优先级。
http://docs.aws.amazon.com/cli/latest/userguide/cli chap getting started.html cli环境
Environment variables override configuration and credential files and can be useful for scripting or temporarily setting a named profile as the default.
构建另一个答案中提到的内容,您可以编写一个包装脚本,该脚本将:
- 使用export命令覆盖环境变量(我认为这只是脚本范围内的临时变量)
- 将命令传递给aws cli
- 完成后,包装器脚本将终止,环境变量应该回到原来的样子(我认为)
我用下面的(非常基本的)bash脚本测试了这一点。我有一个名为$region的环境变量。考虑下面的shell脚本"script.sh"。
1 2 3 | #!/bin/bash export REGION="" echo"REGION ="$REGION |
在调用脚本之前,我将"echo$region"证明它确实存在:
1 2 | ubuntu@ip-172-31-24-61:~$ echo $REGION us-east-1 |
然后我调用脚本,该脚本将变量空出来,echo's it显示它现在是空的。
1 2 | ubuntu@ip-172-31-24-61:~$ ./script.sh REGION = |
一旦脚本终止,我将从命令行中"echo$region",环境变量将非常好。
1 2 | ubuntu@ip-172-31-24-61:~$ echo $REGION us-east-1 |
如果将此应用于用例,则可以编写一个包装脚本,将环境变量(只需导出aws_access_key_id=")空出来,并将所有命令行选项传递给aws cli。当CLI执行时,它将看不到环境变量,因为它们已经在其执行范围内被空了。
我不知道如何做的一件事是让bash脚本获取所有未知数量的命令行参数,并将它们全部传递给另一个命令。我不认为这很难,我只是不知道怎么做。
但是,我敢肯定如果你再问一个问题,有人会帮你的!
另一种选择是,如果您不使用环境变量,只需删除它们即可。
编辑2我已经了解了如何制作一个非常简单的包装脚本来解决您的问题。在您实现这一点之前,我强烈建议您查看以下链接,以更好地了解这一点的工作原理以及实现这一点的其他方法。例如,您可以使用$@和可能的$*来执行此操作,这可能是更普遍接受的方法。
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/bash params="" export AWS_ACCESS_KEY_ID="" export AWS_SECRET_ACCESS_KEY="" for arg; do params="$params $arg" done aws $params |
两个"export"链接使环境变量为空。同样,在这个包装器脚本的生命周期中,环境变量只能为空,因为它是在脚本的范围内完成的,而不是在全局范围内完成的。
然后,for循环循环遍历用于运行脚本的所有命令行参数,将它们附加到字符串变量,然后使用包含所有命令行参数的字符串调用"aws"。
http://tldp.org/ldp/abs/html/wrapper.htmlbash:将命令行参数转换为数组https://linuxconfig.org/bash-script-how-to-check-number-of-supplied-command-line-arguments检查传递给bash脚本的参数数量
您可以使用
由于变量将变为未设置状态,因此
AWS命令行不支持指定不同的配置文件。
您可以做的是在运行aws命令之前制作一个包装器,并写入文件