问题描述
在升级至 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,这是最后一个正常工作的版本。
操作步骤
- 打开你的 Terraform 配置文件。
- 找到对应的 provider “aws” 配置。
- 指定 provider 版本为 2.5.0,如下所示:
provider "aws" {
version = "2.5.0"
# 其他配置项...
}
- 保存文件并退出。
- 运行
terraform init
更新插件。 - 运行
terraform apply
重新部署你的配置。
方案2:排除 credit_specification 问题
Terraform 提示要添加 <code>credit_specification {}</code>
到 EC2 实例,但实例类型是 i3.large,这可能是一个配置问题。你可以排除这个问题,确保配置正确。
操作步骤
- 打开你的 Terraform 配置文件。
- 找到与 EC2 实例相关的配置块。
- 确认实例类型是否正确设置为 i3.large,如下所示:
resource "aws_instance" "example" {
ami = "ami-12345678"
instance_type = "i3.large"
# 其他配置项...
}
- 检查是否有其他配置项与
credit_specification
相关。如果不需要该配置,可以将其从配置中删除。 - 保存文件并退出。
- 运行
terraform apply
重新部署你的配置。
方案3:联系社区支持
如果以上方法无法解决问题,你可以尝试联系 Terraform 社区寻求帮助。在社区论坛或 GitHub 上提交你遇到的问题,其他有经验的用户和开发者可能会提供更详细的解决方案或指导。
总结
在升级至 Terraform 0.12 后遇到 “transport is closing” 错误,可能是 terraform-provider-aws 插件版本不兼容或配置问题导致的。你可以尝试降级插件版本、排除配置问题,或联系社区寻求帮助来解决这个问题。在操作前请做好备份,并确保遵循最佳实践。