Meta arguments 종류depens_on : Terraform이 자동으로 추론할 수 없는 숨겨진 리소스 또는 모듈 종속성을 처리한다.count : resource block은 1개의 인프라 객체를 구성한다. 1개 이상의 pool을 관리하고 싶을 때 사용한다.for_each : index 요소를 참조해야 할 경우 count 대신 사용한다.특정 요소가 목록 중간에 제거되면 해당 요소 뒤의 모든 인스턴스에서 해당 subnet_id 값이 변경되는 경우가 발생할 수 있는데 for_each를 통해서 해소할 수 있다.provider : 공급자 메타 인수는 리소스 유형 이름을 기반으로 선택하는 Terraform의 기본 동작을 재정의하여 리소스에 사용할 공급자 구성을 지정한다.lifecycle : create_b..
Programming
Data sourceVariable, Output을 이용해 데이터를 입력하거나 출력 되는 과정의 데이터를 변수에 담는 방식을 이용할 수 있다. 그 과정에 선언한 VPC, Subnet 생성 코드에는 하드코딩 된 데이터가 일부 있는데 재활용을 높이기 위해서는 이 부분을 최소화 해야 한다. 이 때 하드코딩 된 부분을 모두 변수로 선언해서 재활용을 높일 수도 있으나 Data source를 이용할 수 있다. Data source는 Terraform 외부 환경에 정의된 리소스의 Attribute 정보를 읽어와 코드에 변수 값을 저장하듯이 사용할 수 있다. 1. 서브넷 정보 확인기존 구성된 vpc.tf 파일에서는 서브넷 정보를 아래와 같이 하드코딩 해두었다.# vpc.tfresource "aws_subnet" "pu..
Attributeprovider를 통해 만들어진 리소스는 Attribute을 가지게 되는데, 이 값들은 서로 연관된 다른 리소스를 생성할 때 참조해야 할 때가 있다. 예를 들어, VPC는 vpc.id라는 Attribute을 가지고 있는데, subnet을 만들 때 vpc.id를 필수 값으로 반영해야 하기 때문에 참조할 데이터의 대상이 된다. 1. Attribute 참조 형식# _..aws_vpc.main.id 2. Attribute 적용 예시resource "aws_vpc" "main" { cidr_block = var.vpc_cidr tags = merge( { "Name" = "Main" }, var.default_tags )}resource "aws_subnet" "pu..
Variable & Validation 선언 변수를 사용하면 코드를 더 쉽게 재사용할 수 있고, 다른 구성 간에 코드를 공유할 수 있다. 1. variable 파일 없이 직접 입력하는 방식# vpc.tfresource "aws_vpc" "main" { cidr_block = "10.0.0.0/16" tags = { Name = "main", Environment = "development", CostCenter = "23213" }}2. variable.tf 파일을 이용해 데이터를 입력하는 방식variable은 "vpc_cidr", "default_tags" 두 가지로 구분된다.variable 내부는 type, description, default, validation로 구성되어 있다.# v..
팀 단위로 여러 사람이 동시에 코드를 작업하고 공유하는 경우 Local 백엔드 구성은 적합하지 않다. 오래된 변경 사항이 적용되는 것을 방지하지 위해서 누구나 최신 상태 파일에 액세스해야 한다.상태 파일은 내구성이 뛰어나고 모두가 다같이 사용 가능한 위치에 저장해야 한다.경합 상태를 방지하기 위해 동시 terraform 적용 작업이 발생하지 않도록 방지하는 매커니즘이 필요하다. AWS CLI 이용 S3 Bucket & DynamoDB 생성S3 Bucket 생성$ aws s3 mb s3://terraform-starter-bucket --region ap-northeast-2DynomoDB 생성$ aws dynamodb create-table \ --table-name tf_state_table \ --a..
plan, apply, destroyCommandDescriptionterraform plan • 이미 존재하는 원격 객체(Cloud resoure)의 현재 상태를 읽어 최신 상태인지 확인한다. • 적용하기 위해 구성한 코드를 읽어 현재 원격 객체의 상태과 비교해 차이점을 확인한다. • 차이가 발생한 부분을 출력하고, 변경 조치할 내용을 제안한다.terraform apply• terraform plan 명령으로 제안된 작업을 실행하여 실제로 원격 객체에 상태를 업데이트 한다.terraform destroy • 원격 객체를 삭제하는 명령이다. plan, apply 사용법1. 리소스 생성을 위한 .tf 파일 생성# vpc.tfresource "aws_vpc" "main" { cidr_block = "10...
Terraform은 AWS, Azure, GCP 등 Cloud Service Provider들의 서비스 리소스들을 선언적인 코드로 작성해 관리할 수 있도록 지원한다. 기본 용어 1. ProviderTerraform 외부에 존재하는 서비스와 연결해주는 모듈이다. AWS의 서비스를 이용하고 싶은 경우 AWS Provider를 선언해야 한다.2. Resource Provider가 제공하는 서비스 자원이다. 클라우드 내부의 Instance, Gateway, Securoty Group 등이 있다.3. HCL (Hashicorp Congifureation Language) Terraform에서 사용하는 프로그래밍 언어다. (Java, C, Python과 같은 프로그래밍 언어 같은..?)4. Plan Terrafor..
Shell Script 작성 과정에 읽고, 유지보수하기 쉽게 만들기 위한 Clean Code 방법1. 의미 있는 변수명변수에 담기는 값에 대한 용도, 의도 등을 파악할 수 있도록 변수명을 할당한다.#!/bin/bashVPC_NAME="lab-edu-vpc-ap-01"PRI_SUB_NAME_01="lab-edu-sub-pri-01PRI_SUB_NAME_02="lab-edu-sub-pri-02"NETWORK_EC2_NAME_01="lab-edu-ec2-network-ap-01"NETWORK_EC2_NAME_02="lab-edu-ec2-network-ap-02"AMI_ID="ami-0ff1cd0b5d98708d1"INSTANCE_TYPE="t3.micro"KEY_NAME="lab-edu-key-ec2"KEY_..
venv 모듈은 디렉터리에 독립적인 Python 패키지를 구성하여 경량화된 가상 환경 생성을 지원한다. 이 모듈을 이용해 디렉터리 별로 가상환경을 만들어 서로 다른 패키지를 설치해 프로젝트를 나누어 구성할 수 있다.1. 가상환경 생성프로젝트 폴더 이동# cd /PATH/TO/PROJECT_FOLDERcd /home/ec2-user/backend가상환경 생성# python -m venv /PATH/TO/VENV_FOLDERpython -m venv /backend 2. 가상환경 활성화가상환경 활성화# source /PATH/TO/VENV_FOLDER/bin/activatesource /backend/bin/activate가상 환경 내부에 패키지 설치pip install -r requirements.txt..