问题描述
在使用Terraform配置VPC Peering连接时,遇到一个问题。问题出现在资源配置文件中的aws_vpc_peering_connection_options
部分,具体涉及DNS设置。用户描述了问题现象以及引发问题的部分配置。
具体错误如下:
Error: error modifying VPC Peering Connection (pcx-084fe8578b2935b6a) Options: OperationNotPermitted: Peering pcx-084fe8578b2935b6a is not active. Peering options can be added only to active peerings.
用户提到如果等待一段时间再次运行terraform apply
,问题就会解决,因为VPC已经有足够的时间变为活动状态。用户还提到最初尝试将DNS设置与aws_vpc_peering_connection
资源一起配置,但仍然遇到相同的错误,因此将其分开配置也未能解决问题。用户猜测是否需要在应用选项之前进行某种延时操作。
解决方案
请注意以下操作可能会受版本差异影响,做好备份并谨慎操作。
方案1
经过分析,问题的根本在于DNS设置的应用发生在VPC Peering连接尚未激活(approved)时。这可能导致Terraform依赖顺序问题。可以通过修改aws_vpc_peering_connection_options
中的vpc_peering_connection_id
来解决这个问题,以确保Terraform的依赖关系正确。
具体操作如下:
1. 打开配置文件,找到aws_vpc_peering_connection_options
部分。
2. 将vpc_peering_connection_id
的值修改为aws_vpc_peering_connection_accepter.sb_vpc_peering_accepter.id
,这样Terraform的依赖树会自动按正确的顺序执行。
修改前的配置:
resource "aws_vpc_peering_connection_options" "sb_vpc_peering_options" {
vpc_peering_connection_id = aws_vpc_peering_connection.sb_vpc_peering.id
accepter {
allow_remote_vpc_dns_resolution = var.accepter_dns_resolution
}
requester {
allow_remote_vpc_dns_resolution = var.requester_dns_resolution
}
}
修改后的配置:
resource "aws_vpc_peering_connection_options" "sb_vpc_peering_options" {
vpc_peering_connection_id = aws_vpc_peering_connection_accepter.sb_vpc_peering_accepter.id
accepter {
allow_remote_vpc_dns_resolution = var.accepter_dns_resolution
}
requester {
allow_remote_vpc_dns_resolution = var.requester_dns_resolution
}
}
通过这种方式,Terraform会在VPC Peering连接激活后才应用DNS设置,解决了问题。
方案2
另一种可能的解决方案是在配置中加入一个等待(sleep)的操作,确保VPC Peering连接足够时间变为活动状态再应用DNS设置。这种方法需要考虑合适的等待时间,以免过早应用DNS设置。
以下是一个简单的bash脚本示例,可以在VPC Peering连接变为活动状态后再应用DNS设置:
#!/bin/bash
# 启动VPC Peering连接
# ...(省略部分配置代码)
# 等待VPC Peering连接变为活动状态
while ! terraform show | grep -q "status = active"; do
sleep 5
done
# 应用DNS设置
terraform apply
在这个示例中,我们首先启动VPC Peering连接的配置。然后,使用一个循环来检查terraform show
输出是否包含status = active
,即VPC Peering连接变为活动状态。一旦连接变为活动状态,就应用DNS设置,再次运行terraform apply
。
这两种方案都可以解决问题,选择哪种取决于用户的需求和偏好。
方案3
如果用户在使用Terraform时遇到了问题,可以先检查相关文档和社区,有时可能会找到特定问题的解决方案。此外,升级Terraform到最新版本也有可能修复一些已知问题。