首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在makefile中承担iam角色

如何在makefile中承担iam角色
EN

Stack Overflow用户
提问于 2022-01-17 14:59:17
回答 1查看 463关注 0票数 1

如何在makefile中承担iam角色?

我试过:

代码语言:javascript
复制
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中无效。看来会议没有继续进行。我也尝试了环境变量,但也没有运气。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-17 15:57:40

这是Make的默认行为:“食谱”中的每一行都由单独的shell执行,因此没有任何东西从一行传递到另一行。

GNU提供了.ONESHELL特殊目标,它指示Make为每个菜谱使用一个shell。它的缺点是它适用于整个Makefile,因此您没有单独执行的选项。

您可以使用反斜杠组合多行:

代码语言:javascript
复制
mytarget:
    aws --version ; \
    eval $(aws sts assume-role ... ) ; \
    aws sts get-caller-identity

如果这样做,那么在每个命令后面加上分号是很重要的。您还可以使用像&&这样的条件操作,以确保每一行在调用下一行之前都成功。

您还可以作为一个变量来保存您的访问vars,并在调用AWS操作的每一行中插入它们:

代码语言:javascript
复制
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应用的附加约束。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70743386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档