본문 바로가기
💻 개발과 자동화

Terraform으로 어디서든 동일한 DevOps 환경 재현하기

by 슬레발 2026. 4. 10.
반응형

목차

 

1. WSL 설치 및 Ubuntu 준비

먼저 Windows에서 WSL을 설치한다.

이 명령어는 반드시 Windows PowerShell을 관리자 권한으로 실행한 뒤 입력해야 한다.

wsl --install
 

설치 후 재부팅하고, Ubuntu를 실행한다.


처음 실행할 때 사용자 이름과 비밀번호를 설정하게 된다.

이 비밀번호는 Ubuntu 내부에서 sudo 사용할 때 쓰는 비밀번호다.


2. 기본 패키지 설치

Ubuntu에서 필요한 기본 도구들을 먼저 설치한다.

이 단계에서 패키지를 업데이트하지 않으면 이후 Terraform이나 기타 도구 설치 과정에서 오류가 발생할 수 있다.

sudo apt update
sudo apt upgrade -y
sudo apt install -y git curl unzip gnupg software-properties-common


3. Git 설정 및 프로젝트 clone

새 PC에서는 Git 설정도 다시 해줘야 한다. 

user.name과 user.email은 형식만 맞으면 되고, 실제 값은 아무거나 사용해도 동작에는 문제가 없다.

git config --global user.name "Seulgi"
git config --global user.email "GitHub 이메일"
git config --global --list
 

이후 프로젝트를 가져온다.

cd ~
git clone https://github.com/xotmfrlox/cloud-native-devops-gcp.git
cd cloud-native-devops-gcp
 

4. Terraform 설치

Terraform은 서버가 아니라 로컬 환경에 설치한다.

sudo apt-get update && sudo apt-get install -y gnupg software-properties-common
wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg > /dev/null
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list

sudo apt update
sudo apt-get install terraform

terraform -v //설치확인
 

5. Hetzner API Token 설정

Hetzner 관련 설정은 Hetzner Cloud 콘솔에서 진행한다.
접속 주소: https://console.hetzner.cloud/

 

Terraform은 Hetzner Cloud API를 통해 서버를 생성한다.
이때 API Token은 로컬 환경에서 Hetzner 계정으로 요청을 보내기 위한 인증 수단이다.
즉, 로컬 PC에서 Terraform을 실행하면 이 토큰을 이용해 Hetzner에 서버 생성 요청이 전달된다.


경로: Hetzner Cloud → Security → API Tokens → Create Token

export HCLOUD_TOKEN="발급받은 토큰"
 

이 값은 현재 터미널에서만 유지되기 때문에
새 환경에서는 다시 설정해야 한다.

API Token VS SSH Key

구분 용도
API Token Terraform이 Hetzner에 서버 생성/삭제 요청
SSH Key 서버에 접속 (ssh root@IP)

6. Terraform 실행

Terraform은 terraform 폴더 안에서 실행한다.

cd ~/cloud-native-devops-gcp/terraform

terraform init // 필요한 provider와 모듈을 다운로드하고 Terraform 실행을 초기화한다.
terraform plan // 현재 상태와 비교해서 어떤 리소스가 생성/변경될지 미리 보여준다.
terraform apply // plan 결과를 실제로 실행하여 Hetzner에 서버를 생성한다.

이 단계에서는 서버만 생성된다.

 

Terraform을 처음 실행할 때 다음과 같은 오류가 발생할 수 있다.

Error: Failed to load plugin schemas
permission denied


이 오류는 Terraform provider 실행 파일에 권한이 없을 때 발생한다.
주로 새로운 PC 환경에서 .terraform 디렉터리가 정상적으로 초기화되지 않았을 때 나타난다.

해결 방법은 기존 provider 캐시를 삭제하고 다시 초기화하는 것이다.

rm -rf .terraform
rm .terraforhttp://m.lock.hcl
terraform init
terraform apply

7. SSH Key 준비

SSH key는 서버 접속 시 비밀번호 입력 없이 인증하기 위해 사용한다.
key가 설정되어 있으면 `ssh root@IP` 실행 시 바로 접속되고, 없으면 password 입력을 요구하게 된다.

새 PC에서는 SSH key가 없는 경우가 많으므로 먼저 확인한다.

// 키 여부 확인
ls ~/.ssh
id_ed25519.pub 등 키가 있는 확인후 없으면 생성한다.

// 키 생성
ssh-keygen -t ed25519

// 생성된 공개키 확인:
cat ~/.ssh/id_ed25519.pub

8. Hetzner에 SSH Key 등록

Hetzner 콘솔에서 SSH key를 등록한다.

  • Security → SSH Keys → Add Key


9. Terraform에 SSH Key 연결

Terraform 서버 설정은 프로젝트 내부 terraform 폴더에 있는 main.tf 파일에서 관리된다.

서버 생성 시 SSH key가 적용되도록 main.tf에 키를 명시한다.

cd ~/cloud-native-devops-gcp/terraform/main.tf

// 아래 내용 추가 혹은 ssh_keys 확인
resource "hcloud_server" "devops" {
name = "devops-server"
server_type = "cx23"
image = "ubuntu-22.04"
location = "hel1"

ssh_keys = ["등록한 SSH key 이름"]
}
 

10. 서버 재생성

SSH key 설정을 반영하려면 서버를 다시 생성해야 한다.

terraform destroy
terraform apply

11. 서버 접속

SSH 접속 전에 먼저 서버 IP를 확인해야 한다.

확인 방법은 두 가지다.

1. Terraform 출력값으로 확인
terraform output​
안될 경우에는,

2. Hetzner Cloud 콘솔에서 확인
Project 선택 → Servers → 생성된 서버 클릭 → Networking 탭 또는 서버 목록에서 IPv4 확인
 

12. k3s 설치

서버를 destroy 후 다시 생성하면 다음과 같은 오류가 발생할 수 있다.
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

이 오류는 같은 IP에 대해 이전 서버의 SSH fingerprint가 로컬에 남아 있을 때 발생한다.
Terraform으로 서버를 새로 만들면 서버는 완전히 새로운 인스턴스이기 때문에 fingerprint도 변경된다.

로컬의 기존 기록을 삭제하면 해결된다.
ssh-keygen -f "~/.ssh/known_hosts" -R "<SERVER_IP>"

이후 다시 ssh 접속을 시도하면 새로운 fingerprint를 등록하고 정상적으로 접속할 수 있다.

ssh root@<SERVER_IP>
 

정상적으로 설정되면 비밀번호 없이 접속된다.


13. 애플리케이션 배포

서버에 들어간 뒤 Kubernetes를 설치한다.

apt update
apt install -y git curl

curl -sfL https://get.k3s.io | sh -

// 확인
kubectl get nodes
 

14. 결과 확인

cd /root
git clone https://github.com/xotmfrlox/cloud-native-devops-gcp.git
cd cloud-native-devops-gcp

kubectl apply -f k8s/
 

15. 결과 확인

kubectl get pods
kubectl get svc
kubectl get ingress
 

브라우저에서 서버 IP로 접속하면 애플리케이션을 확인할 수 있다.


마무리

새로운 PC에서 같은 환경을 다시 구성하는 과정은
단순히 코드만 가져오는 것으로 끝나지 않는다.

로컬 환경(WSL, Terraform), 인증 정보(API Token, SSH key),
그리고 인프라 코드까지 모두 맞아야 동일한 환경이 재현된다.

이 과정을 한 번 정리해두면,
다른 환경에서도 같은 방식으로 빠르게 인프라를 다시 만들 수 있다.

 

 
반응형

댓글