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