Var + formatdate 的 Terraform 引号语法

问题描述 投票:0回答:1

Terraform = v1.8.2 AWS 提供商 = >= 5.30 来自 hashicorp/aws

尝试使用 terraform 创建 AWS 资源名称以包含其创建日期+时间。 这是为了序列化资源以进行替换(以避免错误“具有该名称的资源已存在”),并使该序列字符串成为有用的内容而不是随机的。 我已经添加了创建的日期作为资源标签,但名称中的时间戳会很有帮助。

例如所需的资源名称 名称 =“my-app-20240707T1932”

代码片段

locals{
 name = "my-app"
 dateyear = formatdate("YYYYMMDD", timestamp()) # e.g. 20240707
 dateyeartime = formatdate("YYYYMMDD'T'hhmm", timestamp()) # e.g. 20240707T1932
}

module "aurora" {
  source = "..."
  name            = "${local.name}-${local.dateyeartime}"
}

如果我使用

"${local.name}-${local.dateyear}"
变量(即没有“T”),它可以正常工作(但不符合我期望的包含时间的结果)。 如果我使用
"${local.name}-${local.dateyeartime}"
,则会收到此错误:

错误:“cluster_identifier”中仅允许使用小写字母数字字符和连字符

问题是日期内的

'T'
,这需要在日期周围使用双引号,从而导致双引号内的双引号内的单引号。

是的,我可以省略“T”,但这样我就不会挣扎 3 个小时并与你们这些好人互动了。

期望的结果是这样的资源名称: 我的应用程序20240707T1932

amazon-web-services datetime terraform quotes string-concatenation
1个回答
0
投票

如果我在

terraform console
你的
formatdate
T
中运行,我会得到以下输出:

> formatdate("YYYYMMDD'T'hhmm", timestamp())
"20240708T1015"

因此,问题不在于如何嵌入

T
,而是
T
是大写的(如 @Phil 建议的那样)。


未来给您的一个建议是使用

terraform console
命令 (docs) 快速测试和迭代您的表达式。我认为它是一个非常强大的工具,可以提高您对 terraform 的理解并加快您的开发速度。

© www.soinside.com 2019 - 2024. All rights reserved.