IaC/Terraform
[Terraform] Terraform Cloud
📌INDEX 백엔드(Backend) Terraform Cloud ✔️ 백엔드(Backend) 현재 사용하고 있는 백엔드: Local Backend s3에 상태를 저장하고 공유 : s3, dynamo DB 를 이용한 원격 백엔드 예시 terraform { backend "s3" { bucket = "mybucket" key = "path/to/my/key" region = "us-east-1" } } 동시에 접근하는 것을 방지하기 위해 locking 사용하며, s3는 잠금 기능이 없기 때문에 dynamodb를 사용하여 locking한다. { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetItem", ..
[Terraform] 데이터 소스(Data Source)
Data Source: aws_ami 프로바이더에서 정보를 가져오는 것을 모두 데이터 소스라한다. data 블록에 작성하며, 리소스와 정의하는 방법은 동일하다. owner 필수(required) 필터(filter)를 걸어서 검색 다음과 같이 Data Sources를 확인할 수 있다. 참고) ubuntu image 검색 사이트 💻 실습: aws_ami data source로 ami 생성하기 📝 data_source.tf data "aws_ami" "ubuntu_image" { owners = ["099720109477"] most_recent = true #가장 최신 버전을 사용할 것인가 filter { name = "name" values = ["ubuntu/images/hvm-ssd/ubuntu-*-a..
[Terraform] Count 반복문 (with length function)
count Meta-Argument count는 resource에서만 사용 가능 count는 resource의 가장 처음에 적는 것이 관습 0부터 시작하는 count.index를 참조하여 사용 예시 : count에 값에 정수인 인수가 포함된 경우 Terraform은 그만큼의 인스턴스를 생성한다. resource "aws_instance" "server" { count = 4 # create four similar EC2 instances ami = "ami-a1b2c3d4" instance_type = "t2.micro" tags = { Name = "Server ${count.index}" } } 📝main.tf : eip에서 instance에 count.index를 통해 참조한다. resource "..
[Terraform] 모듈(Module)
✔️ 모듈(Module)이란? Module Terraform AWS Module Github 저장소 ansible에서의 역할(role)과 비슷하며, 자주 사용하는 리소스들을 모아둔 컨테이너이다. 모듈의 종류 root 모듈 : 기본 작업 디렉터리의 파일에 정의된 리소스 child 모듈 : 모듈에 의해 호출된 모듈 모듈 초기화 초기화해야 모듈이 다운로드 된다. terraform init 예시 module "myvpc" { source = ...입력 변수... } resource "aws_instance" "web" { subnet_id = module.myvpc. } 💻 AWS VPC 모듈 사용해보기 여기에 이어서 작성한다. 모듈을 사용할 때는 output 변수 이름 잘 확인해야 한다❕ : aws vpc m..
[Terraform] Provisioners (feat.Taint)
📌INDEX Provisioners Provisioner 연결 실습해보기 Taint란? Ansible 실행 방법 ✔️ Provisioners Provisioners는 terraform에서 제공하는 공통 argument이다. "Provisioners are a Last Resort " : 최후의 수단이라는 뜻으로, 되도록 user-data를 사용하는 것을 권장한다. ☁️ 참고 user_data를 먼저 실행할 지 provisioner를 먼저 실행할 지 결정할 수 있는 방법은 없고, provisioner는 순서대로 실행된다. Provisioner 종류 file: 파일 복사 새로 생성된 리소스로 파일 또는 디렉토리를 복사하는 데 사용한다. resource "aws_instance" "web" { # ... # ..
[Terraform] 사용자 데이터(Userdata)와 보안그룹(Security Group)
📌INDEX 사용자-데이터(Userdata) security_group ✔️ 사용자 데이터(Userdata) AWS EC2 인스턴스 생성시 작성하는 userdata와 동일하다. 예시 1) 인스턴스 resource 내에 작성하기 user_data = d > c > EOF 꼭 EOF일 필요는 X [vagrant@controller 01]$ cat a > b > c > ABC 참고) output으로 확인되는 elastic_ip와 ec2 public ip는 왜 다를까? Outputs: app_server_elastic_ip = "3.35.59.108" app_server_public_ip = "3.38.93.53" 출력된 ec2 public ip는 인스턴스가 생성될 때의 ip이고, 탄력적 ip를 할당받으면서 기..
[Terraform] 출력값(Output)과 로컬값(Local)
📌INDEX 출력 값(Output) 로컬 값(Local) ✔️ 출력 값(Output) Output Values 원하는 값을 쉽게 얻기 위해 사용하며, 출력 값은 output 블록을 사용하여 선언해야 한다. 📝output.tf output "app_server_elastic_ip" { value = aws_eip.app_server_eip.public_ip } output "app_server_public_ip" { value = aws_instance.app_server.public_ip } 명령어를 통해 output 목록을 확인할 수 있다. terraform output apply 후 마지막에 output을 확인할 수 있다. Apply complete! Resources: 0 added, 0 chang..
[Terraform] Terraform 개요 및 설치
📌INDEX Terraform이란? Terraform 설치 Terraform 구성 파일 Terraform 실행 순서 Terraform 입력 변수 실습해보기 ✔️ Terraform이란? hashicorp/terraform: Terraform 깃허브 저장소 What is Terraform? terraform은 배포를 위한 것 => 새로운 것을 만들어내는 것 , 라이프사이클(변경, 삭제, 생성 등) 담당 ansible은 새로운 것을 만들어내는 것이 아닌 주로 구성을 관리하기 위한 것 terraform은 IaC(Infrastructure as Code) 도구 provider를 통해 액세스 가능한 API를 통해 거의 모든 플랫폼 또는 서비스와 함께 작동할 수 있음 HCL(Hashicorp Configuration..