Terraform 10

Terraform - Kubernetes 연동

Cluster Bootstrap? 일반적으로 K8s 클러스터를 생성한 다음, 바로 Application을 배포하기 보단 원활한 클러스터 운영을 위해 시스템 애플리케이션 및 스택(Argo CD, Prometheus, Grafana 등)을 먼저 설치하는 경우가 많다. 클러스터가 얼마 되지 않고 앞으로 추가되는 경우도 없다면 큰 문제가 없지만, 계속해서 운영해야할 클러스터가 늘어난다면 이런 시스템 애플리케이션을 일종의 Bootstrap처럼 기본 제공하는 방안을 고려할 필요가 있다. 이 페이지는 Terraform을 통해 K8s 리소스(ex: Deployment, Service)를 생성하는 방법에 대해 설명한다. 다만 클러스터를 생성하는 과정은 벤더나 Public/Private 여부 등 환경에 따라 큰 차이가 있..

IaC 2022.06.05

Terraform - Azure(3)

Terraform으로 Azure에 VM 인스턴스를 하나 생성해보자. 사실 생각보다 간단하지 않고, 생성해야 할 리소스가 꽤 많다. Resource Group Virtual Network Subnet Public IP Network Security Group 및 Rule Network Interface 및 Association Boot diagnostics 저장을 위한 Storage Account SSH Key VM Instance 위에서 나열한 리소스들을 다이어그램으로 표현하면 다음과 같다. 1. Terraform을 실행할 Directory를 생성한다. mkdir demo-vm && cd demo-vm 2. 아래와 같이 main.tf 파일을 작성한다. # Configure the Microsoft Azu..

IaC 2022.03.14

Terraform - Azure(1)

AWS와 마찬가지로 Azure 역시 Terraform을 통해 다양한 리소스를 생성할 수 있고, 원하는 인프라를 구성할 수 있다. 환경 설정 1. Terraform 설치 Terraform을 설치하는 방법에 대해선 링크를 참고한다. 2. Azure CLI 설치 Linux에서 아래 명령어로 Azure CLI를 설치할 수 있다. curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash 제대로 설치되었는지 다음 명령어를 수행한다. az version 3. Azure Login CLI를 통해 Azure에 로그인하기 위해 다음 명령어를 수행한다. az login 이후 브라우저를 통해 팝업되는 Login 메뉴에서 로그인을 진행한다. 로그인이 완료되면, CLI에서 현재 Subsc..

IaC 2022.03.11

Terraform - (7) Advanced

리소스 간의 의존성(Dependency) 처리 Terraform 리소스 정의 순서에 관계없이, 의존성을 위해 특정 리소스를 먼저 생성해야 할 필요가 있다. 예를 들어, VPC를 추가한 후 ec2 인스턴스를 해당 VPC 안에 생성하는 동작을 수행하는 경우이다. 이를 위해 Terraform은 resource 블록 안에 'depends_on' 필드를 설정하여, 다른 리소스에 의존성이 있는 것을 명시할 수 있다. 다음은 ec2 인스턴스 'web'과 'db'를 생성하는 main.tf 이다. 'web' 인스턴스는 'db' 인스턴스에 의존성이 있기 때문에 반드시 'db' 인스턴스가 먼저 생성되어야 한다. provider "aws" { region = "ap-northeast-2" } resource "aws_inst..

IaC 2021.06.19

Terraform - (6) IAM

AWS IAM IAM은 'Identitiy and Access Management'의 약자로, AWS 리소스에 대한 접근을 제어할 수 있는 서비스이다. IAM을 통해 Authentication 및 Authorization이 이루어진다. 자세한 내용은 링크를 참고하기 바란다. IAM이란 무엇인가요? - AWS Identity and Access Management 이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오. docs.aws.amazon.com 이번 시간엔 Terraform을 통해 IAM User와 Policy를 생성하고 이를 Binding하는 동작을 Terraform으로 정의해보자. 우선 ..

