升级至 Terraform 0.12 后 “transport is closing” 错误

39次阅读
没有评论

问题描述

在升级至 Terraform 0.12 后,尝试运行 terraform apply 命令时,遇到了错误信息 “transport is closing”。错误信息如下所示:

module.elasticsearch.module.ec2.aws_instance.this[0]: Modifying... [id=i-075090c94e5117ce3]module.elasticsearch.module.ec2.aws_instance.this[1]: Modifying... [id=i-01fddbae2487e2573]Error: rpc error: code = Unavailable desc = transport is closingError: rpc error: code = Unavailable desc = transport is closingReleasing state lock. This may take a few moments...

此外,用户在日志中还发现了一些错误信息:

[DEBUG] plugin: plugin process exited: path=/home/user/env-beta/.terraform/plugins/linux_amd64/terraform-provider-aws_v2.25.0_x4 pid=25405 error="exit status 2"2019/08/29 14:47:18 [DEBUG] module.elasticsearch.module.ec2.aws_instance.this[1]: apply errored, but we're indicating that via the Error pointer rather than returning it: rpc error: code = Canceled desc = context canceled2019/08/29 14:47:18 [DEBUG] module.elasticsearch.module.ec2.aws_instance.this[0]: apply errored, but we're indicating that via the Error pointer rather than returning it: rpc error: code = Unavailable desc = transport is closing2019/08/29 14:47:18 [ERROR] module.elasticsearch.module.ec2: eval: *terraform.EvalApplyPost, err: rpc error: code = Canceled desc = context canceled2019/08/29 14:47:18 [ERROR] module.elasticsearch.module.ec2: eval: *terraform.EvalSequence, err: rpc error: code = Canceled desc = context canceled2019/08/29 14:47:18 [ERROR] module.elasticsearch.module.ec2: eval: *terraform.EvalApplyPost, err: rpc error: code = Unavailable desc = transport is closing2019/08/29 14:47:18 [ERROR] module.elasticsearch.module.ec2: eval: *terraform.EvalSequence, err: rpc error: code = Unavailable desc = transport is closing

用户还注意到一个奇怪的问题,即 Terraform 想要将 <code>credit_specification {}</code> 添加到 EC2 实例中,但实例类型是 i3.large…

解决方案

请注意以下操作可能存在版本差异及风险,请在操作前做好备份。

方案1:降级 terraform-provider-aws 插件版本

该问题可能是 terraform-provider-aws 插件版本不兼容 Terraform 0.12 导致的。用户可以尝试降级 terraform-provider-aws 插件版本至 2.5.0,这是最后一个正常工作的版本。

操作步骤

  1. 打开你的 Terraform 配置文件。
  2. 找到对应的 provider “aws” 配置。
  3. 指定 provider 版本为 2.5.0,如下所示:
provider "aws" {
  version = "2.5.0"
  # 其他配置项...
}
  1. 保存文件并退出。
  2. 运行 terraform init 更新插件。
  3. 运行 terraform apply 重新部署你的配置。

方案2:排除 credit_specification 问题

Terraform 提示要添加 <code>credit_specification {}</code> 到 EC2 实例,但实例类型是 i3.large,这可能是一个配置问题。你可以排除这个问题,确保配置正确。

操作步骤

  1. 打开你的 Terraform 配置文件。
  2. 找到与 EC2 实例相关的配置块。
  3. 确认实例类型是否正确设置为 i3.large,如下所示:
resource "aws_instance" "example" {
  ami           = "ami-12345678"
  instance_type = "i3.large"
  # 其他配置项...
}
  1. 检查是否有其他配置项与 credit_specification 相关。如果不需要该配置,可以将其从配置中删除。
  2. 保存文件并退出。
  3. 运行 terraform apply 重新部署你的配置。

方案3:联系社区支持

如果以上方法无法解决问题,你可以尝试联系 Terraform 社区寻求帮助。在社区论坛或 GitHub 上提交你遇到的问题,其他有经验的用户和开发者可能会提供更详细的解决方案或指导。

总结

在升级至 Terraform 0.12 后遇到 “transport is closing” 错误,可能是 terraform-provider-aws 插件版本不兼容或配置问题导致的。你可以尝试降级插件版本、排除配置问题,或联系社区寻求帮助来解决这个问题。在操作前请做好备份,并确保遵循最佳实践。

正文完