테라폼(terraform)이란? 쉽게 설명하자면 Infra 구성값을 미리 코드화 시켜놓고 해당 코드를 수행하게 함으로
infra 구성이 되게끔 하는 infra as a code, 즉 코드로 인프라를 구성하는 시스템이다.
infra 관리할 리소스가 적다면 클라우드 시스템의 UI를 통해 하나씩 만들어가면 되겠지만, 차후 관리할 infra의 규모가
커지고 기존에 관리하던 리소스들도 많아지면 해당 infra 관리 및 구축을 일일이 하기란 어려울 것이다.
하여, aws자체 적으로 제공하는 cloudformaion , chef, puppet, ansible, terraform 과 같은 infra를 코드화 시켜서 관리하자라는 목적을 둔 도구들이 생겨나기 시작했다. 각 도구들은 각각 장단점 및 특성이 있다고 한다.
일단 우리는 infra 구성 자동화를 terraform을 통해 구성하는 것을 연구하기로 했다.
테라폼은 여러 클라우드 플랫폼에 적용이 되고, AWS 기준으로 작성하도록 하겠다.
설치는 해당 사이트에서 최신 버전으로 각 OS에 맞게 설치를 하면 된다.
https://www.terraform.io/downloads.html
필자의 경우는 윈도우 버전으로 설치를 했다.(terraform_0.12.16)
테라폼은 다른 블로그에도 잘 정리되어 있지만 쉽게 말하자면
1. json과 비슷한 테라폼 코드로 테라폼을 구동할 수 있는 코드를 생성 (.tf 파일)
- aws-provider.tf 파일 생성(aws access key 정보 작성)
provider "aws" {
access_key = ""
secret_key = ""
region = "ap-northeast-2"
}
- 리소스 관련 .tf 파일 작성 (rds를 예제로 함)
resource "aws_db_instance" "test" {
identifier = "test"
allocated_storage = 20
storage_type = "gp2"
engine = "mariadb"
engine_version = "10.3.13"
instance_class = "db.t3.micro"
name = ""
username = "test"
password = "xxxxxxxx"
port = 3306
publicly_accessible = true
availability_zone = "ap-northeast-2c"
security_group_names = []
vpc_security_group_ids = ["sg-03153aacd2c106c15"]
db_subnet_group_name = "default"
parameter_group_name = "default:mariadb-10-3"
multi_az = false
backup_retention_period = 7
backup_window = ""
maintenance_window = ""
final_snapshot_identifier = "test"
auto_minor_version_upgrade= "false"
}
2. terraform 명령어로 구동
- terraform init(최초 초기화 명령어 1회 수행)
init 수행시 .terraform 폴더가 자동으로 생성됨
- terraform plan ( apply 전 적용 값 확인 )
aws infra가 구성되지 않은 상태라면 add 에 count가 올라가고
만약 infra가 구성되어 있는데 특정 값이 바뀌었다면 change에 count가 올라갈 것이다.
- terraform apply (infra 생성)
yes라고 입력해주면 creating이 수행된다. 약 5분 이상 소요되는듯
- terraform import (운영중인 리소스의 상태를 code로 가져옴. .tfstate 파일 자동으로 생성)
초기에 code를 생짜로 구성하기란 어려울 수 있다. 하여 운영중인 리소스를 참조해서 code화 시킬 수 있다.
단, terraform(0.12.16)에서는 import 명령어를 사용하기 전에 깡통 tf 파일이 존재해야 한다.
aws-ec2.tf 생성
resource "aws_instance" "test" {
}
terraform import aws_instance.<resource name> <instance ID>
위와 같이 제대로 import가 되었다면 .tfstate 파일이 업데이트 된다.(만약 실행 폴더에 .tfstate 파일이 미존재시 새로 생성된다)
.tfstate 에 아래 와 같이 정보가 들어있음을 확인
단, import는 사용에 매우 유의해야 한다.
테라폼은 apply시에 .tf 파일에는 없고 .tfstate 에만 있는 인프라 정보를 삭제한다.
만약 운영환경에서 모든 ec2를 import한 후 .tf파일을 생성하지 않은채 apply 할 경우 모든 운영환경이 destroy 될 수 있다는 말이다. (이런 문제를 해결하고자 뒤에서 terraforming(테라포밍)에 대해 설명하도록 하겠다.
- terraform destroy (infra 삭제)
.tfstate에 작성되어 있는 infra를 모두 삭제한다.
사용에 매우 유의를 해야할듯하다.
테라폼은 기본적으로 폴더내의 .tf 파일을 참조한다. 즉, 폴더가 같은 곳에 있는 .tf 파일은 명령어 하나에 다 같이 동작한다는 것이다.
테라폼에 대한 기본 명령어는 공식페이지에 매우 자세히 설명되어 있다.
https://www.terraform.io/docs/cli-index.html
다음은 테라폼 구성을 좀더 편하게 할 수 있도록 만들어진 테라포밍에 대해 설명하도록 하겠다.
'Paul Granduer Lee > 클라우드 서비스' 카테고리의 다른 글
AWS Console 접근 IP 제한 방법 (0) | 2019.12.05 |
---|---|
테라폼을 이용한 infra 구축 #2_테라포밍 설치 및 사용법 (0) | 2019.11.21 |
aws_허용된cloudfront를 통한 s3접근방법 (0) | 2019.11.11 |
s3 암호화 kms/aws 사용시 문제점 (0) | 2019.10.17 |
aws_S3복사하기 (0) | 2019.08.12 |