terraform

· Cloud/IaC
Terraform을 통해 aws_instance를 만들면 기본 AMI값을 지정해주어야한다. 이 ami 값은 외우기도 좀 그렇고 자주 바뀌는 터라, 동적으로 가져와서 지정해줄 필요가 있다. Terraform의 'data' Block을 사용해 특정한 AMI 값을 AMI Marketplace에서 검색해 가져올 수 있다.예시로 ubuntu-22.04의 AMI 값을 가져와 본다.data "aws_ami" "ubuntu" { most_recent = true owners = ["099720109477"] # Canonical(Ubuntu 배포사)의 AWS 계정 ID filter { name = "name" values = ["ubuntu/images/hvm-ssd/ubuntu-jammy..
· Cloud/IaC
지난 3-tier VPC 구축에 이어서, 이번에는 Application단(EC2, ALB 등)을 설계해보도록 한다. 아키텍쳐 구성도 Terraform 코드 작성 Application 단에서 생성할 리소스는 크게 다음과 같다. 인스턴스 4개 보안그룹 키 페어 ALB 2개 (외부, 내부) 대상그룹 2개 (외부, 내부) 먼저 Application 모듈의 변수들을 구성한다. Application 단에서 사용될 외부 변수들에는 주로 vpc 관련의 것이 있다. 인스턴스를 생성할 때 사용될 vpc_id나 배치될 서브넷의 id 값이 여기에 해당된다. 이외에도 ami의 id값이나 미리 생성해둔 security group의 id 같은 리소스도 변수로 불러와서 사용할 수도 있을 것이다. variable "vpc_id" {}..
· Cloud/IaC
본격적으로 조금 더 복잡한 내용으로 들어가보도록한다. 많이 사용되는 WEB, WAS, DB 구조인 3-tier 아키텍쳐를 Terraform Code로 구성해보도록한다. 아키텍쳐 구성도 구성할 요소가 상당히 많은 것을 볼 수 있다. 이번 글에서는 네트워킹 요소(VPC)부터 구성하고, 그 다음으로 Application(WEB, WAS, DB)를 구축해보도록 한다. Terraform 코드 작성 전체적인 프로젝트는 module화 시켜 최대한 가독성있게 제작했다. (모듈화를 시킴으로써 각 모듈에서 필요한 요소들을 가져오고 내보내는 과정을 익힐 수 있었다. [output / variables]) ├── main.tf ├── module │ ├── application# EC2, ALB 등의 application 요..
· Cloud/IaC
이번엔 Terraform의 꽃으로 불리는, 처음에는 조금 이해하기 어려운 개념인 Module을 알아보도록 한다. Module Terraform 코드들을 관련되어있는 것끼리 그룹으로 모아서 하나의 패키지 형태로 구성한 것 이때, 하나의 그룹으로 묶이는 단위는 '폴더'가 되며, 이 폴더 내의 테라폼 코드들이 모듈이 된다. 개발을 해본 사람이면 쉽게 라이브러리 개념으로 바라볼 수 있다. 정의해둔 라이브러리를 다른 프로젝트나 코드에서 import해서 사용하는 것같은 느낌이다. Module의 장점 재사용성 Module은 코드의 재사용성을 높일 수 있다. 한번 작성해놓은 인프라 리소스 모듈을 다른 인프라나 프로젝트에서 호출함을 통해 개발비용을 줄이고 일관된 구조를 유지할 수 있다. 구조화와 가독성 본래 Terraf..
· Cloud/IaC
Terraform apply를 통해 리소스를 생성하면 실제 인프라에 terraform 코드 내용이 반영되어 리소스가 생성된다.이렇게 apply로 생성한 리소스는 destroy로 삭제하는데, 만약 terraform으로 생성한 리소스를 웹 콘솔에서 임의로 삭제를 해버리면 어떻게 될까?혹은 terraform으로 이미 생성한 리소스에 대해서 또 다시 apply를 적용시킨다면 어떨까?더 나아가서 팀 이상의 단위로 인프라를 관리할 때 여러명이 동시에 같은 리소스에 접근하는 경우, 적용된 인프라 리소스가 충돌하는 상황이 발생할 수도 있다. 이런 문제를 해결하기위해 등장한 state와 backend 개념에 대해 알아보도록 한다. tfstateTerraform이 생성한 인프라 리소스의 상태 정보를 저장해둔 파일, 기본적..
· Cloud/IaC
이번 글에서는 직접 간단한 인프라 아키텍쳐를 구성하고 코드를 작성해 Apply까지 진행해본다. 인스턴스 2개를 생성해 하나의 ALB로 묶은 아키텍쳐를 생성하보고자 한다. ALB 1개와 2쌍의 서브넷, 2개의 인스턴스로 구성된 아주 전형적인 ALB 아키텍쳐이다. 시작하기에 앞서, Terraform 실행을 위한 Credential을 생성해야한다. Terraform을 통해 다양한 리소스들을 관리하므로 AdministratorAccess 권한을 가진 사용자를 생성한다. 사용자 생성 후 액세스 키도 생성한다. 이렇게 생성한 Credential은 terraform 코드 내에 직접 넣을 수 있고, CLI config/credential 파일에 넣고 불러올 수도 있으며, 시스템 환경변수 식으로 설정해 불러올 수 있기도..
· Cloud/IaC
이번에는 Terraform에서 사용되는 기본 키워드를 몇 가지 알아보고, 직접 code를 작성해 인프라를 올려본다. 기본 키워드 Provider Terraform 템플릿으로 구성될 인프라의 타입으로, AWS / GCP / Azure와 같은 퍼블릭 클라우드 서비스 부터 SaaS 타입의 서비스까지 다양한 외부 서비스들을 Terraform과 연결해주는 기능 프로바이더는 configuration 단계에서 반드시 설정해주어야한다. 아래 링크에서 Terraform이 지원하는 Provider 목록을 확인할 수 있다. Terraform Registry registry.terraform.io Terraform은 이러한 Provider들의 API를 호출하는 식으로 실행된다. 아래 코드는 Provider를 AWS로 지정하는..
· Cloud/IaC
Public cloud가 발달함에 따라 많은 개인과 기업들이 운영 중인 서비스들을 클라우드로 전환하게 되었다. 클라우드로 전환하고 점차 서비스들이 확장되며, 사용중인 리소스들의 수가 증가하여 프로비저닝과 운영/관리가 복잡하고 어렵게되었다. 이에 따라, 클라우드 리소스를 코드 형식으로 관리하고자하는 움직임이 나타나고, 이번에 소개할 Terraform이 등장하게 되었다. Terraform terraform은 Hashicorp에서 개발한 오픈소스 인프라관리 도구로, 인프라의 구조를 코드로 작성해서 간단하게 구축하고 인프라의 형상을 관리할 수 있다. Terraform은 HCL(Hashicorp Configuration Language)라는 자체적인 설정 Language를 이용해 인프라 리소스들을 선언한다. 자체..
Omoknooni
'terraform' 태그의 글 목록