본문 바로가기

전체 글132

4주차 2편 테라폼 State StateState의 목적과 의미이론 내용상태 파일은 테라폼이 관리하는 인프라 리소스의 현재 상태를 기술합니다.이 파일은 JSON 형식 또는 Terraform Cloud 및 Terraform Enterprise에서는 HCL 형식으로 저장될 수 있습니다.테라폼 상태 파일을 직접 편집하거나 직접 읽는 코드로 작성해서는 안 됩니다. 이는 테라폼의 내부 동작 원리와 상태의 일관성을 보장하기 위한 것입니다.  팀 단위에서 테라폼을 운영하기 위한 고려사항상태 파일을 저장하는 공유 스토리지 (Shared storage for state files)팀원들이 동일한 테라폼 상태 파일을 사용하기 위해서는 상태 파일을 공유할 수 있는 위치가 필요합니다.상태 파일 잠금 (Locking state files)테라폼에서는 상태 .. 2024. 7. 7.
4주차 1편 테라폼 프로바이더 프로바이더테라폼은 인프라 자동화 도구로, 다양한 클라우드, SaaS, 기타 서비스의 인프라와 리소스를 관리할 수 있습니다.이를 가능하게 하는 것이 프로바이더입니다. 각 프로바이더는 특정 클라우드 플랫폼이나 서비스의 API와 상호작용하여 리소스를 관리할 수 있도록 합니다.프로바이더는 테라폼 실행 시, 특정 클라우드나 서비스의 API를 호출하여 리소스를 생성하거나 관리합니다.각 프로바이더는 테라폼의 고유 문법을 따르면서, 다양한 환경에서 동일한 동작을 수행할 수 있도록 구현됩니다.각 프로바이더는 테라폼 실행 파일과는 별도로 관리되며, 테라폼 레지스트리에서 관련 문서와 설정 방법을 확인할 수 있습니다.프로바이더를 사용하기 위해서는 해당 클라우드나 서비스와의 연결 및 인증에 필요한 정보(예: AWS 자격증명)를.. 2024. 7. 7.
3주차 2편 테라폼 기초 - 기본 사용 3/3 3.12 프로비저너프로비저너는 테라폼에서 리소스를 생성하고 관리하는 동안 추가적인 설정이나 작업을 수행하는 도구입니다.프로비저너는 특정 리소스가 생성된 후에 실행되며, 주로 초기화 스크립트 실행, 설정 파일 복사, 배포용 스크립트 실행 등의 작업을 수행합니다.프로비저너로 실행된 작업들은 테라폼 상태 파일과 동기화되지 않습니다. 따라서 프로비저너로 수행된 변경 사항은 테라폼이 추적하는 인프라 상태에 포함되지 않습니다.이는 프로비저닝 작업의 결과가 항상 일관되게 보장되지 않는다는 의미이며, 이러한 측면에서 프로비저너는 "선언적 보장이 안되는" 접근 방식을 가집니다.프로비저너는 특정 상황에서 유용하지만, 테라폼의 선언적 구성 방식을 유지하고자 할 때는 최소화하는 것이 좋습니다.프로비저너의 주된 종류로는 다음과.. 2024. 6. 30.
3주차 1편 테라폼 기초 - 기본 사용 3/3 3.9 반복문 (2/2) for_each for_each를 사용하면 주어진 map 또는 set 타입의 컬렉션에 있는 각 요소를 개별적으로 처리할 수 있습니다.각 요소에 대해 each.key와 each.value를 통해 해당 요소의 키와 값을 사용할 수 있습니다.each.key: 이 인스턴스에 해당하는 map 타입의 키 값.each.value: 이 인스턴스에 해당하는 map의 값.map 또는 set 타입이 아닌 표현식은 toset 등의 함수를 사용해 이 타입으로 변환해야 합니다.예시 - mapresource "azurerm_resource_group" "rg" { for_each = tomap({ a_group = "eastus" another_group = "westus2" }).. 2024. 6. 30.
2주차 3편 테라폼 기초 - 기본 사용 2/3 3.7 local 지역 값로컬 변수(local variable)는 코드 내에서 선언되고, 코드 내에서만 참조 가능한 값을 의미합니다.로컬 변수는 선언된 모듈 내에서만 접근할 수 있으며, 외부에서는 접근이 불가능합니다.실행 시에 입력값을 받을 수 없습니다. 오직 코드 내에서 선언되고 가공된 값만을 사용합니다.로컬 변수는 테라폼 코드 구현 시 자주 사용하는 값이나 표현식을 반복적으로 사용하기 쉽게 합니다.여러 곳에서 빈번하게 사용될 경우 실제 값에 대한 추적이 어려워질 수 있습니다. 이는 코드의 유지 관리 측면에서 부담이 될 수 있습니다.local 선언선언 블록로컬 변수는 locals 블록으로 시작하여 선언됩니다.선언되는 인수에 표현되는 값은 상수뿐만 아니라 리소스의 속성, 변수의 값들도 조합하여 정의할 수.. 2024. 6. 19.
2주차 2편 테라폼 기초 - 기본 사용 2/3 [실습1] VPC + 보안그룹 + EC2 배포default VPC 대신 새로운 VPC를 생성하고 그 안에 EC2 인스턴스를 배포VPC 생성새 디렉터리와 Terraform 파일 생성mkdir my-vpc-ec2cd my-vpc-ec2touch vpc.tfvpc.tf 파일 수정provider "aws" { region = "ap-northeast-2"}resource "aws_vpc" "myvpc" { cidr_block = "10.10.0.0/16" tags = { Name = "t101-study" }}Terraform 초기화 및 배포terraform initterraform planterraform apply -auto-approveVPC 확인# AWS CLI의 결과를 페이지별로 보여주는.. 2024. 6. 19.
2주차 1편 테라폼 기초 - 기본 사용 2/3 3.5 데이터 소스Terraform에서는 데이터 소스를 사용하여 테라폼 코드 외부에서 정의된 리소스나 저장된 정보를 참조할 수 있습니다.이를 통해 기존 리소스를 활용하거나 외부 데이터를 가져와서 테라폼 코드 내에서 사용할 수 있습니다.데이터 소스 구성데이터 소스 블록은 data로 시작하며, 리소스 블록과 유사하게 구성됩니다.데이터 소스 유형은 '프로바이더_리소스유형' 형태로 정의됩니다.data "local_file" "abc" { filename = "${path.module}/abc.txt"}데이터 소스를 정의할 때 사용할 수 있는 메타인수는 다음과 같습니다depends_on: 종속성을 선언하여 특정 리소스의 생성 시점을 정의합니다.count: 여러 리소스를 생성합니다.for_each: map 또는 .. 2024. 6. 16.
1주차 2편 테라폼 기초 - 기본 사용 1/3 3.3 테라폼 블록테라폼 블록테라폼 블록은 테라폼 구성을 명시하는 데 사용됩니다. 주요 요소는 다음과 같습니다.테라폼 버전과 프로바이더 버전을 명시적으로 선언하여 실행 오류를 최소화합니다. 이는 오늘 실행하던, 3년 후에 실행하던 동일한 결과를 얻기 위함입니다.terraform { required_version = "~> 1.3.0" # 테라폼 버전 required_providers { # 프로바이더 버전 random = { version = ">= 3.0.0, " workspaces { name = "my-first-workspace" } } backend "local" { # state를 보관하는 위치 path = "relative/path/to/terr.. 2024. 6. 16.