Terraform-在资源调用之前或期间本地运行



对于terraform,resource,local是在调用资源之后还是之前运行的?

原因是,当我的本地在下面的代码中运行时,并不是aws_vpn_connection.VPN-CONN中的所有资源都准备好了,所以我的tga_vpn并不完整,因此,并不是所有资源都在aws_ec2_transit_gateway_route_table_propagation资源中创建

我必须再次运行地形应用程序来添加剩余的资源。

locals {
tga_vpn = flatten([
for vpn_conn in aws_vpn_connection.VPN-CONN: 
.
. 
])
}
resource "aws_ec2_transit_gateway_route_table_propagation" "TGW-RT-PROP" {
count = length(local.tga_vpn)
something1 = lookup(local.tga_vpn[count.index], "id1", null)
something2 = lookup(local.tga_vpn[count.index], "id2", null)
} 

我还添加了依赖于aws_ec2_transit_gateway_route_table_propagation资源中的aws_vpn_connection,但这没有帮助。

或者有没有办法为本地添加depends_on

谢谢

在Terraform语言本身中,每个本地值本身就是依赖关系图中的一个节点,因此您的资源对local.tga_vpn的引用已经告诉Terraform,aws_ec2_transit_gateway_route_table_propagation.TGW-RT-PROP依赖于local.tga_vpn所依赖的一切。同样,本地值指的是aws_vpn_connection.VPN-CONN,因此这里的依赖链是:

  • aws_vpn_connection.VPN-CONN可能有一些其他依赖项,但我们在您的部分示例中看不到这些依赖项
  • local.tga_vpn依赖于aws_vpn_connection.VPN-CONN
  • aws_ec2_transit_gateway_route_table_propagation.TGW-RT-PROP依赖于local.tga_vpn

鉴于此,如果您看到aws_ec2_transit_gateway_route_table_propagation.TGW-RT-PROP的操作在aws_vpn_connection.VPN-CONN的操作完成之前发生,那么不幸的是,这表明AWS提供商或远程AWS API中存在问题。尽管AWS提供商努力解决许多情况,但AWS API中的一些对象是;最终一致";,这意味着不能保证你可以编写一个新对象,然后立即尝试使用它。相反,由于AWS是一个分布式系统,这种更改可能需要一些时间才能对AWS的所有其他部分完全可见。

在这种情况下,如果AWS API没有提供明确确定对象何时实际上被完全触发的方法,那么不幸的是,我们被迫使用诸如Marcin描述的time_sleep资源类型之类的解决方法,这实际上并不能解决问题,但与Terraform在其依赖关系就绪后立即自然开始处理下游对象相比,它至少通过给远程系统更长的时间来实现一致性,使问题不太可能发生。

如果您大致知道aws_vpn_connection在创建后需要多长时间才能完全初始化并准备使用,那么您可以使用time_sleep资源来延迟aws_ec2_transit_gateway_route_table_propagation的执行。

例如,假设它需要30秒,你可以做:

resource "time_sleep" "wait_30_seconds" {
depends_on = [aws_vpn_connection.VPN-CONN]
create_duration = "30s"
}
resource "aws_ec2_transit_gateway_route_table_propagation" "TGW-RT-PROP" {
count = length(local.tga_vpn)
something1 = lookup(local.tga_vpn[count.index], "id1", null)
something2 = lookup(local.tga_vpn[count.index], "id2", null)
depends_on = [time_sleep.wait_30_seconds]
} 

相关内容

  • 没有找到相关文章

最新更新