Terraform 计划未更新 AWS 任务定义,使用最新活动修订值

87次阅读
没有评论

问题描述

在使用 Terraform 管理 AWS ECS 容器时遇到了一个问题。他的公司最近启动了一个新的网站,其中的 WordPress 托管在 AWS ECS 容器中。在对网站基础架构进行了一些调整后,他注意到在进行 Terraform 计划时,会收到一条消息,指出有一些变更发生在 Terraform 之外,其中一个变更是 ECS 任务定义的修订版本号。然而,当 Terraform 计划 ECS 任务定义时,它并没有保留最新的修订版本号(31),而是回退到由 Terraform 最后一次应用的版本(19)。他猜测这个数字记录在 Terraform 状态中。他的问题是:在进行 Terraform 计划时,是否有任何方式(参数或属性)可以使 Terraform 计划 ECS 任务定义时使用 ECS 容器中部署的最新活动版本,即版本 31?部署是通过 Bitbucket 流水线进行的,并且镜像存储在 ECR 中。

解决方案

请注意以下操作可能存在版本差异,建议在操作前备份相关数据。
在 Terraform 中,可以通过使用 terraform plan --refresh-only 命令来保持状态文件与实际基础设施的变更同步。然后,可以使用 terraform apply --refresh-only 命令将这些变更保存到 Terraform 状态文件中。这将允许你在 Terraform 计划和应用期间保持当前修订版本处于活动状态。

以下是相关步骤:
1. 在你的 Terraform 项目目录中打开终端或命令行界面。
2. 运行以下命令来执行 Terraform 计划,但仅刷新状态,不应用实际变更:
bash
terraform plan --refresh-only

这将更新 Terraform 状态文件以反映当前实际基础设施状态。
3. 确认计划输出中是否显示了与实际基础设施变更相关的信息。如果你满意这些变更,可以继续进行下一步。
4. 运行以下命令来将实际变更保存到 Terraform 状态文件中:
bash
terraform apply --refresh-only

这将更新 Terraform 状态文件,使其与实际基础设施保持同步,并将当前的 ECS 任务定义修订版本保存在状态文件中。

通过执行上述步骤,你可以在 Terraform 计划和应用期间保持 ECS 任务定义的最新修订版本处于活动状态。请记住,在执行任何操作之前,建议备份相关数据以防意外情况。

总结

通过使用 terraform plan --refresh-onlyterraform apply --refresh-only 命令,你可以保持 Terraform 状态文件与实际基础设施状态的同步。这将确保在 Terraform 计划和应用期间,ECS 任务定义的最新修订版本保持活动状态,从而解决了你遇到的问题。

希望这个解决方案对你有所帮助!如果你还有其他问题或需要进一步的支持,请随时提问。

正文完