문화(Culture)
자동화(Automation)
측정(Measurement)
공유(Sharing)
축적(File up & Pile up)
데브옵스는 어떤 요구사항을 효율적으로 만족시키기 위하여, 일을 자동화하며 변경사항 지표들을 측정하고, 공유하고, 이 모든 결과물들을 지속적으로 축적해 나아가는 문화를 만들어가는 철학, 방법론, 기술
올바른 DevOps 문화를 위해 서비스 혹은 S/W LifeCycle에서 반복적인 일들을 자동화하고, 기술적 문제 혹은 팀의 차이를 기술적으로 예방하고, 해소시키는 사람
Infrastructure as Code, 즉 코드로써의 인프라는 인프라를 이루는 서버, 미들웨어 그리고 서비스 등 인프라 구성요소들을 코드를 통해 구축하는 것.
IaC는 코드로써의 장점, 즉 작성용이성, 재사용성, 유지보수 등의 장점을 가진다.
.tf 의 파일 형식을 가짐 (확장자)
provider "aws" {
region = "ap-northeast-2"
version = "~> 3.0"
}
provider 안에서 다양한 Arguments를 가진다.
AWS resource를 다루기 위한 파일들을 다운로드 하는 역활을 합니다. (aws-sdk)
# main.tf, vpc.tf 등 원하는 형태로 파일이름을 사용
# Create a VPC
resource "aws_vpc(리소스 명)" "실제 이름" {
cidr_block = "10.0.0.0/16"
...
}
테라폼으로 VPC를 생성하는 코드 일부
# terrafrom.tfstate 라는 파일명을 가진다.
{
"version": 4,
"terrafrom_version": "0.12.24",
"serial": 3,
"lineage": "3c77XXXX-2de4-7736-0447-038974a2c127",
"outputs": {},
"resources": [
{...},
{...},
]
}
테라폼으로 작성된 코드를 실행하게 되면 생성되는 파일(package.json 같은?)
현재 인프라의 실제 상태를 의미하는 것이 아님
그러므로 가장 중요한 것은 현재 인프라 상태와 state를 똑같이 유지하는 것이다.
현업에서는 원격 저장소인 ‘backend’에 저장하여 사용
resource "aws_vpc(리소스 명)" "실제 이름" {
cidr_block = "10.0.0.0/16"
...
}
output "vpc_id" {
value = aws_vpc.default.id
}
output "cidr_block" {
value = aws_vpc.default.cidr_block
}
resource를 통해 무언가를 생성하였을 때 나오는 id, cidr 값 등을 참조해서 변수(ex. vpc_id, cidr_block)를 통해 state 파일에 저장을 하는 것
리모트를 통해 사용가능
module "vpc" {
source = "../_module/vpc"
cidr_block = "10.0.0.0/16"
}
module은 한 번 만들어진 테라폼 코드로 같은 형태를 반복적으로 만들어 낼 때 주로 사용
재사용에 대한 강점 ( module의 사용을 보고 테라폼을 잘 쓰냐 못 쓰냐를 판단할 수 있을 정도)
# remote는 원격 참조 개념으로 이해
data "terraform_remote_state" "vpc(고유값)" {
backend = "remote"
config = {
bucket = "terraform-s3-bucket"
region = "ap-northeast-2"
key = "terraform/vpc/terraform.tfstaqte"
}
}
state 파일에서 output으로 저장된 변수를 가져오는 것
Process
Init - 작성한 코드에서 init 명령어를 입력 - 테라폼의 다른 명령어들을 위한 설정 진행
Plan - 실제로 작성한 테라폼 코드가 어떻게 만들어질지 예측 - 가장 많이 쓰이는 명령어로 plan에서 문제가 없어야 apply도 문제가 없을 확률이 높다. ⇒ 습관화
Apply - 실제로 작성한 코드로 명령어를 생성하는 명령어 - 실제 인프라에 영향을 끼치는 명령어로 주의가 필요