我想担任角色,然后将其输出保存在变量中,然后使用该变量从中提取一些凭证。但是terraform会引发错误。
#!/bin/sh
ASSUME_ROLE=$(aws sts assume-role --output json --role-arn arn:aws:iam::123123123123:role/SomeRole --role-session-name test --profile myprofile)
export AWS_ACCESS_KEY_ID=$(echo ${ASSUME_ROLE} | awk -F'"' '/AccessKeyId/{print $4}')
export AWS_SECRET_ACCESS_KEY=$(echo ${ASSUME_ROLE} | awk -F'"' '/SecretAccessKey/{print $4}')
export AWS_SESSION_TOKEN=$(echo ${ASSUME_ROLE} | awk -F'"' '/SessionToken/{print $4}')
aws --profile myprofile route53 create-vpc-association-authorization --hosted-zone-id abcd3245 --vpc VPCRegion=us-east-1,VPCId=vpc-123e123
aws route53 associate-vpc-with-hosted-zone --hosted-zone-id abcd3245 --vpc VPCRegion=us-east-1,VPCId=vpc-123e123
这是输出
There is no variable named "ASSUME_ROLE"., and 2 other diagnostic(s)
答案 0 :(得分:0)
您可能只需要导出ASSUME_ROLE
变量。 export
使变量在子Shell中可用(而$(echo ${ASSUME_ROLE}...)
是子Shell)。否则,它们仅在当前上下文中可用。
答案 1 :(得分:0)
此错误表明Terraform的template_file
实现将${ASSUME_ROLE}
理解为模板插值,因此它试图在模板ASSUME_ROLE
映射中找到名为vars
的元素。 / p>
此字符串中似乎没有任何实际的Terraform模板序列,在这种情况下,没有理由将其呈现为模板。相反,只需使用the file
function逐字阅读即可。
如果您需要 作为模板,则可以通过编写${
来代替文字$${
序列。渲染期间,Terraform的模板语言将$${
替换为${
。