테라폼이란?
테라폼(Terraform)은 HashiCorp가 개발한 오픈-소스코드형 IaC이다. HCL(.tf)이라는 선언형 구성 언어나 JSON을 사용하여 infrastructure를 정의하고 제공할 수 있습니다.
- https://en.wikipedia.org/wiki/Terraform_(software)
Setting
1. AWS IAM 계정 생성, 이때 엑세스키 발급을 같이 해주도록 합니다. 권한은 테스트를 위해서 poweruser 권한을 부여했습니다.
2. 테라폼 설치 (macOS 기준) & AWS CLI 설치
brew install terraform
brew install awscli
3. terraform -v로 설치 확인해줍니다.
4. (선택) VSCode terraform Extension 설치
5. provider.tf 파일 작성
* 여기서 provider(프로바이더)란 : Terraform은 provider라는 플러그인을 사용하여 클라우드 공급자, SaaS 공급자 및 기타 API와 상호 작용합니다. 각 provider는 Terraform이 관리할 수 있는 리소스 타입이나, 데이터 소스를 추가합니다.
provider "aws" {
region = "us-west-2"
access_key = "my-access-key"
secret_key = "my-secret-key"
}
6. Git 등에 배포를 위해서 환경변수로 빼고 싶다면 다음과 같은 방식으로 해결할 수 있습니다.
(방법1)
provider "aws" {}
$ export AWS_ACCESS_KEY_ID="anaccesskey"
$ export AWS_SECRET_ACCESS_KEY="asecretkey"
$ export AWS_REGION="us-west-2"
$ terraform plan
(방법2)
aws cli를 이용해서 프로필 설정
aws configure --profile <PROFILE NAME>
AWS Access Key ID [None] : Access Key ID
AWS Secret Access Key [None] : Secret Access Key
Default region name [None] : ap-northeast-2
Default output format [None] :
[myprofile]
aws_access_key_id = accesskey
aws_secret_access_key = secretkey
provider "aws" {
profile = "myprofile"
region = "${var.region}"
}
7. 테라폼 프로젝트 Initializing, 해당 프로바이더(AWS)에 대한 플러그인을 설치해준다.
terraform init
* 설치 문구에 보면 "hashicorp/aws v4.61.0" 라는 것을 볼 수 있는데, 테라폼과 프로바이더는 각자 다른 버전으로 관리된다.
EC2 정의 및 배포
1. EC2 정의, Ubuntu 22.04 LTS 버전을 생성할 것이고, 가장 저렴한 t2.nano를 생성해보겠습니다.
* 필자는 이미 쓰고 있는 인스턴스가 있어 프리티어가 의미 없지만, 연습용으로 프리티어를 쓰실분은 t2.micro를 쓰시면 될듯
2. ec2-infra.tf 파일을 아래와 같이 만들어준다.
resource "aws_instance" "ubuntu_server" {
ami = "ami-04cebc8d6c4f297a3" # Ubuntu 22.04 LTS
instance_type = "t2.nano"
tags = {
Name = "Example-EC2-Linux-Instance"
}
}
3. terraform plan으로 문법 체크
terraform plan
4. terraform apply로 인스턴스 생성
terraform apply
이렇게 실행되는 것을 볼 수 있음
5. 만든 인스턴스 삭제
terraform destroy
참고자료
-* https://www.44bits.io/ko/post/terraform_introduction_infrastrucute_as_code - https://developer.hashicorp.com/terraform/language/providers