Terroform 学习笔记 - 属性调用和输出结果

和Cloudformation类似,我们也可以在Terraform的模板文件里面定义output ,输出对应的resource的属性。

例1:配置一个EIP和S3,输出他们的属性

provider "aws" {
  region     = "us-west-2"
  access_key = "AKIA23243L4J2KL243GX"
  secret_key = "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"
}

resource "aws_eip" "lb" {
  vpc      = true
}

output "eip" {
  value = aws_eip.lb.public_ip
}

resource "aws_s3_bucket" "mys3" {
  bucket = "beanxyz-attribute-demo-001"
}

output "mys3bucket" {
  value = aws_s3_bucket.mys3
}

执行之后的结果如下所示,可以看出来使用output的时候如果不指定具体的某一个attribute属性,他就会把所有的属性都列出来

Terroform 学习笔记 - 属性调用和输出结果

如果不确定可以有哪些属性可以引用,可以参考 registry.terraform.info 里面的文档。

例2:配置一个EC2和 EIP,并把EIP分配给EC2

provider "aws" {
  region     = "us-west-2"
  access_key = "AKKSLK22DDKJPC43GX"
  secret_key = "fw2fia3asdTTSSShTsd97KM73+M7JJx82Fkz9"
}

resource "aws_instance" "myec2" {
 ami = "ami-082b5a644766e0e6f"
 instance_type = "t2.micro"
}

resource "aws_eip" "lb" {
vpc      = true
}

resource "aws_eip_association" "eip_assoc" {
instance_id   = aws_instance.myec2.id
allocation_id = aws_eip.lb.id
}

resource "aws_security_group" "allow_tls" {
name        = "kplabs-security-group"

ingress {
  from_port   = 443
  to_port     = 443
  protocol    = "tcp"
  cidr_blocks = ["${aws_eip.lb.public_ip}/32"]

}
}

注意,在上面的例子里面,我引用其他resource的属性的时候,有的是直接调用的,比如id,有的加了$()来进行调用,比如ip地址块。在旧版本里面,都需要使用$()这种格式;在新版本里面,绝大部分的属性调用都可以直接使用,但是有一些个别的属性,还是需要使用$()这种方式。如果为了避免混淆,我可以全部都继续使用$()这种格式

运行结果

Terroform 学习笔记 - 属性调用和输出结果

Terroform 学习笔记 - 属性调用和输出结果

猜你喜欢

转载自blog.51cto.com/beanxyz/2636984