
https://developer.hashicorp.com/terraform/install윈도우 AMD64 다운로드C:\\terraform 에 새폴더 terraform 만들고 다운받은 exe파일 넣기Path 설정하기변수 설정한거 확인하기VSCode에 작업영역에
역할: 작업 디렉토리 초기화, 프로바이더 플러그인 설치, 백엔드(S3 등) 설정.주요 옵션\-upgrade : 잠긴 버전 범위 안에서 플러그인 최신으로 갱신\-reconfigure : 백엔드 설정 재구성(원격 상태 위치 바꿀 때)\-migrate-state : 기존 상
이미 존재하는 클라우드/외부 정보 조회용 블록. 리소스를 생성하지 않고 읽어와 다른 리소스 정의에 활용한다.문법: data "<provider>\_<type>" "<name>" { ... } → 참조: data.<provider>\_<type

역할: 환경별(개발/운영) 차이, 민감정보, 자주 바뀌는 값을 코드 밖으로 빼서 재사용·표준화.보관 위치(권장 구조)variables.tf : 변수 선언terraform.tfvars 또는 \*.auto.tfvars : 기본값(개발용 등)env/dev.tfvars, en

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html특별히 지정할게 없다면 Next하고 InstallPowerShell에서 aws --version접속을 위해 다운
sensitive는 값을 콘솔 출력과 로그에서 마스킹(가리기)하는 플래그.암호화 기능이 아니라는 점! 상태/플랜 파일에는 값이 들어갈 수 있으니 백엔드 보안은 따로 챙겨야 함.변수/출력/리소스 인자에 sensitive = true 또는 sensitive() 함수로 노출
locals는 “모듈 안에서만 쓰는 계산된 값(별명/중간 변수)”.입력은 variable, 외부로 내보내는 건 output, 그리고 사이에 반복되는 계산·규칙을 담아 깔끔하게 재사용하는 게 locals!정의 위치/형태: 모듈(any \*.tf) 어디든 locals {
output은 모듈/루트에서 바깥으로 보여줄 결과.예: 인스턴스 IP, ALB DNS, 서브넷 ID 같은 “다음 단계에서 필요할 값”.정의: output "<이름>" { value = <표현식> }보기: terraform output, terraform ou

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc
VPC + 퍼블릭 서브넷(IGW) + (선택) NAT + 프라이빗 서브넷까지 한 번에.Terraform 1.4+ 설치AWS 자격증명 설정: aws configure (또는 AWS_PROFILE, AWS_REGION)새 폴더 만들고 아래 파일들 생성NAT 게이트웨이는 유

Resource: aws_subnethttps://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/subnet➡️VPC 만들기 실습 내용과 이어짐

➡️ 앞의 실습 내용과 이어짐

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/internet_gatewayhttps://registry.terraform.io/providers/hashicor
여러 개 리소스 찍어내기: count, for_each값 가공/필터링: for 표현식(list/map 컴프리헨션)중첩 블록 반복: dynamic 블록count와 for_each는 같은 블록에서 동시에 못 씀장점: 간단, 개수만 알면 됨단점: 인덱스가 바뀌면 재생성(ch
for_each = <map|set> 형태. 키(주소)가 안정적이라 중간 삭제/추가에도 나머지 인스턴스가 흔들리지 않음.블록 내부에서 each.key / each.value 사용.main.tf키 b를 지우고 다시 apply 하면 b.txt만 destroy 됨(안정
배스천은 사설 서브넷(Private Subnet)의 인스턴스에 안전하게 접속하기 위한 “점프 서버(관문)”.운영자는 인터넷 → 배스천(퍼블릭 서브넷) → 사설 인스턴스(프라이빗 서브넷) 순서로 SSH/RDP 접속합.문제: Private Subnet 인스턴스는 공인 IP
프로비저닝: 서비스를 위해 필요한 \*\*인프라/플랫폼 자원을 ‘준비·할당·생성’\*\*하는 일.층위: 인프라(IaC) → OS/앱 설정(구성관리) → 배포(Deploy) 는 목적이 다르다.도구맵: Terraform/CloudFormation/Pulumi(IaC) +
EIP(Elastic IP) = AWS가 제공하는 고정(Static) 공인 IPv4 주소 한 개.인스턴스(정확히는 ENI: 네트워크 인터페이스)의 프라이빗 IP에 1:1로 매핑해 외부에서 접속할 수 있게 함. 필요하면 다른 인스턴스로 재할당(리맵) 가능해서 장애 시 빠
Terraform엔 “이벤트 리스너” 같은 실시간 트리거는 없어.대신 계획/적용(plan/apply) 시점에 “무엇이 바뀌면 무엇을 다시 만들지(Replace)”를 선언하는 방식으로 트리거를 구성.리소스 수준: lifecycle.replace_triggered_by —
moved는 리소스의 주소(address)가 바뀌었을 때, 기존 상태(State)를 파괴 없이 새 주소로 이전하라고 Terraform에 알려주는 선언형 리팩터링 도구. (Terraform v1.1+)Terraform은 리소스를 주소로 식별해요. 예)aws_instanc
웹 콘솔: ID/비밀번호(+MFA)로 로그인.CLI/SDK: 자격증명으로 API 호출. 대표 소스환경변수: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY …공유 자격증명 파일: ~/.aws/credentials, ~/.aws/config의 프
Argument→ 리소스 입력값(설정값). 내가 .tf 코드에 적어 주는 것.예) aws_instance의 ami, instance_type, subnet_id, tags …Attribute→ 적용 후 Terraform이 읽어 들인 결과값(출력/상태값). 읽기 전용(보

vpc, subnet, IGW, NAT, Route 가 main.tf 한곳에 다 있다.룰 만들어졌는지 확인서브넷 연결하기

파일 구성 main.tf vars.tf provider.tf init하고 apply 하기 만들어졌는지 확인 
➡️public ip 복사https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance

➡️client가 EC2에 접속하기 위해서는 bastion이 필요➡️아래 두개 단락 추가하고 저장에러나서 실습은 여기에서 마침➡️만든 순서 역순으로 destroy하기
State(.tfstate) = Terraform이 “코드 ↔ 실제 클라우드” 동기화를 위해 유지하는 싱크 파일.빠른 Plan, 최소 변경, 스택 간 의존(Outputs)까지 모두 State에 의존.팀/CI는 원격 백엔드(S3+KMS, DynamoDB 락) 가 표준.

Workspace = 같은 코드로 여러 개의 상태(State) 분기를 운영하는 기능.가벼운 개발/실험에는 유용하지만, 강한 격리(권한/결제/리스크) 는 별도 백엔드/계정 분리가 권장.default, dev1, qa 등 워크스페이스마다 서로 다른 .tfstate를 가짐.

Module = 재사용 가능한 인프라 함수(디렉터리 하나). 입력/출력 인터페이스를 명확히 하고 버전 고정.루트에서 Provider를 정의하고 자식 모듈이 상속. 지역/계정이 다르면 별칭(provider alias) 으로 주입.A → B, A → C: 루트 모듈(프로젝
Backend = State의 저장·잠금·버전관리를 담당. 팀/CI에서는 원격 백엔드 필수.표준: S3(암호화/버전관리) + DynamoDB(락). 백엔드 변경 시 init -migrate-state.여러 개발자/파이프라인이 같은 인프라를 변경 → 충돌/손상 방지중앙에

init 할 때 백엔드를 사용할껀지 물어본다.버킷 들어와서 새로고침하고 확인apply 하면 No changestfstate를 저장하는 토대를 만든것backend에서는 변수 사용 못함다른데서 가져다 쓸 리소스들을 output.tf에 설정해줘야한다.ex.) vpc id,
작업 경로: E:\\sources\\terraform_code원격: origin = github.com:jsh0911/terraform_code.git기본 브랜치: maingit push origin +main → src refspec main does not matc