如何在makefile中承担iam角色?
我试过:
deploy-non-prod:
aws --version
eval $(aws sts assume-role --role-arn arn:aws:iam::xxx:role/rl-some-role --role-session-name test | jq -r '.Credentials | "export AWS_ACCESS_KEY_ID=\(.AccessKeyId)\nexport AWS_SECRET_ACCESS_KEY=\(.SecretAccessKey)\nexport AWS_SESSION_TOKEN=\(.SessionToken)\n"')这在bash有效,但在makefile中无效。看来会议没有继续进行。我也尝试了环境变量,但也没有运气。
发布于 2022-01-17 15:57:40
这是Make的默认行为:“食谱”中的每一行都由单独的shell执行,因此没有任何东西从一行传递到另一行。
GNU提供了.ONESHELL特殊目标,它指示Make为每个菜谱使用一个shell。它的缺点是它适用于整个Makefile,因此您没有单独执行的选项。
您可以使用反斜杠组合多行:
mytarget:
aws --version ; \
eval $(aws sts assume-role ... ) ; \
aws sts get-caller-identity如果这样做,那么在每个命令后面加上分号是很重要的。您还可以使用像&&这样的条件操作,以确保每一行在调用下一行之前都成功。
您还可以作为一个变量来保存您的访问vars,并在调用AWS操作的每一行中插入它们:
ACCESS_VARS != aws sts assume-role --role-arn arn:aws:iam::123456789012:role/SomeRole --role-session-name test | jq -r '.Credentials | "AWS_ACCESS_KEY_ID=\(.AccessKeyId) AWS_SECRET_ACCESS_KEY=\(.SecretAccessKey) AWS_SESSION_TOKEN=\(.SessionToken)"'
test:
$(ACCESS_VARS) aws sts get-caller-identity注意,JQ命令与quesion中的JQ命令不同:如果将环境变量设置为命令的一部分,则不使用export。
然而,IMO最好的解决方案是编写一个脚本来完成您的工作,并从Makefile调用该脚本。这将使您能够独立测试脚本,并启用完整的shell特性,而不需要Make应用的附加约束。
https://stackoverflow.com/questions/70743386
复制相似问题