Category

· Cloud/AWS
EKS란?AWS가 Kubernetes 컨트롤 플레인을 대신 관리해주는 EKS의 구조를 이해하고, Ubuntu 24.04 환경에서 실습 환경을 직접 구성해본다. 배경Kubernetes는 컨테이너 오케스트레이션의 사실상 표준이지만, 컨트롤 플레인을 직접 구성·운영하는 일은 생각보다 손이 많이 간다. API 서버 이중화, etcd 백업, 버전 업그레이드, 가용 영역 분산 배치... 이 작업들을 모두 직접 하려면 운영 부담이 상당하다.Amazon EKS(Elastic Kubernetes Service)는 컨트롤 플레인 운영을 AWS가 대신 맡아주는 완전 관리형 Kubernetes 서비스다. 클러스터를 만들면 API 서버와 etcd는 AWS가 관리하고, 개발자는 워크로드 배포에만 집중할 수 있다. 주요 개념1. ..
업그레이드 전 준비1. 필수 패키지 설치# 필수 빌드 도구 및 라이브러리 설치sudo apt-get updatesudo apt-get install -y \ build-essential \ libpcre3 \ libpcre3-dev \ zlib1g \ zlib1g-dev \ libssl-dev \ libgd-dev \ libgeoip-dev \ libxslt1-dev2. Nginx 컴파일 소스 파일 다운로드# 작업 디렉토리 생성mkdir -p /tmp/nginx_upgradecd /tmp/nginx_upgrade# Nginx 1.28.0 소스 다운로드wget https://nginx.org/download/nginx-1.28.0.tar.gz# 압축 해제tar -xzf nginx-1.28...
Terraform 사용법이 표준화 되면서 다른 사람들이 잘 만든 코드나 사내 공통으로 사용되는 코드를 패키징하고 재사용이 가능한 모듈 단위로 관리하는 것이 가능하다. 다수의 모듈로 Repository Structure를 구성해서 사용하는 것이 일반적이다. Multi Module Repository Structureroot module : 최상위 디렉터리를 의미한다. 아래 예시에서는 `.` 디렉터리가 최상위 디렉터리다.module : module collection으로 단일 모듈 구성도 가능하고 중첩된 다수의 모듈 collection 구성도 가능하다..├── README.md├── main.tf├── variables.tf├── outputs.tf├── ...├── modules/│ ├── nested..
Meta arguments 종류depens_on : Terraform이 자동으로 추론할 수 없는 숨겨진 리소스 또는 모듈 종속성을 처리한다.count : resource block은 1개의 인프라 객체를 구성한다. 1개 이상의 pool을 관리하고 싶을 때 사용한다.for_each : index 요소를 참조해야 할 경우 count 대신 사용한다.특정 요소가 목록 중간에 제거되면 해당 요소 뒤의 모든 인스턴스에서 해당 subnet_id 값이 변경되는 경우가 발생할 수 있는데 for_each를 통해서 해소할 수 있다.provider : 공급자 메타 인수는 리소스 유형 이름을 기반으로 선택하는 Terraform의 기본 동작을 재정의하여 리소스에 사용할 공급자 구성을 지정한다.lifecycle : create_b..
Data sourceVariable, Output을 이용해 데이터를 입력하거나 출력 되는 과정의 데이터를 변수에 담는 방식을 이용할 수 있다. 그 과정에 선언한 VPC, Subnet 생성 코드에는 하드코딩 된 데이터가 일부 있는데 재활용을 높이기 위해서는 이 부분을 최소화 해야 한다. 이 때 하드코딩 된 부분을 모두 변수로 선언해서 재활용을 높일 수도 있으나 Data source를 이용할 수 있다. Data source는 Terraform 외부 환경에 정의된 리소스의 Attribute 정보를 읽어와 코드에 변수 값을 저장하듯이 사용할 수 있다. 1. 서브넷 정보 확인기존 구성된 vpc.tf 파일에서는 서브넷 정보를 아래와 같이 하드코딩 해두었다.# vpc.tfresource "aws_subnet" "pu..
Attributeprovider를 통해 만들어진 리소스는 Attribute을 가지게 되는데, 이 값들은 서로 연관된 다른 리소스를 생성할 때 참조해야 할 때가 있다. 예를 들어, VPC는 vpc.id라는 Attribute을 가지고 있는데, subnet을 만들 때 vpc.id를 필수 값으로 반영해야 하기 때문에 참조할 데이터의 대상이 된다. 1. Attribute 참조 형식# _..aws_vpc.main.id 2. Attribute 적용 예시resource "aws_vpc" "main" { cidr_block = var.vpc_cidr tags = merge( { "Name" = "Main" }, var.default_tags )}resource "aws_subnet" "pu..
Variable & Validation 선언 변수를 사용하면 코드를 더 쉽게 재사용할 수 있고, 다른 구성 간에 코드를 공유할 수 있다. 1. variable 파일 없이 직접 입력하는 방식# vpc.tfresource "aws_vpc" "main" { cidr_block = "10.0.0.0/16" tags = { Name = "main", Environment = "development", CostCenter = "23213" }}2. variable.tf 파일을 이용해 데이터를 입력하는 방식variable은 "vpc_cidr", "default_tags" 두 가지로 구분된다.variable 내부는 type, description, default, validation로 구성되어 있다.# v..
팀 단위로 여러 사람이 동시에 코드를 작업하고 공유하는 경우 Local 백엔드 구성은 적합하지 않다. 오래된 변경 사항이 적용되는 것을 방지하지 위해서 누구나 최신 상태 파일에 액세스해야 한다.상태 파일은 내구성이 뛰어나고 모두가 다같이 사용 가능한 위치에 저장해야 한다.경합 상태를 방지하기 위해 동시 terraform 적용 작업이 발생하지 않도록 방지하는 매커니즘이 필요하다. AWS CLI 이용 S3 Bucket & DynamoDB 생성S3 Bucket 생성$ aws s3 mb s3://terraform-starter-bucket --region ap-northeast-2DynomoDB 생성$ aws dynamodb create-table \ --table-name tf_state_table \ --a..
plan, apply, destroyCommandDescriptionterraform plan • 이미 존재하는 원격 객체(Cloud resoure)의 현재 상태를 읽어 최신 상태인지 확인한다. • 적용하기 위해 구성한 코드를 읽어 현재 원격 객체의 상태과 비교해 차이점을 확인한다. • 차이가 발생한 부분을 출력하고, 변경 조치할 내용을 제안한다.terraform apply• terraform plan 명령으로 제안된 작업을 실행하여 실제로 원격 객체에 상태를 업데이트 한다.terraform destroy • 원격 객체를 삭제하는 명령이다. plan, apply 사용법1. 리소스 생성을 위한 .tf 파일 생성# vpc.tfresource "aws_vpc" "main" { cidr_block = "10...
Terraform은 AWS, Azure, GCP 등 Cloud Service Provider들의 서비스 리소스들을 선언적인 코드로 작성해 관리할 수 있도록 지원한다. 기본 용어 1. ProviderTerraform 외부에 존재하는 서비스와 연결해주는 모듈이다. AWS의 서비스를 이용하고 싶은 경우 AWS Provider를 선언해야 한다.2. Resource Provider가 제공하는 서비스 자원이다. 클라우드 내부의 Instance, Gateway, Securoty Group 등이 있다.3. HCL (Hashicorp Congifureation Language) Terraform에서 사용하는 프로그래밍 언어다. (Java, C, Python과 같은 프로그래밍 언어 같은..?)4. Plan Terrafor..
EndiYou
'분류 전체보기' 카테고리의 글 목록