如何将 tar 编码文件转换为 terraform 变量?

How can I convert a tar encoded file into a terraform variable?

我正在尝试使用 terraform 中的配置器将许可证文件复制到实例上。

我正在尝试尽量减少目录中的文件数量,因此我想避免有任何额外的文件。对于其他文件,我能够使用内容而不是 terraform 供应器中的源将其传递到目的地。但是,由于我要复制的文件是 tar 存档,因此我找不到将其转换为可以表示为内容值的字符串格式的方法。

它还需要使用terraform 的语言进行解码,以便VM 可以正确读取它。不幸的是,这限制了我对 terraform 解码功能的选择](https://www.terraform.io/docs/configuration/functions/base64decode.html)

我认为我最好的选择是尝试将其编码为 base64,但我找不到实现它的方法。有什么建议吗?

一个快速的方法。

首先将您的 tar 文件编码为 base64 并保存到参数存储

cat <tar_file>.tar |base64 -w0 |tee output.txt

Notes: -w0 can make sure the output in one line

然后将base64哈希保存到AWS Systems Manager Parameter Store作为字符串或安全字符串,例如,将其命名为license_key

然后你可以在terraform中工作得到它

data "aws_ssm_parameter" "foo" {
  name = "license_key"
}

locals {
  license = base64encode(data.aws_ssm_parameter.foo.value)
}

output "license" {
  value = local.license
}

codes are for terraform 0.12.x

在 terraform 中使用 provisioner 的其余部分,您应该知道该怎么做。

以上代码未经测试,只是提供思路给大家。