Cloud/Terraform

기록하는 Terraform
·Cloud/Terraform
OpenTofu는?https://opentofu.org/docs/Hashicorp에서 Terraform의 라이센스를 MPL(Mozilla Public License)에서 BUSL(Business Source License) 비오픈 라이센스로 변경하였고, 이에 대한 대응으로 탕생하게 되었습니다. 물론 이것이 Terraform의 인기를 반증한다고 할 수 있으며, Terraform을 포크한 오픈 소스이기 때문에 Terraform의 구성과 워크플로에 호환됩니다. 현재는 버전 차이가 크지 않아 업데이트에 잘 따라가고 있으나, 회사와 같은 기술 로드맵이 있지 않으며 업데이트가 늘어날 수록 기능에 차이가 생길 것으로 예상됩니다. Oracle 역시 기업용 제품 라인업에서 Terraform을 Opentofu로 대체되었습..
·Cloud/Terraform
[이전 게시글]에서 작성한 코드가 버전 때문인지 제대로 작성되지 않았고,eks-workshop으로 eks를 배포하려다가 eks module을 사용하여 배포해보고 싶어 배포하게 되었습니다. Blue Print를 사용하지 않고, standard하게 구성하되, karpenter를 추가했습니다.karpenter를 설명하고 이를 테스트해 보겠습니다.파일 트리는 아래와 같으며, 전체 코드는 GitHub에 올려놓았습니다. (https://github.com/ssungz789/eks-self) KarpenterKarpenter의 기본 동작 구조는 아래와 같습니다.운영 부담 절감신속한 Node 추가와 제거자동 Node 롤링 (TTL)다양한 인스턴스 타임을 쉽게 적용빠른 버전 업데이트AWS 의존성을 제거함Auto scal..
·Cloud/Terraform
CI/CD 툴인 Atlantis를 통해 Custom workflow를 통해 인프라를 구성합니다. Atlantis?Atlantis는 pull request를 통해 Terraform을 자동화하는 오픈소스입니다.Terraform 코드를 pull request 하고, comment에 atlantis plan, atlantis apply를 통해 테라폼 코드를 배포할 수 있습니다. Atlantis의 기본 동작은 아래와 같습니다.github 또는 gitlab, bitbucket을 통해 PR(pull request)를 보냅니다.git repo에 설정해노흔 webhook을 통해 atlantis에서 comment에 입력된 명령어를 전달받아 terraform을 수행합니다. Atlantis 구축해보기repo는 github을 ..
·Cloud/Terraform
어느덧 절반을 했다.terraform이 생소해서 아직 손에 익지 않았지만 천천히 익숙해질 때까지 해보겠다. Provider1. Terraform의 동작 원리 테라폼은 코드를 읽어 코드가 실행이 가능한지 분석하고, 가능하다면 API를 통해 대상에 속성이 반영되도록 호출합니다. core 컴포넌트는 사용자의 코드에 대해 순서를 작성하고, 플러그인에게 RPC 통해 코드 실행을 요청한다.플러그인은 go 바이너리를 통해 대상에게 api로 실행을 요청한다.terraform 코드에서도 required_providers를 선언하므로 어떤 프로바이더를 사용할지를 명시한다. terraform init명령어를 수행하면 플러그인 (프로바이더) 모듈을 다운로드 받는다.init이 완료되면, .terraform 디렉토리가 생성되는데..
·Cloud/Terraform
for_expression을 활용하여, AWS 인스턴스 배포 - vpc.tfprovider "aws" { region = "ap-northeast-2"}resource "aws_vpc" "ssungz-vpc" { cidr_block = "10.100.0.0/16" tags = { Name = "ssungz-vpc" }}resource "aws_subnet" "ssungz-subnet" { for_each = var.subnets vpc_id = aws_vpc.ssungz-vpc.id cidr_block = each.value.cidr_block availability_zone = each.value.az map_public_ip_on_launch = each.value.public ..
·Cloud/Terraform
- data를 통해 az 조회 및 조회 데이터로 리소스 생성 - available 상태의 zones 조회data "aws_availability_zones" "az_list" { state = "available"}output "aws_availability_zones" { value = data.aws_availability_zones.az_list} - ap-northeast-2a, ap-northeast-2c 두개 존에 ec2 배포 기본 서브넷 문제로 서브넷은 변수로 할당provider "aws" { region = "ap-northeast-2"}data "aws_availability_zones" "az_list" { state = "available"}data "aws_ami" "ec2-..
·Cloud/Terraform
- VPC, ec2, alb 구성 실습[vpc.tf]provider "aws" { region = "ap-northeast-2"}variable "name" { default = "ssungz"}variable "cidr" { type = list(string) default = ["10.100.0.0/16", "10.100.1.0/24", "10.100.2.0/24" ] }variable "az" { type = list(string) default = [ "ap-northeast-2a", "ap-northeast-2c" ]}resource "aws_vpc" "ssungz-vpc" { cidr_block = var.cidr[0] enable_dns_hostnames = true enab..
·Cloud/Terraform
- 조건에 일치하는 검증 조건 변수에 입력된 파일 리스트와 파일 이름이 일치하면, 코드 수행variable "file_name" { type = list(string) default = [ "abc-0.txt", "abc-1.txt", "abc-2.txt", "abc-3.txt", "abc-4.txt", "abc-5.txt", "abc-6.txt" ]}resource "local_file" "test_file" { for_each = toset(var.file_name) content = "abc" filename = "${path.module}/abc-${each.value}.txt" lifecycle { precondition { condition = contains(var...
·Cloud/Terraform
1. EC2 웹 서버 배포 - init.sh#!/bin/bashapt-get updateapt-get install -y apache2echo "hoon-test-web" > /var/www/html/index.htmlsystemctl start apache2systemctl enable apache2 - main.tfprovider "aws" { region = "ap-northeast-2"}data "template_file" "init-sh" { template = file("init.sh")}resource "aws_instance" "test-web-srv" { ami = "ami-0e73d7a01dba794a4" instance_type = "t2.micro" associate_pub..
·Cloud/Terraform
조건문Conditional Expressions 테라폼에서의 조건식은 3항 연산자 형태를 갖는다.조건은 true / false로 확인되는 모든 표현식 사용이 가능하다. Docs 조건식은 ? 기호를 기준으로 왼쪽은 조건이며, 오른쪽은 : 기호를 기준으로 왼쪽이 조건에 대해 true가 반환되는 경우이고,오른쪽이 false가 반환된다.# ? : var.a != "" ? var.a : "default-a" 조건식을 통해 단순 변수 재정의나 출력 값에 대한 조건 정의 뿐만 아니라 리소스 생성 여무에 응용할 수 있다.count에 조건식을 결합한 경우 아래와 같이 특정 조건에 따라 리소스 생성 여부를 선택할 수 있다.variable "enable_file" { default = true}resource "loc..
ssungz
'Cloud/Terraform' 카테고리의 글 목록