【问题标题】:setting a multi-line value in terraform variables在 terraform 变量中设置多行值
【发布时间】:2021-03-13 02:42:16
【问题描述】:

我正在尝试部署 beanstalk 并将其用作 aws_elastic_beanstalk_environment terraform 资源的一部分:

  setting {
    namespace = "aws:elb:policies:PublicKey"
    name      = "PublicKey"
    value     = var.PUBLICKEY

var.PUBLICKEY 的值应采用以下格式:

-----BEGIN PUBLIC KEY-----
sajldlkuewindasmASL/aisudoiasumasdnowqeuoi@kajsdlkausKJDolkejpwr
sajldlkuewindasmASL/aisudoiasumasdnowqeuoi@kajsdlkausKJDolkejpwr
sajldlkuewindasmASL/aisudoiasumasdnowqeuoi@kajsdlkausKJDolkejpwr
sajldlkuewindasmASL/aisudoiasumasdnowqeuoi@kajsdlkausKJDolkejpwr
sajldlkuewindasmASL/aisudoiasumasdnowqeuoi@kajsdlkausKJDolkejpwr
sajldlkuewindasmASL/aisudoiasumasdnowqeuoi@kajsdlkausKJDolkejpwr
asdhjasd
-----END PUBLIC KEY-----

请问您是否尝试过使用这种格式设置变量?或者 terraform 是否允许在 tfvars 部分使用这种格式作为变量?

【问题讨论】:

  • 公钥应该是单行字符串。例如here
  • 再次感谢@Marcin!它解决了部署问题
  • 没问题。如果您不介意,我会提供答案以供将来参考。
  • 您可以将接受的答案更改为 Martins 的答案。它更好。

标签: terraform amazon-elastic-beanstalk


【解决方案1】:

虽然这个案例的答案是让它成为一个单行字符串,但这里的问题似乎很可能会吸引对 Terraform 变量中的多行字符串的搜索,所以这个答案适用于任何最终在您不能只将其设为单行字符串的情况。

在 Terraform 语言本身(module 块内)或.tfvars files 中设置变量时,您可以使用Heredoc Strings 编写多行字符串值:

example = <<-EOT
-----BEGIN PUBLIC KEY-----
sajldlkuewindasmASL/aisudoiasumasdnowqeuoi@kajsdlkausKJDolkejpwr
sajldlkuewindasmASL/aisudoiasumasdnowqeuoi@kajsdlkausKJDolkejpwr
sajldlkuewindasmASL/aisudoiasumasdnowqeuoi@kajsdlkausKJDolkejpwr
sajldlkuewindasmASL/aisudoiasumasdnowqeuoi@kajsdlkausKJDolkejpwr
sajldlkuewindasmASL/aisudoiasumasdnowqeuoi@kajsdlkausKJDolkejpwr
sajldlkuewindasmASL/aisudoiasumasdnowqeuoi@kajsdlkausKJDolkejpwr
asdhjasd
-----END PUBLIC KEY-----
EOT

当设置变量值on the command linevia environment variables 时,Terraform 只使用它按字面意思接收到的值,因此解决方案是学习如何在 shell 或某些语法中编写包含换行符的字符串您用于运行设置了环境变量的 Terraform 的其他编程语言。对于典型的 Unix 风格的 shell,您可以在多行字符串周围写上引号 ',以使换行符按字面意思解释:

export TF_VAR_example='-----BEGIN PUBLIC KEY-----
sajldlkuewindasmASL/aisudoiasumasdnowqeuoi@kajsdlkausKJDolkejpwr
sajldlkuewindasmASL/aisudoiasumasdnowqeuoi@kajsdlkausKJDolkejpwr
sajldlkuewindasmASL/aisudoiasumasdnowqeuoi@kajsdlkausKJDolkejpwr
sajldlkuewindasmASL/aisudoiasumasdnowqeuoi@kajsdlkausKJDolkejpwr
sajldlkuewindasmASL/aisudoiasumasdnowqeuoi@kajsdlkausKJDolkejpwr
sajldlkuewindasmASL/aisudoiasumasdnowqeuoi@kajsdlkausKJDolkejpwr
asdhjasd
-----END PUBLIC KEY-----
'

...但无论哪种方式,这最终都会成为您从中启动 Terraform 的任何 shell 或其他程序的问题,而不是 Terraform 本身,因此不可能给出适用于所有情况的通用答案。编写 .tfvars 文件是最可预测的方式,因为 Terraform 本身负责解析它。

【讨论】:

【解决方案2】:

我无法评论 Martin Atkins 的回应,但他的建议也可以扩展到 Terraform 需要调用 bash 脚本的情况:

data "external" "test" {
  program = ["bash", "test.sh"]

  query = {
    pca_cert = "'${data.aws_acmpca_certificate_authority.pca.certificate}'"
  }
}

注意 ${data.aws_acmpca_certificate_authority.pca.certificate} 变量的单引号

【讨论】:

  • 这个也适用于这个解决方案
【解决方案3】:

PublicKey 的值应该是单行字符串,没有-----BEGIN PUBLIC KEY----------END PUBLIC KEY-----,如AWS docs 所示。

【讨论】:

  • 感谢@Marcin,我遵循了有关如何在 aws cli 上使用该值并将其应用于 terraform 的格式,它按预期工作。再次感谢您的推荐
猜你喜欢
  • 2022-01-11
  • 2021-08-08
  • 2022-10-26
  • 2022-06-22
  • 1970-01-01
  • 1970-01-01
  • 2022-01-27
  • 2020-12-14
  • 1970-01-01
相关资源
最近更新 更多