IaC 2021.06.18

Terraform - (5) Modules

Module 지금까지는 main.tf에 모든 코드를 작성하는 방식으로 진행하였다. 이번 시간엔 용도에 따라, Terraform 파일을 분리하고 이를 main.tf에서 호출하는 방식으로 구성해보자. 우선 'modules/ec2' 라는 디렉토리 하위에 ec2.tf 파일을 다음과 같이 작성한다. variable "ec2name" { type = string } resource "aws_instance" "ec2" { ami = "ami-0094965d55b3bb1ff" instance_type = "t2.micro" tags = { Name = var.ec2name } } output "instance_id" { value = aws_instance.ec2.id } 'ec2name' 변수는 해당 모듈을 호출하..

IaC 2021.06.10

Terraform - (4) 기본 AWS 리소스

aws_instance 리소스 이번 시간엔 본격적으로 EC2를 생성해보자. 우선 다음과 같은 main.tf를 작성한다. provider "aws" { region = "ap-northeast-2" } resource "aws_instance" "ec2" { ami = "ami-0094965d55b3bb1ff" instance_type = "t2.micro" } EC2 인스턴스를 추상화한 aws_instance 리소스를 정의한다. Required field가 2개 있는데 하나는 AMI의 ID를 의미하는 ami와 인스턴스 타입 'instance_type'이다. AMI ID는 Region마다 다르며, 찾는 방법은 링크를 참고하기 바란다. 참고로 위 EC2 인스턴스는 따로 VPC를 지정하지 않았기 때문에, De..

IaC 2021.06.08

Terraform - (3) Variables

Terraform 변수형 Terraform 코드 안에서 다양한 타입의 변수를 정의하고, 이를 참조할 수 있다. 기본 제공하는 변수형은 다음과 같다. 'variable' 키워드로 시작하며, 그 뒤에 변수명을 선언하는 것으로 새로운 변수를 정의할 수 있다. string variable "vpcname" { type = string default = "myvpc" } 일반적인 문자열이며, Unicode 문자들로 구성된다. number variable "sshport" { type = number default = 22 } 숫자(numeric)를 담을 수 있는 변수형으로, 정수형 데이터 외에 실수(ex: 3.14)도 표현 가능하다. bool variable "enabled" { type = bool defaul..

IaC 2021.06.07

Terraform - (2) 기본 사용법

리소스 정의 tutorial01이라는 디렉토리와 하위에 main.tf 라는 파일을 생성한 뒤, 아래와 같은 코드를 작성해보자. 'ap-northeast-2' region에 새로운 VPC 리소스를 생성하는 매우 간단한 코드이다. 참고로 Terraform은 HashiCorp에서 정의한 언어인 HCL을 사용하며, 확장자명은 반드시 .tf 파일 또는 .tf.json(JSON 형식)을 갖는다. provider "aws" { region = "ap-northeast-2" } resource "aws_vpc" "myvpc" { cidr_block = "10.0.0.0/16" } provider는 AWS, Azure와 같은 Public Cloud에서부터 Docker, K8s와 같은 외부 Infrastrcuture의 A..

IaC 2021.06.06

Terraform - (1) 소개 및 설치

Terraform Terraform을 간단히 소개하자면, 다양한 Cloud Provider(ex: AWS, Azure)의 플랫폼을 지원하는 IaC툴이다. IaC(Infrastructure as Code) 개념이 아직 낯설다면 아래 링크를 참고하길 바란다. 코드형 인프라(IaC)란? 코드형 인프라(Infrastructure as Code, IaC)는 수동 프로세스가 아닌 코드를 통해 인프라를 관리하고 프로비저닝하는 것을 말합니다. www.redhat.com 설치 Ubuntu/Debian 계열의 Linux는 apt를 통해 Terraform을 설치할 수 있다. $ curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - $ sudo apt-..

IaC 2021.03.29