본문 바로가기

IaC

(14)
테라폼 개인 프로젝트 - Terraform workflow 구성하기 Terraform Cloud + Github Terraform을 사용하는데 협업하여 사용하는데 있어서 가장 중요한 것 중 하나는 Terraform state 관리입니다.  GitLab의 경우에는 Terraform Steate 파일을 따로 관리할 수 있는 managed service를 제공하고 있지만, Github의 경우에는 그렇지 않기에, 따로 관리를 해주어야 합니다.  보통은 Terraform state 관리를 위해 AWS S3 + DynamoDB를 Terraform backend로 활용하지만, 이번에는 좀더 빠르고 쉽게 구성해보기 위해 Terraform Cloud를 이용하여 Terraform의 관리를 해보려고 합니다.  Terraform Cloud 설정 Terraform Cloud에 접속하여, 회원이..
테라폼 사용 권장사항 https://cloud.google.com/docs/terraform/best-practices-for-terraform?hl=ko#security Terraform 사용 권장사항  |  Google Cloud의견 보내기 Terraform 사용 권장사항 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 문서에서는 여러 팀 멤버와 작업 스트림 간의 Terraform을 사용한 효율적cloud.google.com GCP에서 제공하는 테라폼 사용 권장사항의 일부를 정리하였습니다. 일반 스타일  구조 가이드라인> 단어 구분을 위한 밑줄을 이용해서 모든 구성 객체의 이름을 지정합니다. -> "web_server"resource "google_compute_instance" "web..
테라폼 스터디 - 10주차 테라폼 단일 브랜치 배포 전략 1. 단일 브랜치에서 배포하는 이유일관된 배포 환경: 여러 브랜치에서 배포하면 환경이 분리될 위험이 있음State 관리 간소화: 여러 브랜치가 각각 다른 state를 관리하면 충돌 가능성이 높아짐코드 변경 추적 용이: 모든 변경 사항이 하나의 브랜치에서 관리되므로 변경 내역이 명확함2. 여러 브랜치에서 작업할 때 생길 수 있는 문제 2.1. State 파일 충돌여러 브랜치에서 배포를 수행하면 서로 다른 state 파일을 사용하게 될 수 있음. 이로 인해 배포 환경이 일관되지 않거나, state 충돌이 발생할 위험이 있음.해결책:원격 상태 파일(예: AWS S3 + DynamoDB)을 사용하여 충돌 방지작업 시 terraform plan을 통해 예상 변경 사항을 검토2.2. ..
테라폼 스터디 9주차 - 추가 내용 replica에 대한 오해 replica 블록은 테라폼 자체에서 제공하는 것이 아닌, aws_dynamodb_table 리소스에서 dynamodb_table 복제본을 쉽게 만들기 위해 제공는 리소스 옵션 중 하나.# main.tfresource "aws_dynamodb_table" "my_table" { name = "my_table" hash_key = "key" attribute { name = "key" type = "S" } replica { region_name = "eu-west-2" } replica { region_name = "us-east-1" }}  replica로 생성된 dynamodb_table 리소스들에서 특정 dynamodb_table..
테라폼 스터디 9주차 - 자동화된 테스트 통합 테스트여러 모듈이 함께 동작하는지 확인하는 과정개별 모듈은 유닛 테스트로 검증을 진행하고, 실제 인프라에 배포했을 때 정상적으로 연동되는지 확인하기 위해 통합테스트가 필요하다.  테스트 단계테라폼 코드 검증terraform fmt / terraform validate테라폼 계획 검증 : plan 결과를 토대로 예상대로 동작하는지 검증terraform plan실제 배포 후 테스트 : 리소스가 기대한 상태인지 체크terraform apply정리 테스트 : 실행 후 리소스가 깨끗이 삭제되는지 확인terraform destroy재시도테라폼 실행 중 일시적인 네트워크 문제나 API Rate Limit 초과로 테스트가 실패할 수 있음 / 이런 경우를 고려하여 재시도 로직을 추가하여 안정성을 올릴 수 있다. A..
테라폼 스터디 8주차 - 테라폼 코드 테스트 1-1. 수동 테스트 - 기본 수동 테스트 자동화된 두고 없이 사람이 직접 수행하는 테스트 방식  테라폼 코드 실행 및 검증terraform initterraform apply 해당 명령을 실행 후, 생성된 리소스를 직접 클라우드 프로바이더 (AWS나 GCP)의 콘솔에서 확인한다. 혹은 각 프로바이더가 제공하는 cli를 이용하여 리소스 상태를 점검한다. 혹은 아래의 테라폼 명령어를 통해 확인한다.terraform state list   1-2. 테스트 후 정리테스트 후 테스트를 위해 생성한 리소스를 정리한다. terraform destroy 명령어의 -auto-approve 옵션은 보통 자동화 파이프라인(CI, 스크립트)에서 유용하게 사용된다.# 사용자 승인 없이 즉시 제거terraform destroy..
테라폼 스터디 - 7주차 (프로덕션 수준의 인프라 구성) 프로덕션 수준의 인프라 구축이 오래 걸리는 이유  복잡성대규모 시스템은 다양한 컴포넌트와 상호작용하기에, 네트워킹, 보안, 스토리지, 가용성, 확장성 등 여러 가지 요소를 고려해야 한다.각 요소 간의 의존성을 올바르게 설정하고 관리하는 데 시간이 소요된다.보안 및 규정 준수프로덕션 환경에서는 데이터 보호와 규정 준수가 필수이기에, 이를 위해 IAM 정책, 데이터 암호화, 네트워크 ACL 등 다양한 보안 설정이 필요하다.테스트 및 검증프로덕션 환경에서는 장애가 최소화되어야 하므로, 따라서 모든 변경 사항은 철저히 테스트되어야 하며, 복구 계획이 필요하다.인프라 코드는 실제 환경에서 배포 전 테스트 환경에서 검증되어야 한다.자동화 및 지속 가능성모든 프로세스는 반복 가능하고 자동화되어야 한다. 이를 위해 테..
테라폼 스터디 6주차 기본적으로 하나의 리소스 블록은 하나의 실제 인프라 객체를 구성한다. 반복적으로 유사한 객체를 블록을 일일히 하나씩 블록을 작성하여 관리하기 힘든 경우, 프로그래밍 언어에서 사용되는 반복문과 유사한 기능을 가진 키워드를 사용할 수 있다. Terraform에선 count와 for_each가 있다. Meta Argument - count리소스 또는 모듈 블록에 count 값이 정수인 인수가 포함된 경우, Terraform은 해당 정수만큼의 인스턴스를 생성한다. resource "aws_instance" "server" { count = 4 # create four similar EC2 instances ami = "ami-a1b2c3d4" instance_type = "t2.micro..