terraformtpl中的局部bash变量

terraformtpl中的局部bash变量,bash,terraform,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 ${AS

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

您可能只需要导出您的
假定角色
变量
export
使变量在子shell中可用(并且
$(echo${Aspect_ROLE}…
是子shell)。否则,它们仅在当前上下文中可用。

此错误表示Terraform的
模板\u文件
实现将
${aspect\u ROLE}
理解为模板插值,因此它试图在模板
vars
映射中找到名为
aspect\u ROLE
的元素

这个字符串中似乎没有任何实际的地形模板序列,在这种情况下,没有理由将其作为模板呈现。取而代之的是,只需使用文本逐字阅读即可


如果确实需要将其作为模板,则可以通过编写
$${
来转义文本
${
序列。Terraform的模板语言将
${
替换为
${
在渲染期间。

拥有
#!/bin/sh
会使这不是一个Bash脚本。请确保不要使用任何仅限Bash的构造,或者将shebang更改为指向
Bash
,而不是
sh
。另请参阅,我已在单独的sh文件中运行并测试了此脚本,并且它正在工作。但是当我将其添加到terraform中时代码它总是显示相同的错误。@TripleeterraForm无法将值赋给bash变量,下面是您可能感兴趣的
resource“null_resource”ec2 des“{provisioner”local exec”{on_failure=“fail”解释器=[“/bin/bash”,““-c”]command=info.txt cat info.txt{awk'{print$1}“#what ever EOT}触发器={always_run=“${timestamp()}}}