먼저 어제 만들었던 인프라를 삭제해둔 상태이기 때문에,
이 상태에서 시작해서 다시 하나하나 추가해보면서 확인해보자.
지금 상태는
이렇게 테라폼 버전 정보만 남아있는 상태이다.
다 삭제했으니 당연한건 같다.
serial과 lineage 값은 자동 부여되는 값이 아닐까 싶다.
이제 어제했던 대로 하나씩 추가해보면서
값이 어떻게 바뀌는지 확인해보자.
- 먼저 web_admin이라는 키 페어를 추가했을 때
resource "aws_key_pair" "web_admin" {
key_name = "web_admin"
public_key = file("~/.ssh/web_admin.pub")
}
- resource를 추가하니, resource 부분에 내가 추가한 내용이 그대로 들어가 있는 모습을 볼 수 있다.
- type에 aws_key_pair는 web_admin.tf에 추가한 resource인 aws_key_pair의 이름이 그대로 들어간 모습이다.
- name도 역시 web_admin.tf에 추가한 내용 그대로 들어갔다.
- 그 외 인스턴스에 들어간 내용은 terrafrom plan을 실행했을 때 나오는 값이 그대로 들어간 모습이다.
사실 여기까지만 해봐도 내가 추가한 내용이 .tfstate에 들어가는구나를 알 수 있지만,
조금 더 해보자. 어제 했던 내용을 다 추가한 후 다시 확인해본다.
- aws_security_group, aws_instance, aws_db_instance 추가
예상한대로 내가 추가한 resource들이 다 추가된 모습이다.
안에 내용이 길어서 전체 내용을 다 가져올 순 없었다.
보다보면
이런식으로 비어 있는 값들이 있는데,
값을 한번 넣어보고 싶어졌다.
해당 값은 aws_db_instance밑에 있으니 아래처럼 하면 되지 않을까?
resource "aws_db_instance" "web_db" {
# DB 사이즈, 기가 단위
allocated_storage = 8
# 어떤 sql 쓸건지
engine = "mysql"
engine_version = "8.0.33"
instance_class = "db.t2.micro"
## db_name 추가
db_name = "mysql"
username = "admin"
# password는 임시 비밀번호로 쓸거라 대충 만들고 나중에 DB 접속해서 변경
password = "11112222"
# 인스턴스 삭제시 최종 스냅샷 스킵 여부, 디폴트는 false인데 이러면 삭제가 힘들어 true로 변경
skip_final_snapshot = true
}
aws_db_instance 밑에 db_name 항목을 추가한 뒤
"mysql" DB를 물도록 한번 해봤다.
이후 plan을 실행하니,
이런식으로 db_name이 추가된 모습이다.
이제 apply후 .tfstate 파일을 확인해보자.
apply를 하자마자, DB 관련 내용을 삭제하는 모습이다.
관련 설정 사항이 바꼈으니 당연한 건 같다.
이후 다시 DB 잡으면서 에러가 발생했다.
뭐 당연한 에러가 발생한거다.
지금은 ec2 내에서 mysql 설치가 안돼서 다른 테스트용 DB를 만들어두지 못한 상황이기 때문에,
기본으로 생성되어 있는 DB에 접근하려 했으니 안되는게 당연한 것 같다.
어쨋든, 이런 식으로 속성 값을 추가할 수 있다는 걸 알게됐다.
이제 .tfstate를 확인해보자.
확인해보니, DB는 에러가 났기 때문에,
아예 내용이 빠져있었다..
여튼 이런식으로 대강 .tfstate 파일에 대해 알아봤다.
정리해보자면,
- .tfstate파일은 apply시에 만들어지고, 이 안에는 내가 추가한 인프라에 resource, terraform version등에 대한 정보가 들어있다.
- 내가 뭔가 resource에 대한 값을 수정하거나 변경하면 그에 대한 내용이 추가된다.
- 수정한 내용에 문제가 있어 error가 발생한 경우에는 resource 내용 자체가 삭제된다.
이정도인 것 같다.
사실 확인해보고 싶은 건 많긴한데,
또 비용 지불할까봐 함부로 하질 못하겠다..
일단 이정도만 알아보고 이번 글은 마친다.