Terraform TPL中的本地bash变量

时间:2019-07-15 14:53:58

标签: bash terraform

我想担任角色,然后将其输出保存在变量中,然后使用该变量从中提取一些凭证。但是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)

2 个答案:

答案 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的模板语言将$${替换为${