(작성중입니닷..)
파일업로드를 추가하기 위해서 프로비저너 파일을 aws 인스턴스 리소스에 추가할 수 있다.
→ 리눅스의 경우 ssh 스크립트를 이용한다.
resource "aws_instance" "example"{
ami = "${lookup(var.AMIS,var.AWS_REGION)}"
instance_type = "t2.micro"
provisioner "file" {
source = "script.sh"
destination = "/opt/script.sh"
connection {
user = "${var.instance_username}"
password = "${var.instance_password}"
}
}
}
ssh 키 쌍을 사용하려면 이름을 지정할 또 다른 리소스가 필요하다.
키페어 : 비공개키와 공개 키를 생성한다는 것.
비공개키를 passwd 대신 지정한다.
이는 ssh 를 통해 ex2 인스턴스에 로그인하고 이 script.sh 를 업로드하는데에 사용된다.
resource "aws_key_pair" "edward-key"{
key_name = "mykey"
public_key = "ssh-rsa my-public-key"
}
resource "aws_instance" "example"{
ami = "${lookup(var.AMIS,var.AWS_REGION)}"
instance_type = "t2.micro"
key_name = "${aws_key_pair.mykey.key_name}"
provisioner "file"{
source = "script.sh"
destination = "/opt/script.sh"
connection {
user = "${var.instance_username}"
private_key="${file(${var.path_to_private_key)}}}"
}
}
}
aws keypair 가 있어야만 로그인가능
chmod로 권한 변경하는 remote-exc 프로비저너도 포함할것
자 이제 데모!
((데모))
ssh 키 만드는법
ssh-keygen -f mykey


스크립트 파일 내용

해당 파일이 복사된 현황
terraform apply

스크립트를 사용해서 원하는 모든 소프트웨어를 프로비저닝할 수 있고, 다양하고 많은 메커니즘이 있다고 한다!
테라폼은 생성한 모든 리소스의 속성을 유지한다.
이러한 속성들은 쿼리되고, 출력될 수 있고 이는 귀중한 정보를 출력하거나 외부 소프트웨어에 정보를 제공하는 데 유용할 수 있다.
output "ip" {
value = "${aws_instance.example.public_ip}"
}
aws 리소스의 공용 ip주소를 나타낼 수 있다.
스크립트에서도 속성을 사용할 수 있다.
provisioner "local-exec"{
command = "echo ${aws_instance.example.private_ip} >> private_ips.txt"
}
}
리소스가 생성될 때마다 프라이빗 ip가 텍파에 추가되는
인프라 프로비저닝 후에 자동화 스크립트를 시작하는 경우에 유용하다고
예컨대, ansible 호스트 파일에 ip주소를 채우고 ansible 플레이북을 사용해서 해당 호스트의 소프트웨어를 프로비저닝 할 수 있다고한다.
((데모))
ip 주소 이외에, 이름, 예시, 인스턴스 유형을 넣고 스크립트 또는 파일로 전송할 수 있다.

참..신기한 기술이다. 쩝
이것이 바로! 테라폼이 원격 상태를 추적하는 방식이다.
원격 상태가 변경되고 terraform apply 를 다시 누르면 테라폼이 올바른 원격 상태를 다시 충족하도록 변경한다.
version control 에서 terraform.tfstate를 유지할 수 있다.
예를들어 git
테라폼의 백엔드 기능?
Backend Configuration - Configuration Language | Terraform | HashiCorp Developer
원격 상태를 구현하는법?
원격에 있는걸 읽기전용으로 이용하려면
data "terraform_remote_state" "aws-state"{
backend = "s3"
config {
bucket = "terraform-state"
key = "terraform.tfstate"
access_key = "${var.AWS_ACCESS_KEY}"
secret_key = "${var.AWS_SECRET_KEY}"
region = "${var.AWS_REGION}"
}
}
((데모))
s3 백엔드를 사용해서 s3에서 {terraform state}를 사용하는 방법