Terraform 오버뷰 - GCP Cloud Run 배포하기 공부/CLOUD
Date 2021. 8. 16. 16:29테라폼이란
클라우드의 인프라를 선언적(declaritve)으로 관리할 수 있게 해주는 IaC(Infrastructur as Code) 오픈소스 소프트웨어이다.
다시 풀어서 말하면 클라우드의 리소스(EC2의 경우 ami, instance type, GCP Cloud Run의 경우 컨테이너의 spec 등..)을
1) 선언적 2) 소스코드로 관리 할수 있는 소프트웨어라 할 수 있다.
이러한 IaC 툴을 이용하면 기존에 리소스를 CLI/ 콘솔 등으로 관리할때 보다 다양한 장점을 가져갈 수 있다.
1) 기존 방식인 콘솔 또는 CLI(API call) 을 통해 클라우드 리소스에 접근하는거와 달리 Code로 관리함으로써 클라우드 인프라에 대한 버전관리를 할 수 있다.(git 등 이용)
2) 코드로 관리하기 때문에 같은 인프라를 여러번 복제 하는 등 쉽게 인프라를 배포할 수 있다.
리소스 배포하기
가장 먼저 클라우드 리소스에 접근할 수 있는 API Key가 필요하다. GCP를 사용했고 json 형식의 키를 발급받아 사용했다.
1) Configuration
우선 테라폼 CLI를 설치해야 한다. 단일 바이너리 파일로 설치되므로 편리하다.
sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install terraform
다음은 테라폼에 대한 Configuration을 해주어야 한다. 폴더를 생성하고 key file을 가져온 뒤 main.tf를 수정한다.
cd terraform
cp JSON_KEY ./key.json
vi main.tf
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "3.5.0"
}
}
}
provider "google" {
credentials = file("key.json")
project = "PROJECT"
region = "REGION"
zone = "ZONE"
}
GCP를 기준으로 했으며 PROJECT, REGION, ZONE을 적절히 입력한다.
이제 테라폼 CLI를 이용해 프로젝트를 초기화한다.
terraform init
Initializing the backend...
Initializing provider plugins...
- Reusing previous version of hashicorp/google from the dependency lock file
- Installing hashicorp/google v3.5.0...
- Installed hashicorp/google v3.5.0 (signed by HashiCorp)
2) Write
이제 배포할 리소스에 대한 선언이 필요하다. 간단한 Cloud Run 컨테이너를 배포한다.
vi cloudrun.tf
resource "google_cloud_run_service" "default" {
name = "cloudrun-srv"
location = "asia-northeast1"
template {
spec {
containers {
image = "us-docker.pkg.dev/cloudrun/container/hello"
}
}
}
traffic {
percent = 100
latest_revision = true
}
}
Terraform Registry 에서 배포 가능한 리소스들의 정보를 알 수 있다.
3) Apply
terraform apply를 통해 기존 state와 리소스들을 비교하며 업데이트를 수행한다.
terraform apply
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
...
4) 결과 확인
terraform show 명령어는 현재 state를 보여준다.
terraform show
resource "google_cloud_run_service" ...
terraform show | grep url
url = "https://cloudrun-srv-ㅁㅁ-an.a.run.app"
// 컨테이너 cold start로 응답 지연될 수 있음
// IAM Policy를 설정해주지 않아 Forbidden을 반환합니다.
curl https://cloudrun-srv-ㅁㅁ-an.a.run.app
...
쓰면서 느낀 점
일단 쉽게 리소스를 배포할 수 있다는 뚜렷한 장점이 있다. 또한 테라폼 공식 페이지가 굉장히 잘나와있고 레퍼런스가 많아 참고할 자료가 많다.
반면에 불편한 점들도 존재한다.
기존에 있던 리소스를 테라폼으로 관리하기 위해서는 terraform import 를 통해 불러와야 하는데,
state만 업데이트 하고 configuration은 관리해주지 않는다. 손으로 한땀한땀 tf 파일을 수정해줘야 한다.
이를 위해 terraforming이나 terraformer 등의 도구가 존재하지만 완벽하지는 않아서 직접 수정해야 할 필요가 있다.
또한 테라폼 자체의 단점은 아니지만 테라폼으로 생성한 리소스를 기존 방식인 CLI등으로 수정하면 당연히 state와 어긋나게 된다. 이를 맞추려면 terraform taint나 terraform apply -replace를 통해 state를 맞춰줘야 할 필요가 있다.
'공부 > CLOUD' 카테고리의 다른 글
[GCP] Cloud Scheduler를 이용한 주기적 작업 실행 (0) | 2022.01.06 |
---|---|
[k8s] Service 리소스 Overview (2) : Ingress와 Health check (0) | 2021.08.15 |
[k8s] Service 리소스 Overview (1) (0) | 2021.08.14 |
[GCP] Cloud Run CI/CD (0) | 2021.05.24 |