서론
아래에 글은 공식문서를 공부하며 정리한 내용입니다.
참고
테라폼을 사용하려면 설치해야 함. 해시코프는 테라폼을 바이너리 패키지로 제공함.
설치 방법
# 설치
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
# 설치 확인
terraform -help
# (옵션)업그레이드
brew update
brew upgrade hashicorp/tap/terraform
# apt 업데이트 및 필요한 패키지 설치
$ sudo apt-get update -y && \
sudo apt-get install -y gnupg software-properties-common
# 해시코프 gpg key 설치 및 key 검증
$ wget -O- https://apt.releases.hashicorp.com/gpg | \
gpg --dearmor | \
sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
$ gpg --no-default-keyring \
--keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg \
--fingerprint
/usr/share/keyrings/hashicorp-archive-keyring.gpg
-------------------------------------------------
pub rsa4096 2020-05-07 [SC]
E8A0 32E0 94D8 EB4E A189 D270 DA41 8C88 A321 9F7B
uid [ unknown] HashiCorp Security (HashiCorp Package Signing) <security+packaging@hashicorp.com>
sub rsa4096 2020-05-07 [E]
# 테라폼 설치
$ sudo apt update -y && \
sudo apt-get install terraform
# 패키지 관리를 위한 yum-config-manager 설치
sudo yum install -y yum-utils
# OS 확인
cat /etc/*-release | grep -i name
# OS에 따라 MY_OS 변수를 아래 두 가지 중에 하나를 선택
MY_OS="RHEL" # or "AmazonLinux"
# yum-config-manager로 공식 해시코프 리눅스 repo를 추가
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/$MY_OS/hashicorp.repo
# 추가한 repo로 테라폼 설치
sudo yum -y install terraform
$ terraform -help
terraform -help plan
테라폼 커맨드 자동완성 설정을 하자.
bash or zsh
# bash or zsh의 config 파일이 있는지 확인
cat ls ~/.bashrc # or `cat ls ~/.zshrc`
# 자동완성 패키지 설치
terraform -install-autocomplete
이제, 테라폼이 설치 됐으므로 잘 작동하는지 확인하기 위해 테라폼을 활용하여 nginx 서버를 docker로 띄워보자.
# 워킹디렉토리 생성 및 이동
$ mkdir learn-terraform-docker-container
cd learn-terraform-docker-container
# main.tf 설정 파일 작성
$ cat <<EOF > main.tf
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 2.13.0"
}
}
}
provider "docker" {}
resource "docker_image" "nginx" {
name = "nginx:latest"
keep_locally = false
}
resource "docker_container" "nginx" {
image = docker_image.nginx.latest
name = "tutorial"
ports {
internal = 80
external = 8000
}
}
EOF
# 배포
$ terraform init
$ terraform apply
# 배포 확인
$ docker ps -f name=tutorial
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ffe72beb9794 a99a39d070bf "/docker-entrypoint.…" 30 seconds ago Up 29 seconds 0.0.0.0:8000->80/tcp tutorial
# 삭제
$ terraform destroy
# 삭제 확인
$ docker ps -f name=tutorial
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES