小編之前用Terraform建立的EC2,因為都沒有任何額外設定。剛好利用這個機會…透過設定Terraform方式…來把key Pair加上去,再「對外開放SSH連線」,看看中間Plan Apply的過程,來進一步熟悉Terraform的使用。
provider "aws" {
region = "ap-northeast-1"
}
terraform {
backend "s3" {
bucket = "bright-terraform-backend"
key = "terraform.tfstate"
region = "ap-northeast-1"
}
}
resource "aws_instance" "example" {
ami = "ami-0689a2637ab83e607"
instance_type = "t2.micro"
key_name = "bright_key"
vpc_security_group_ids = [
"${aws_security_group.bastion_from_bright.id}"
]
}
resource "aws_security_group" "bastion_from_bright" {
name = "bastion_from_bright"
description = "ssh demo"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["61.xxx.xxx.xxx/32"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
如果邦友有跟著系列文章(Terraform Backends說明)走的話…以上範例異動區塊分別是
resource "aws_instance" "example" {...}
:
"bright_key"
["${aws_security_group.bastion_from_bright.id}"]
aws_security_group
的資源,可是你可能會發現…下面的區塊並沒有id
(id),簡單說,就是當資源建立的時候被輸出的「資源屬性」。Terraform中資源相依有分成隱性/顯性,而插值的語法,就是隱性的。所以Terraform可以因此知道resource "aws_security_group" "bastion_from_bright"
需要「先建立」,而resource "aws_instance" "example"
就可以取得它的「資源屬性」(還有更多細節在官網喲…)resource "aws_security_group" "bastion_from_bright" {...}
:
AWS Security Group文件:是一種虛擬的防火體,用來控制instance的封包走向(從哪裡來,往哪裡去)。
terraform apply
小編目前用的Terraform版本是v0.11.10,所以可以直接apply,它最後會提示你是否要執行(yes
),另外要說明的是,因為Key Pair需在啟動instance時加上去,所以執行該計劃時,instance會重新建一個新的…輸出的細節很多,就自己探索吧。
待續…