tf 확장자는 HCL(하시코프 설정언어)로 쓰이고, json형태로 파일을 작성하고 싶다면 .tf.json으로 붙이면된다.
처음은 provider 설정을 진행한다.
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_instance" "example" {
ami = "ami-40d28157"
instance_type = "t2.micro"
}
기본적인 테라폼 문법은 다음과 같다.
resource "PROVIDER_TYPE" "NAME" {
[CONFIG...]
}
provider : 인프라를 제공할 공급자type : 리소스의 종류name : 테라폼에서 해당 리소스를 지칭하는 식별자config : 리소스를 설정하는 변수 값테라폼을 수행하기 위한 공급자 플로그인들을 초기 설정한다.
plan : 테라폼을 통해 실제로 생성되고 변경되는 내역을 보여준다. history의 개념
실제 환경에 적용 전에 검증 용도로 쓰일 수 있다.
plan은 리눅스의 diff와 비슷하게 보인다. (+) 생성 (-) 제거 (~) 변경


인스턴스 생성을 시작하고 명령어를 수행한다.
실제로 actions을 수행하냐는 확인 옵션도 지원한다. yes를 기입하면 작동된다.
아래는 이미지 id가 잘 못되어 aws에서 다시 찾아 진행해보겠다.

실제 아래와 같이 인스턴스가 바로 생성되었다. 인스턴스 id도 동일한 모습이다.


git init
git add main.tf
git commit -m "Initial commit"
.gitignore를 통해서 깃에 추가할 때 실수로 특정 파일이 추가되지 않도록 설정한다.
.terraform
.tfstate
.tfstate.backup 의 3개 파일들은 테라폼 코드와 상태등을 노출하고 있기 때문에 gitingore에 커밋한다.
git add .gitignore
git commit -m "Add a .gitigore file"
또한 개발자들이 모두 접근 가능한 공유 깃 저장소를 통해서 커밋하여 공유하고 변경이력을 받도록 한다.
#!/bin/bash
echo "Hello, World!" > index.html
nohup busybox httpd -f -p 8080 &
해당 명령어는 hello world를 출력하고 비지박스를 통해서 8080의 웹서버를 백그라운드(&)에서 동작시키는 명령어이다.
1024이하의 모든 포트를 사용하기 위해서는 root 권한이 필요하다. 해당 포트 사용시 공격자가 root 권한을 가질 수 있어 보안에 취약하다. 그래서 권한이 제한된 사용자로 웹서버를 가동시키는 8080 포트를 이루고 있다.
EOF는 여러 줄을 단락을 처리하는 테라폼 heredoc 문법이다.
웹 서버 동작시에는 보안그룹을 허용해줘야 하기 때문에 아래 내용도 추가한다
resource "aws_security_group" "instance" {
name = "terraform-example-instance"
ingress {
from_port = 8080
to_port = 8080
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}