Terraform으로 웹서비스 인프라 자동화
카카오클라우드 인프라 컴포넌트를 이용하여 Web, App, Bastion 등의 프로비저닝을 자동화하는 Terraform 예제를 제공합니다.
- 예상 소요 시간: 30분
- 권장 운영 체제: MacOS, Ubuntu
- Terraform 버전: 1.6.3
- 리전 및 가용 영역: kr-central-2-a
- 참고 문서
사전 준비
예제에서 확인할 수 있는 자동화된 구성요소와 사용자가 예제를 사용하기 위해 준비해야 하는 구성요소는 다음과 같습니다.
자동화된 구성요소
항목 | 설명 |
---|---|
자동화된 구성요소 | - Load Balancer - Virtual Machine - Security Group - Floating IP |
사전 준비가 필요한 구성요소
사전 준비 구성 요소는 콘솔을 통해 해당 내용이 준비되었는지 확인합니다.
항목 | 설명 |
---|---|
키 페어(Key Pair) | VM > Key pair 탭에서 공개키 확인 |
Public Subnet | VPC > Subnet 탭에서 확인 |
액세스 키 | 사용자 설정 > 액세스 키 탭에서 확인 |
구성도 및 리소스 계획
이 가이드에서 생성할 클라우드 인프라 자원 및 구성은 다음과 같습니다.
Virtual Machine
구분 | 이름 | 인스턴스 타입 | Public IP | Image |
---|---|---|---|---|
Bastion | handson-bastion | m2a.large | Y | Ubuntu 20.04 |
WEB1 | handson-web-1 | m2a.large | N | Ubuntu 20.04 |
WEB2 | handson-web-2 | m2a.large | N | Ubuntu 20.04 |
WAS1 | handson-app-1 | m2a.large | N | Ubuntu 20.04 |
WAS2 | handson-app-2 | m2a.large | N | Ubuntu 20.04 |
이 문서에서는 웹 서버와 애플리케이션 서버의 예제 코드를 제공합니다. 이 코드는 예제 웹서비스인 KEP-Library를 기반으로 합니다. 웹 서버는 React 앱을 구성하여 Nginx를 통해 배포하며, 애플리케이션 서버는 Spring 앱을 설정하여 실행합니다.
Load Balancer
구분 | 이름 | Public IP | 설명 |
---|---|---|---|
EXT-LB | handson-web-lb | Y | 웹 서버에 대한 부하 분산 |
INT-LB | handson-app-lb | N | 애플리케이션 서버에 대한 부하 분산 |
Step 1. Terraform 설치하기
실습을 진행하기 위해서는 사용자 로컬 환경에 Terraform 설치가 필요합니다. Homebrew 패키지 매니저를 이용하거나, Terraform 공식 가이드를 참고하시기 바랍니다.
- Mac 환경
- Linux(Ubuntu) 환경
-
Homebrew 패키지 매니저를 이용하여 로컬 환경에 Terraform을 설치합니다.
brew install terraform
-
설치가 정상적으로 되었는지 아래 명령어를 통해 확인합니다.
terraform -version
# Terraform v1.3.3 ## ... -> 정상 설치 시 이와같은 버전 정보를 확인할 수 있습니다.
-
아래 명령어를 이용하거나, Terraform 공식 가이드를 참고하시기 바랍니다.
apt-get update
apt-get install terraform -
설치가 정상적으로 되었는지 아래 명령어를 통해 확인합니다.
terraform -version
# Terraform v1.3.3 ## ... -> 정상 설치 시 이와같은 버전 정보를 확인할 수 있습니다.
Terraform 설치와 관련한 자세한 내용은 Terraform 공식 가이드 문서를 참고하시기 바랍니다.
Step 2. 설정 파일 작성하기
카카오클라우드에서 자원을 생성하기 위해서 리전 및 인증키 등의 추가적인 정보가 필요합니다. 아래 예제를 참고하여 기존 경로에 추가 정보를 입력하거나 해당 파일에 추가합니다.
mkdir -p ~/.config/openstack/
cat << EOF > ~/.config/openstack/clouds.yaml
clouds:
hands-on:
region_name: '{REGION_NAME}'
interface: 'public'
auth_type: "v3applicationcredential"
auth:
auth_url: 'https://iam.kakaocloud.com/identity/v3'
application_credential_id: "{액세스 키 ID}"
application_credential_secret: "{보안 액세스 키}"
EOF