首页 » Terraform » 正文

Terraform resource之间的依赖问题

我们日常工作中,不可能只是创建一个instance这一个任务,我们要给instance创建静态IP地址,我们要给他创建security group,我们要为instance 创建ELB等等…

那么当我们一个tf文件中存在多个资源(resource)的时候,他们之间的依赖关系以及创建的先后顺序我们该如何处理

我们来看一下新的文件内容

例子中我们在创建insance的资源之后,又创建了一个新的资源(Resource),类型是aws_eip 这个资源的名字叫做: ip (注意,并不是我们创建在资源在aws中的Name叫ip)

注意,新的资源ip中有一个参数是instance,这个参数其实就是让我们输入我们的Elastic IP 创建完成后分配给哪个instance ,这个时候我们输入了

aws_instance.jeremyzhang-test-instance.id  这个命名结构为:资源类型.资源的名字.资源中的具体参数

让我们尝试运行脚本

等我们输入yes以后

这个时候我们要注意,因为我第二个resource使用到了第一个resource的id,这个id必须是第一个resource创建成功后才会有的,Terraform会隐式依赖的方式决定以什么顺序来创建资源

但是有些时候,资源与资源之间没有这种显示的调用,但实际上确实是存在依赖关系的,这个时候我们就需要使用 depends_on 

举个例子,我们要创建的ec2 需要用一个特殊的S3,但是具体的调用关系是在代码中调用的, 并不是显示的声明依赖关系

例子:

正如例子中解释的,我们的aws_instance资源 depend_on aws_s3_bucket.example,也就是等同于告诉Terraform要先创建s3然后创建ec2

 

Zhiming Zhang

Senior devops at Appannie
一个奔跑在运维路上的胖子
Zhiming Zhang

发表评论