terraform 50

테라폼 시리즈 26편. terraform pre-commit

1. git pre-commit hook 1.1 개요 git hook pre commit은 커밋 메시지를 작성하기 전에 호출됩니다. 만약 종료(Exit)코드가 0이 아니면 사용자가 요청한 커밋은 취소됩니다. 민감정보 검사, lint검사 등 커밋을 하기 위한 필요조건을 검사할 때 사용할 수 있습니다. git init 또는 git clone을 하면 .git폴더가 생성됩니다. 그리고 .git/hooks폴더에 hook예제가 있습니다. 확장자 .sample을 제거하면 git hook이 동작합니다. cd .git/hooks ls 1.2 예제 git commit이 항상 실행되지 못하도록 pre-commit파일을 수정하겠습니다. pre-commit.sample파일에서 .sample확장자를 제거합니다. 그리고 파일 내용..

연재 시리즈 2022.11.12

테라폼 시리즈 25편. Module

module은 여러 테라폼 코드를 하나의 그룹으로 관리하는 방법입니다. 하나의 그룹은 폴더를 의미합니다. module의 장점은 재사용성입니다. 모듈은 여러 곳에서 import해서 사용할 수 있습니다. Module 생성방법 module 생성방법은 간단합니다. 폴더를 만든 후, 생성한 폴더에 테라폼 코드를 작성하면 됩니다. my-s3 module은 aws s3를 생성합니다. bucket이름을 입력받을 수 있도록 variable을 사용했습니다. # variable.tf variable "bucket_name" { description = "bucket name" type = string sensitive = true default = "akbun-t101-week4-local-example" } # s3.tf..

연재 시리즈 2022.11.10

테라폼 시리즈 24편. Local value

local value는 프로그래밍 언어 변수기능과 같습니다. 이름과 값을 설정하면 하나의 변수가 생성되고 테라폼 코드에서 변수를 참조하여 사용할 수 있습니다. 동일한 값을 여러 번 사용하거나 값에 이름을 부여하여 관리하고 싶을 때 local value를 사용하면 좋습니다. locals block으로 local value를 정의할 수 있습니다. local value는 local.으로 참조할 수 있습니다. provider "aws" { region = "ap-northeast-2" } locals { bucket_name = "akbun-t101-week4-local-example" } resource "aws_s3_bucket" "mys3bucket" { bucket = local.bucket_name }..

연재 시리즈 2022.11.10

테라폼 시리즈 23편. 레이아웃

레이아웃이란? 애플리케이션을 개발/운영을 나누듯이 인프라 환경도 개발/운영 등 분리해서 관리합니다. 인프라 환경을 분리함에 따라 테라폼 코드도 적절하게 구조를 만들어서 관리해야 합니다. 이 때, 코드 구조를 “레이아웃”이라고 부릅니다. 레이아웃 예시 레이아웃은 정답이 없습니다. 주어진 상황에 맞게 적절히 레이아웃을 만들면 되는데요. 이 글에서는 스터디에서 다룬 레이아웃을 소개합니다. 레이아웃은 크게 2종류로 분리할 수 있을 것 같습니다. 1. 최상위(root): 환경(개발, 스테이지)과 global리소스3(SS, IAM 등)로 분류했습니다. 2. 하위구성요소: 최상위 아래에는 모듈과 tf파일 집합으로 구성되어 있습니다. 예제 코드 github 링크: https://github.com/sungwook-pr..

연재 시리즈 2022.11.05

테라폼 시리즈 22편. Terraform Remote State Data Source

개요 terraform remote state는 원격 상태파일에 있는 값을 참조하는 방법입니다. 다른 팀이 작업한 리소스를 참조하거나 레이아웃을 여러 개 만든 상황에서 레이아웃끼리 리소스 참조 등에 사용할 수 있습니다. data block와 terraform_remote_state을 조합해서 원격상태파일을 가져올 수 있습니다. data "terraform_remote_state" "remote" { backend = "s3" config = { bucket = "..." key = "terraform.tfstate" region = "ap-northeast-2" } } 원격상태파일 값을 참조하려면 제공해주는 곳에서 output block을 선언해야 합니다. 예제 github 링크: https://gith..

연재 시리즈 2022.11.04

테라폼 시리즈 21편. 상태파일 민감정보

상태파일에 평문으로 저장되는 민감정보 테라폼 상태파일은 디폴트 저장이 평문저장입니다. 환경변수로 변수값을 넘겨도 상태파일의 값은 평문으로 저장됩니다. 만약 여러분이 public git에 state파일을 저장한다면 소중한 민감정보가 노출되게됩니다. 해결방법은 시크릿 저장소를 이용하여 민감정보를 암호화해야 합니다. 대표적으로 valut, 클라우드 솔루션(aws secret manager, GCP kms 등)이 있습니다. 예제 정말로 민감정보가 상태파일에 평문으로 저장되는지 실습해보겠습니다. 민감정보를 상태파일로 저장할 수 있는 aws RDS를 예제로 살펴볼겁니다. RDS는 로그인할 계정과 비밀번호가 필요합니다. RDS 계정과 비밀번호는 입력으로 받을 수 있도록 variable block을 사용했습니다. gi..

연재 시리즈 2022.11.03

테라폼 시리즈 20편. 협업을 위한 테라폼 관리

1. 테라폼 협업 관리란? 이제 협업을 위한 테라폼 공부를 할 때가 왔습니다. 여러 명이 테라폼을 사용하려면 2가지 문제를 해결해야 합니다. 상태파일(tfstate)를 어떻게 동기화할지 여러 명이 동시에 테라폼 코드를 실행하면, 어떻게 충돌을 막을지 테라폼 클라우드를 사용하면 별다른 고민 없이 테라폼 협업문제를 해결할 수 있습니다. 하지만 테라폼 클라우드는 부분 무료이기 때문에 상황에 따라 결재가 필요합니다. 2. backend를 이용한 상태파일 동기화 2.1 상태파일 동기화가 중요한 이유 상태파일은 테라폼코드가 인프라에 반영된 상태를 저장하고 있습니다. 그리고 인프라에 영향을 주는 terrform명령어를 실행하면, 테라폼 코드와 상태파일을 비교하여 인프라에 반영합니다. 그러므로 상태파일이 동기화되어 있..

연재 시리즈 2022.10.29

테라폼 시리즈 19편. ALB와 Auto Scaling Group 연동

목표 테라폼으로 auto scaling group, Application Load Balancer을 생성합니다. 요구사항 Auto Scaling Group은 4번째 과제를 사용하되 user data에 httpd(80/tcp)를 실행합니다. http://ALB:80으로 요청하면 Auto Scaling Group이 관리하는 EC2 Instance로 부하분산 해야 합니다. vpc는 전글(https://malwareanalysis.tistory.com/438)에 생성한 리소스를 사용합니다. route table은 전글(https://malwareanalysis.tistory.com/441)에서 생성한 리소스를 사용합니다. security group은 전글(https://malwareanalysis.tistory..

연재 시리즈 2022.10.29