[Terraform] Terraform으로 AWS EC2 서버 배포하기 (1)
Amazon EC2 인스턴스를 Default VPC에서
Terraform을 이용해 코드로 생성해보자
1. 공급자 (Provider) 구성
테라폼을 사용하기 위한 첫번째 단계
AWS 공급자를 사용하고, 서울 리전에 인프라를 배포한다는 것을 의미함
1-1. 작업 폴더 생성 & 액세스키 등록
액세스키 등록을 다하고나면 aws s3 ls 명령을 통해서 접근이 잘 되는지 확인
mkdir ec2_test
cd ec2_test
aws configure
aws s3 ls
액세스키에 대한 설명은 아래 포스팅에서 확인할 수 있음
1-2. 공급자 구성
Cloud9에서 New file로 생성해줘도 되고 vi를 사용해서 생성을 해도 됨
파일 명은 main.tf
provider "aws" {
region = "ap-northeast-2"
}
아래 명령어를 통해 공급자 확인 가능
terraform providers
2. Terraform init
테라폼 작업 디렉토리 초기화
공급자가 구성된 작업 디렉토리에서 명령어를 실행함
테라폼 코드를 스캔하여 어느 공급자인지를 확인 한 뒤 필요한 공급자 코드를 다운
terraform init
초기화 중 생성된 숨겨진 디렉토리에 대해 조금 더 살펴보자
공급자 (Provider) 의 플러그인 모듈 및 저장을 캐싱함
3. 리소스 (Resource) 구성
공급자마다 서버, DB, LB와 같은 다양한 종류의 리소스가 있음
테라폼에서 리소스를 생성할 때 사용하는 구문은 아래와 같음
resource "<PROVIDER>_<TYPE>" "<NAME>" {
[CONFIG ...]
}
- provider : aws와 같은 공급자의 이름
- type : 서버, DB, LB와 같이 해당 공급자에서 생성 할 리소스 유형
- name : 테라폼 코드에서 리소스를 참조할 때 사용하는 식별자
앞서 말했던 것 처럼 Amazon EC2 인스턴스를 테라폼을 통해 생성해보자
이름은 ec2.tf로 생성
#ec2
resource "aws_instance" "web" {
ami ="ami-0c9c942bd7bf113a2" #ubuntu 22.04
instance_type = "t2.micro"
tags = {
Name = "tf-ec2"
}
}
AMI의 ID 는 ec2 콘솔의 AMI 카탈로그에서 확인 할 수 있음
data를 통해서 가져올 수 있는 방법이 있는데, 그건 다음 포스팅에서 다뤄보는걸로 😊
리소스 별 문법이나 구문, 옵션에 관한 건 공식 Document에 자세히 나와있음
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance
4. Terraform Plan
테라폼이 수행 할 코드를 직접 확인
코드 내용을 실제 운영 환경에 적용하기 전에 작업 내용을 세부적으로 확인 가능
terraform plan
5. Terraform apply
작성된 코드를 실제 운영 환경에 적용하는 것
명령어를 실행해 AWS EC2 인스턴스를 생성할 수 있고, 결과값이 plan 명령어와 같은 것을 확인할 수 있음
terraform apply
-auto-approve 옵션을 사용하면 yes 입력을 생략하고 진행 가능
terraform -auto-approve
6. Terraform destroy
생성했던 리소스를 삭제할 수 있음
destroy 또한 -auto-approve옵션을 사용하면 yes 입력을 생략하고 진행 가능
terraform destroy
terraform destroy --auto-approve
이렇게 Terraform을 통해 EC2를 생성 & 삭제 해봤음
매우 편리한데, 지금 생성해준 EC2는
pem key도 보안그룹도 VPC도 지정되어있지않은 (default) 그냥 깡통 EC2다
다음 포스팅에서 Userdata를 통해 EC2에 nginx를 설치하고,
보안그룹을 지정해주는 과정까지 진행해보자
위처럼 단일 EC2 서버를 생성하는 건 굉장히 쉬운데
코드가 늘어가면 늘어갈수록 굉장히 복잡해질 예정 😵
'📚 IaC > Terraform' 카테고리의 다른 글
[Terraform] 템플릿 파일(Templatefile) (0) | 2023.06.21 |
---|---|
[Terraform] 테라폼 변수와 출력 (0) | 2023.06.20 |
[Terraform] Terraform으로 AWS EC2 서버 배포하기 (2) (0) | 2023.06.12 |
[Terraform] Terraform 기본 명령어 (0) | 2023.06.05 |
[Terraform] Terraform이란? (0) | 2023.06.04 |