1. 준비 사항 GitHub 계정AWS 계정 (예제에서 AWS 리소스를 생성할 예정)로컬 머신 또는 EC2 인스턴스 (Atlantis 서버 실행용) 2. GitHub 리포지토리 리포지토리 생성 Token 생성Github → Settings → Developer settings ⇒ Personal access tokens : Tokens (classic) ← Repo 제한 가능 Fine-grained tokens 사용 권장 https://github.com/terraform-aws-modules/terraform-aws-atlantis GitHub - terraform-aws-modules/terraform-aws-atlantis: Terraform module to deploy Atlantis o..
전체 글
1. Atlantis란Terraform 워크플로우를 자동화하는 오픈 소스 도구Luke Kysow에 의해 시작된 오픈소스 프로젝트https://www.runatlantis.io/ AtlantisAtlantis Terraform Pull Request Automation Running Terraform Workflows with Easewww.runatlantis.iohttps://www.youtube.com/watch?v=TmIPWda0IKg 2. Atlantis 주요 특징 Pull Request 기반 워크플로우GitHub, GitLab, Bitbucket 등의 코드 저장소와 통합되어 작동자동화된 Terraform 실행PR에 대해 자동으로 terraform plan을 실행협업 지원PR 댓글을 통해 Te..
0. 회사에선 AWS 기본 모듈 대신, 자체 모듈을 사용하는 이유항목설명커스터마이징- 사내 보안정책, 네이밍 규칙, 태깅 전략 등 요구사항에 맞춰 커스텀 가능- 사내 인프라 특징, 워크로드에 맞춰 모듈을 작성하고 최적화시킬 수 있음버전관리- 모듈의 버전 관리를 내부적으로 가능재사용성- 사내 인프라에 적합한 재사용가능한 모듈 작성을 통해 재사용성 향상 가능비즈니스 로직- 사내 비즈니스 로직이나 규칙을 인프라 프로비저닝에 포함 가능 1. 루트, 자식 모듈루트 모듈 (Root Module)테라폼을 실행하는 기본 작업 디렉토리에 있는 모듈다른 모듈을 호출하고 전체 인프라 구성을 조정자식 모듈 (Child Module)루트 모듈에서 호출되는 재사용 가능한 모듈특정 인프라 구성요소를 캡슐화 my_terraform_..
1. tf 코드 - main.tfprovider "aws" { region = "us-east-2"}resource "aws_vpc" "example" { cidr_block = "10.0.0.0/16" tags = { Name = "week4-vpc-${terraform.workspace}-example" }}resource "aws_subnet" "example" { vpc_id = aws_vpc.example.id cidr_block = "10.0.1.0/24" tags = { Name = "week4-subnet-${terraform.workspace}-example" }}resource "aws_instance" "example" { ami =..
1. 팀 단위 테라폼 운영시 - 상태파일 관리 문제점상태 파일을 저장하는 공유 스토리지 Shared storage for state files각 팀원이 동일한 테라폼 상태 파일 사용을 위해서, 공유 위치에 저장이 필요상태 파일 잠금 Locking state files잠금 기능 없이 두 팀원이 동시에 테라폼 실행 시 여러 테라폼 프로세스가 상태 파일을 동시에 업데이트하여 충돌 가능(경쟁 상태 race condition)상태 파일 격리 Isolating state files예를 들면 테스트 dev 와 검증 stage 과 상용 prodction 각 환경에 대한 격리가 필요 출처 : [악분의 블로그] 테라폼 시리즈 20편. 협업을 위한 테라폼 관리 2. tfstate 파일 저장 위치관리방법저장위치로컬 상태 파일..
1. terraform.tfstate 파일{ "version": 4, "terraform_version": "1.8.5", "serial": 5, "lineage": "c13e6102-903a-b2f1-6481-1e6ce048ad39", "outputs": {}, "resources": [], "check_results": null}항목설명version- 상태 파일(.tfstate) 형식의 버전terraform_version- terraform의 버전serial- 상태 파일(.tfstate)이 업데이트된 횟수lineage- 동일한 설정에서 생성된 상태 파일을 식별하는 고유 ID -> ????outputs- terraform 실행 후 출력된 값(output)resources- terrafor..
Manage similar resources with for each(for each로 유사한 리소스 관리하기)링크 Manage similar resources with for each | Terraform | HashiCorp DeveloperProvision similar infrastructure components by iterating over a data structure with the for_each argument. Duplicate an entire VPC including a load balancer and multiple EC2 instances for each project defined in a map.developer.hashicorp.comTerraform의 for_each ..
이슈 설명- 테라폼 코드 수정 없이, terraform apply 를 실행할 때마다 EC2 인스턴스와 관련된 리소스들이 삭제되고 새로 생성 문제의 코드# AWS에서 PEM 키 파일의 존재 여부를 확인하는 null_resourceresource "null_resource" "check_aws_key_pair" { provisioner "local-exec" { command = /dev/null; then echo 'key_pair_exists=true' > ${local.key_pair_check_file} else echo 'key_pair_exists=false' > ${local.key_pair_check_file} fi EOT } # [..
해당 포스팅은 테라폼 문법을 학습하며, 테스트 용으로 만든 포스팅입니다.실제 인프라 운영에 적용하기에 부적절합니다.해당 소스의 목적EC2 인스턴스를 생성하기 위해 필요한 PEM 키가 존재하는지 확인하고, 존재하지 않는 경우 새로운 키를 생성하여 사용하는 코드 파일 구조.├── main.tf├── provider.tf├── variables.tf├── locals.tf├── key_management.tf└── outputs.tf 주요 개념- Null Resource[null_resource 개념] null_resource는 Terraform에서 실제 인프라 자원을 생성하지 하지 않음. 주로 프로비저닝할 필요가 없는 작업에 사용.null_resource의 기본 동작은 terraform apply 명령어를 ..
Type설명String문자 시퀀스Number숫자 값Bool불리언 값(true 또는 false)Any모든 유형을 명시적으로 허용List()인덱스로 접근하는 순서가 있는 값의 집합Map()Key-Value 쌍으로 구성된 집합, 키로 접근 가능, 키값 기준 정렬Set()중복이 없는 값의 집합, 순서 없음.Object각 속성이 고유한 유형(Object)를 가지는 속성의 집합Tuple위치로 식별되는 일련의 요소, 각 요소는 고유한 유형을 가짐. # stringvariable "string" { type = string description = "var String" default = "myString"}# numbervariable "number_example" { description..
해당 포스팅은 리소스 그래프에 대해 학습을 하며 작성 중인 글입니다.부정확 내용이 존재할 수 있습니다.Resource Graph TF 코드출처 : https://github.com/SkeltonThatcher/aws-vpc-terraform파일 구조 | provider.tf | vars.tf L vpc.tf## provider.tfprovider "aws" { access_key = "${var.aws_access_key}" secret_key = "${var.aws_secret_key}" region = "${var.aws_region}"}## vars.tfvariable "aws_access_key" {}variable "aws_secret_key" {}va..
1. terraform Workflow Command설명terraform init- Terraform 작업 디렉토리를 초기화- 필요한 프로바이더 플러그인을 다운로드하고 백엔드 설정을 구성terraform validate- Terraform 구성 파일의 유효성을 검사하는 명령어- 구성 파일, 구문 오류, 필요한 설정 포함 여부 확인terraform plan- 실행 계획을 생성- 구성 파일에서 정의된 원하는 상태를 달성하기 위해 테라폼이 수행할 작업을 보여줌terraform apply- 구성의 원하는 상태에 도달하기 위해 필요한 변경 사항을 적용- 리소스를 생성, 업데이트 또는 삭제terraform destroy- 구성에 정의된 모든 리소스를 삭제terraform refresh- 인프라의 실시간 상태로 상태..