티스토리 뷰
안녕하세요. CloudNet@ Terraform Study를 진행하며 해당 내용을 이해하고 공유하기 위해 작성한 글입니다. 도서 ‘Terraform: Up & Running(By Yevgeniy Brikman)’ 의 내용 및 스터디 시간 동안 언급된 주요 내용 위주로 간단히 정리했습니다.
사전환경
- AWS IAM User 생성
- AWS CLI 설치 및 IAM User 자격 증명 설정
3. AWS default VPC 준비 : 참고 링크
- AWS는 Region별로 여러 VPC를 생성할 수 있습니다.
# default VPC 삭제 시, 아래 명령어로 생성 가능
$ aws ec2 create-default-vpc# default VPC 확인
$ aws ec2 describe-vpcs --filter 'Name=isDefault,Values=true'# jq로 default VPC ID 확인(*jq : 참고 링크)
$ aws ec2 describe-vpcs --filter 'Name=isDefault,Values=true' | jq '.Vpcs[0].VpcId'# VPC 확인
export AWS_PAGER=""
aws ec2 describe-vpcs | jq
aws ec2 describe-vpcs --output yaml
4. 테라폼 설치
- 설치 링크 : 개인 OS 환경에 맞게 설치해줍니다.
# 자동 완성
$ terraform -install-autocomplete
$ cat ~/.zshrc
autoload -U +X bashcompinit && bashcompinit
complete -o nospace -C /opt/homebrew/bin/terraform terraform
단일 서버 배포
- text editor : visual studio code
- 빈폴더(study-terraform) -> main.tf 파일 생성
- aws 를 공급자로 사용하여 ap-northeast-1 리전에 인프라를 배포한다는 것을 의미
- provider : aws와 같은 공급자 이름
- type : instance와 같이 해당 공급자에서 생성할 리소스 유형
- name : 테라폼에서 이 리소스를 참조하기 위해 사용할 수 있는 my_instance와 같은 식별자
- CONFIG : 특정 리소스에 대한 하나 이상의 인수(argument)로 구성
aws AMI id 찾기(참고 링크)
$ aws ec2 describe-images --owners self amazon#ubuntu(ap-northeast-1)
ami-0ca3e2b4a8398fb39
EC2 인스턴스 배포 시 사용하는 aws_instace 리소스
aws_instance 리소스 배포 시 필수 인수(argument)
- ami : EC2 인스턴스를 생성하는 아마존 머신 이미지
- instance_type : 실행할 EC 인스턴스의 유형
# 코드 스캔, 공급자 확인, 필요한 코드를 다운로드(.terraform)
$ terraform init# 실제 변경 전 테라폼이 수행할 작업 확인(유닉스, 리눅스, 깃 등의 diff 명령 결과값과 유사, +항목:추가, - 항목:삭제, ~항목:수정)
$ terraform plan# 실제 인스턴스 생성
$ terraform apply# terraform resource 삭제
$ terraform destroy
버전 관리
- 테라폼 코드가 동작하면 버전 관리 도구에 저장하는 것을 권장
- 다른 팀 구성원과 코드 공유 가능 및 모든 인프라의 변경 내용을 추적하거나 커밋 로그 사용하여 디버깅 가능
$ git init
$ git add main.tf
$ git commit -m "Initial commit"
단일 웹 서버 배포
- http 요청에 응답할 수 있는 단일 웹서버를 배포합니다.
- 아래 bash script에서 index.html 파일에 ‘Hello, T101 Study” 텍스트를 저장 후 busybox 도구로 8080 포트에서 웹 서버를 실행하여 해당 파일을 제공합니다.
- nohub & 로 래핑하여 bash script가 종료되도 웹 서버가 백그라운드에서 영구적으로 실행됩니다.
- region에 따른 aws AMI ID 값 : 참고
- 웹 서버를 구동하기 전, 기본적으로 AWS EC2 인스턴스는 in/outbound 트래픽을 허용하지 않아 EC2 인스턴스가 8080 포트에서 트래픽을 수신하도록 하려면 보안 그룹을 생성해줍니다.
Error: with the retirement of EC2-Classic no new Security Groups can be created without referencing a VPC
관련 이슈 :
AWS provider 4.29.0 has breaking changes / backward incompatibilities! https://github.com/hashicorp/terraform-provider-aws/issues/26666
아래와 같이 vpc resource 정보를 추가해줍니다.
resource "aws_default_vpc" "default" {
tags = {
Name = "Default VPC"
}
}
resource "aws_security_group" "aws_sg" {
name = "AWS Security Group Demo"
description = "AWS Security Group Demo Description"
vpc_id = aws_default_vpc.default.id
}
웹서버 접속 확인
# [터미널3] 변수 지정
$ PIP=<각자 자신의 EC2 IP>
$ PIP=XX.XXX.XX.XXX
$ while true; do curl --connect-timeout 1 http://$PIP:8080/ ; echo "------------------------------"; date; sleep 1; done
변수 지정
- 웹 서버의 포트 넘버를 입력 받아서 처리해봅시다
plan 방안(-var 옵션)
terraform plan -var "server_port=8080"
입력 변수 값 사용하려면, 변수 참조(variable reference)라는 새로운 유형의 표현식을 사용할 수 있습니다.
var.<VARIABLE_NAME>
“${…}”
출력 변수
$ terraform output
public_ip = "13.231.145.133"$ terraform output public_ip
"13.231.145.133"
- 실습 코드 : Github repo
추가 질문 및 주의사항
Q)user_data_replace_on_change 값을 false 로 두었을 때 무슨일이 일어나는지
Q) aws cli profile이 여러개일 때 terraform 설정 : 링크
!!!) state 파일은 local보다 S3 같은 오브젝트 스토리지에 오브젝트들에 대해서 버저닝 기능을 활성화하여 관리 : 링크
!!!) s3/dynamodb에서 state 파일 관리 주의
$ terraform state list
ASG
-추후 업데이트 예정
로드밸런서 배포
-추후 업데이트 예정
blog migration project
written in 2022.10.16
https://medium.com/techblog-hayleyshim/iac-terraform-syntax-20b2b4f1cf1
'Programming > IaC' 카테고리의 다른 글
[IaC] Terraform state -상태파일격리 (0) | 2023.10.28 |
---|---|
[IaC] Terraform state -상태파일공유 (0) | 2023.10.28 |
[IaC] GKE configuration (0) | 2023.10.28 |
[IaC] Terraform Syntax-GCP (0) | 2023.10.28 |
Terraform (0) | 2023.10.28 |
- Total
- Today
- Yesterday
- IaC
- cloud
- PYTHON
- AWS
- k8s
- AI
- terraform
- GKE
- VPN
- SDWAN
- handson
- operator
- NFT
- k8s calico
- EKS
- 국제 개발 협력
- S3
- 도서
- 혼공파
- security
- cni
- k8s cni
- gcp serverless
- GCP
- 혼공단
- OS
- 혼공챌린지
- controltower
- 파이썬
- NW
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |