如何在`terraform`中创建带有时间戳的文件?

Joey Yi Zhao

我使用下面的配置来生成一个文件名timestamp,它将在许多不同的地方使用。

variable "s3-key" {
  default = "deploy-${timestamp()}.zip"
}

但有Error: Function calls not allowed错误。如何使用timestamp变量?

马丁·阿特金斯

变量默认值尤其是常量值,但局部值允许从变量派生的任意表达式:

variable "override_s3_key" {
  default = ""
}

locals {
  s3_key = var.override_s3_key != "" ? var.override_s3_key : "deploy-${timestamp()}.zip"
}

然后,您可以使用local.s3_key配置中的其他地方来访问此派生值。


话虽如此,Terraform 旨在创建长期运行的基础设施对象,因此包含时间戳通常(但并非总是!)表明存在设计问题。在这种特殊情况下,看起来像是使用 Terraform 创建用于部署的应用程序工件,这是 Terraform可以做的事情,但 Terraform 通常不是此类工作的最佳工具。

相反,考虑将您的构建和部署分成两个单独的步骤,其中构建步骤是使用您选择的任何单独工具实现的——甚至可能只是一个 shell 脚本——并在 S3 中生成一个版本化(或时间戳)工件。然后您可以使用该版本或时间戳参数化您的 Terraform 配置以实现“部署”步骤:

variable "artifact_version" {}

locals {
  artifact_s3_key = "deploy-${var.artifact_version}.zip"
}

这种分离的一个优点是,通过将版本化工件与长期存在的 Terraform 对象分离,您将默认保留历史工件,因此如果您部署并发现问题,您可以选择切换回已知良好的现有工件只需使用较旧的工件版本重新运行部署步骤 (Terraform)。如果您改为直接使用 Terraform 管理工件,Terraform 将在创建新工件之前删除您的旧工件,因为这是 Terraform 的预期使用模型。

在 HashiCorp 指南Serverless Applications with AWS Lambda and API Gateway 中有关于此模型的更多详细信息您没有说.zip此处文件是针对 Lambda 的,但类似的原则适用于任何版本化工件。这类似于其他部署模型的工作流程,例如为每个版本构建单独的 Docker 镜像或 AMI;在每种情况下,Terraform 都更适合用于选择由其他工具构建的现有工件的过程,而不是用于创建这些工件本身。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL查询创建带有时间戳的CSV文件

如何从带有时间戳的图像列表中渲染视频?

如何在Perl中获得带有时间戳的微秒?

在URL中带有时间戳的Spring RequestMapping

如何获取带有时间戳的帧,其中从python中的视频转换帧

如何使用writerow将带有时间戳的整数流写入.csv文件?

在SSIS导出程序包中,如何重命名带有时间戳的目标excel文件?

发布构建事件,该事件将名称中带有时间戳的文件压缩

如何从带有时间戳的熊猫数据框中删除未更改的值?

如何在BASH中同时创建带有时间戳的日志和错误处理?

如何从bash脚本中将带有时间戳的stdout和stderr复制到文件中?

如何在UTC中获得时间戳但没有时间?

在Winscp中创建自定义命令,该命令将在文件创建时创建带有时间戳的日志文件

WinSCP中的自定义命令,该命令在创建文件时创建带有时间戳的日志文件

如何在雪花中使用带有时间戳的滞后功能?

使用数据框scala创建带有时间戳的csv文件作为文件名

在Kubuntu中创建更改日志(带有时间戳)?

如何使用命令行创建带有时间戳的文件

我创建了一个带有时间戳的文件,由于某种原因,我无法在文件中添加换行符

查找并打印带有时间戳的文件

删除文件名带有时间戳的文件夹中的所有文件

如何使用log4j2将日志保存到带有时间戳的文件中

带有时间戳的巨大 CSV 文件,创建一个包含一年中每个月条目数的图表

fluentd - 如何获取带有时间戳的日志文件名

如何比较单个文本文件中的行(具有时间戳)?

KDB/Q:如何在给定时间戳之前获取带有时间戳的记录

如何将带有时间戳的excel文件名转换为日期时间格式

如何在带有时间的日期的列表中过滤时间范围或时间范围?

在 pyspark 中创建带有时间戳和 groupby 的 KPI