问题描述
在使用 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-only
和 terraform apply --refresh-only
命令,你可以保持 Terraform 状态文件与实际基础设施状态的同步。这将确保在 Terraform 计划和应用期间,ECS 任务定义的最新修订版本保持活动状态,从而解决了你遇到的问题。
希望这个解决方案对你有所帮助!如果你还有其他问题或需要进一步的支持,请随时提问。