본문 바로가기

네트워크 & 클라우드/자동화

(15)
Terraform 기초 9.2 - module Module 지난 [Terraform 기초 2 - Terraform/Provider] 글에서 그냥 실습으로 vpc, subnet, igw, route, sg, ec2를 생성해보았다. (https://writestudy.tistory.com/67) 그냥 냅다 resource에 스태틱한 값을 집어 넣어서 이건 재활용이 불가하다. 분리수거도 안된다. 그래서 앞서 학습했던 variable, module 등을 활용해보려고 한다. ├─ main.tf ├─ outputs.tf └─ child ├─ main.tf ├─ outputs.tf └─ variables.tf [child module] - variables.tf variable "vpc_cidr_block" { description = "vpc_cidr_bloc..
Terraform 기초 9.1 - Module Module - module은 기능을 정의하고 Library 처럼 사용하는 것을 말한다. 테스트를 해보니 기존의 있는 소스를 땡겨와서 변수 값만 바꿔서 사용하는 컨셉이었다. - Product, Dev, Stage 환경에서 각각의 소스코드를 사용하는 것보다, module을 사용하여 기존 소스코드를 재활용하자. - terraform command를 수행하는 root module 과 다른 module에서 호출해서 사용하는 child module 이 있다. - module은 직접 작성해도 되고(local path), terraform registry에서 제공하는 것을 가져다 써도 된다. 아래는 terraform registry 정보다. (https://registry.terraform.io/modules/ter..
Terraform 기초 8 - Local Local local block은 모듈 내에서만 사용할 수 있다. 지연 변수라고 생각하면 된다. 과도한 변수화는 오히려 코드의 이해를 떨어트릴 수 있으니 적당히... locals { role_name = "EC2_ALLOW" role_policy = jsonencode({ Version = "2012-10-17" Statement = [ { Action = "sts:AssumeRole" Effect = "Allow" Sid = "" Principal = { Service = "ec2.amazonaws.com" } }, ] }) role_timeout = 7200 } resource "aws_iam_role" "tf_role" { name = local.role_name assume_role_policy ..
Terraform 기초 7 - Output Output output 모듈을 이용해서 값을 출력 할 수 있다. 보통 outputs.tf 로 별도의 파일로 분리한다. iam을 생성해보자. # main.tf resource "aws_iam_user" "tf_user" { name = "inamoto" } output block을 이용해서 생성되는 인자들의 값을 출력받아 볼 수 있다. # outputs.tf output "user_arn" { value = aws_iam_user.tf_user.arn } output "user_id" { value = aws_iam_user.tf_user.id }
Terraform 기초 6 - Variables Variables - terraform에는 변수가 존재한다. - 변수의 타입은 string, number, bool, list, tuple, map, object가 있다. - 코드의 재사용 측면에서 static하게 값을 넣은 코드보다는 변수를 사용하는 것이 좋다. 그리고 변수도 default 값 보다는 실제 입력을 받을 수 있는 부분은 받게끔 하는 것이 좋다. [String] - 문자열 값을 갖는다. variable "vpc_name" { type = string default = "dev_vpc" } [number] - 숫자 값을 갖는다. variable "http_port" { type = number default = "8080" } [bool] - boolean이다. true/false 값을 갖는..
Terraform 기초 5 - Data Block Data Block - 내가 Terraform으로 생성하지 않은 인프라의 리소스를 가져올 수 있는 구문이다. 예시를 봐보자. 직접 AWS console에서 유저를 생성해줬다. - data block에서 정의한 유저의 데이터를 참조하여 path값을 가져와 testkimtest라는 유저를 생성했다. data "aws_iam_user" "testkim1" { user_name = "kgw" } resource "aws_iam_user" "testkim2" { name = "testkimtest" path = data.aws_iam_user.testkim1.path } - data block은 타입에 따라 Attribute가 다르다. registry의 좌측 목록에서 Data_Source 부분을 선택해서 Attr..
Terraform 기초 4 - Resource Block Resource block - resource block은 resource "type" "name" 구문으로 이뤄진다. - type은 provider의 지정에 따라 달라진다. aws로 하면 aws_instance, aws_vpc 등의 type을 입력할 수 있다. - name은 해당하는 resource type과 매칭되는 유니크한 명칭을 입력하면 된다. 똑같은 name이라고 하더라도 type이 다르면 ok, 똑같은 name 똑같은 type은 no no hot hot. #구문 resource "type" "name" { } #예시 resource "aws_vpc" "kgw_tf_vpc" { } - 레지스트리에서 argument reference 부분을 보면, 필수요소(required)와 선택적요소(optio..
Terraform 기초 3 - Backend backend 테라폼이 자신이 관리하는 리소스에 대한 상태정보를 기록 하는 것은 .tfstate 파일이다. 이 .tfstate를 외부에 있는 스토리지에 저장하는 것을 backend. 원격 상태 스토리지를 의미한다. 협업을 위해 backend는 중요하며 AWS S3와 같은 원격 스토리지에 저장된다. backend가 지정되었을 때, 앞서 살펴봤던 명령어들이 어떤 의미를 가지는지 살펴보자. Terraform init - backend에 상태를 저장할 .tfstate 파일이 생성된다. - backend의 tfstate 파일로 다른 담당자가 정의한 내용과 local간의 sync를 맞출 수 있다. Terraform plan - backend 지정 전과 동일하다. Terraform apply - 인프라 배포 관련 작..
Terraform 기초 2 - Terraform/Provider Block Terraform, Provider Block - terraform, provider block이다. terraform block 은 provider에 대한 정의를 하는 곳이다. terraform { required_providers { aws = { source = "hashicorp/aws" version = "3.14.0" } } } provider "aws" { region = "ap-northeast-2" } - 버전은 다양하게 작성 가능하다. 명시하지 않으면 최신 버전을 사용한다는 의미이다. 자세한 해석은 생략한다. version = "!=3.14.0" version = "> 3.14.0" version = "> 3.14.0, 3.14.0" - 그리고 이건 3.14 부터 4.0미만까지의 지원이..
Terraform 기초 1 - 설치 및 기본 명령어 Control Tower 학습 중 AFT를 진행하기 위해선 Terraform의 사전 지식이 필요했다. Terraform은 Hashicorp사에서 개발한 IaC 도구. 서비스 실행을 위한 환경을 프로비저닝 해주는 Ansible과 유사. Terraform은 클라우드 환경에 초점이 맞춰짐. 1. Terraform 설치 - 테라폼 사이트에서 운영체제에 맞는 바이너리를 다운로드 한다. 나는 윈도우10 64비트라서 amd64를 선택했다. (i386은 32비트) - 압축 파일을 풀고 환경 변수를 세팅해준다. 세팅을 편하게 하기 위해 경로를 단순화 시켜서 설정 ㄱㄱ - 조금 더 편하게 진행하기 위해 vsCode (visual studio) 설치, 그리고 Hashicorp Terraform Plugin을 설치 2. aw..