作为自动连接到 postgres 实例的 bash 脚本的一部分,我需要配置 aws cli 工具并设置 AWS_PROFILE 变量。该命令在其输出的最后一行中输出此内容。
问题是
aws configure sso
是交互式的,所以我不能将输出转储到变量中。所以我做了以下事情:
AWS_OUTPUT=$(aws configure sso | tee /dev/tty)
export AWS_PROFILE=$(tail -1 <<< "$AWS_OUTPUT" | cut -d' ' -f5)
这可行,但很难使用,因为每次我在
aws configure sso
运行时按任意键,也会插入回车符,并且输出非常混乱(尽管几乎无法使用)。
有没有更好的方法来获取个人资料ID?或者有办法防止回车问题吗?
感谢 Caldazar 的评论,我意识到我的问题是基于对个人资料和帐户概念的混淆。似乎配置文件(例如 SSO 会话)是本地的,可以链接到任何帐户。
因此,与其尝试从 aws 命令检索自动生成的配置文件 ID,不如通过命令行参数或作为导出的环境变量提供配置文件 ID。
此外,我们只需为每个配置文件执行一次即可在本地设置配置文件,而不是每次登录时都运行
aws configure sso
:
aws configure sso --profile prefix-dev
aws configure sso --profile prefix-qa
aws configure sso --profile prefix-prod
然后在脚本中我们首先确定正确的配置文件,然后运行
aws sso login
。我的用例是检索 rds 密码。所以我的脚本的相关部分如下所示:
export AWS_PROFILE="prefix-$env"
DB_PASSWORD=$(aws rds generate-db-auth-token --hostname $DB_HOST --port 5432 --username $SERVICE)
while [ $? != 0 ]; do
aws sso login
DB_PASSWORD=$(aws rds generate-db-auth-token --hostname $DB_HOST --port 5432 --username $SERVICE)
done