2021/06 7

Container Vs. VM

이번 시간엔 컨테이너와 가상머신(VM; Virtual Machine)을 비교하는 시간을 갖고자 한다. VM(Virtual Machine) 하나의 물리적인 컴퓨터(Baremetal) 위에 하이퍼바이저(Hypervisor)가 존재하여 H/W 자원(CPU, Memory 등)을 가상화한 레이어를 제공한다. VM은 하이퍼바이저 위에서 필요한 만큼의 자원이 할당된 가상의 컴퓨터로, 각각의 VM은 서로간의 존재를 알 수 없으며 커널을 포함한 OS는 독립적으로 실행된다. 일반적으로 클라우드 환경에서 인프라(서버, 네트워크, 스토리지 등)를 프로비저닝하는데 가장 많이 사용되며, 환경을 분리하거나 전통적인 Monolithic Architecture 기반의 서비스를 운영하는데 쓰인다. 물리적인 컴퓨터와 기능면에선 차이가 없..

Cloud 2021.06.26

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