terraform

terraform 서비스 구축

Intro

  • 본 문서는 terraform 으로 실습한 소스코드를 설명하는 데 중점을 두었습니다.

  • 본 문서는 markdown 언어로 제작 되었습니다.

  • 김태형(kimutae@naver.com) 의 저작물이며 무단 배포 / 재배포를 금합니다.

IAC(infra as code) 이란

  • 인프라를 코드로 프로비저닝 / 관리한다는 의미입니다.

  • 장점

  • 비용 절감

  • 배포 속도 향상

  • 오류 감소

  • 인프라 일관성 향상

  • 구성 변동 제거

terraform 이란

  • 테라폼(Terraform)은 하시코프(Hashicorp)에서 오픈소스로 개발중인 클라우드 인프라스트럭처 입니다.

  • 대표적인 public cloud 인 aws / gcp / azure 등을 모두 지원합니다.

  • 하시코프 설정 언어HCL(Hashicorp Configuration Language)을 사용해 클라우드 리소스를 선언합니다

  • 파일 확장자는 .tf입니다.

terraform 명령어

  • init : . terrform 초기화 이후 각 vendor사에 맞는 provier 파일을 설치 합니다.

  • plan :

    1. 테라폼 프로젝트 디렉터리 아래의 모든 .tf 파일의 내용을 실제로 적용 가능한지 확인하는 작업을 계획

    2. 테라폼은 이를 terraform plan 명령어로 제공하며, 이 명령어를 실행하면 어떤 리소스가 생성되고, 수정되고, 삭제

  • apply :

    1. 테라폼 프로젝트 디렉터리 아래의 모든 .tf 파일의 내용대로 리소스를 생성, 수정, 삭제

    2. 테라폼은 이를 terraform apply 명령어로 제공합니다. 이 명령어를 실행하기 전에 변경 예정 사항은 plan 명령어

terraform 으로 구성하기 앞서 생각해야 할 점

  • 상시 변경 인프라 / 기반인프라 구분

  • 테라폼을 사용하게 되면 한 디렉토리 내에 있는 모든 tf 파일들을 동시에 실행을 합니다.

  • 그렇기에 한번 구축하면 거의 변경 할 일이 없는 인프라와 상시로 변경이나 구축이 자주 일어나는 인프라를 구분해야 합니다.

  • 초기 구성 이후 거의 변하지 않는 항목은 vpc등 네트워크 인프라이며 - resource(신규생성)를 지정 해서 인프라를 생성 합니다.

  • 서비스 구성 시 항상 자주 구성해야 하는 항목 - data(불러오기) / resource를 혼용 하여 사용 합니다.

  • EX

    resource
    data

    vpc

    security gruop

    subnet

    Load Balancer

    igw

    target group

    NAT

    EC2

    ECS-Cluster

    ecs

    task difinition

    ecr

    RDS

  • code 재 사용이 가능하도록 설계

  • IAC 를 사용 한다는 것은 결국 인프라를 프로그래밍한다는 의미이며 프로그래밍 언어의 특징도 그대로 가져옵니다.

  • 한번 작성한 코드는 재 사용이 가능 하도록 설계 되어야 합니다.

  • 공통으로 사용하는 부분은 변수로 처리 해야 합니다.

  • 자주 사용 하는 구문은 모듈화 해야 합니다.

variables를 활용한 code 사용 예시

  • 변수지정

  • 사용

디렉토리 구성

VPC 구성

chevron-right코드 펼치기hashtag
  • 공용 변수 : variables.tf

  • 프로바이더 지정 - main.tf

  • subnet / igw / nat 구성

subnet

Load Balancer 구성

chevron-right코드 펼치기hashtag
  • 결과 image

task definition 구성

chevron-right코드 펼치기hashtag
  • templete 를 활용 하여 사전에 작성한 td.json파일을 import 합니다

  • 결과 image

ECS - service 구성

chevron-right코드 펼치기hashtag

  • 결과

image

두 신뢰관계 정책 파일을 병합하는 jq 명령어

TrustShip

Last updated