Bigquery 추가하기

terraform에서 bigquery를 생성하게 하려한다. docs에 bigquery dataset을 생성하는 코드를 찾아보았다.

https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/bigquery_dataset#argument-reference

 

Terraform Registry

 

registry.terraform.io

여기서 필요한 코드들만 가져오려하는데 Arguments를 찾아보니 다음과 같았다.

 

Required는 dataset_id에만 있기 때문에 다음과 같이 코드 생성이 가능하다. (지역정보도 넣어주었다.)

resource "google_bigquery_dataset" "demo-dataset" {
  dataset_id = "데이터셋 이름"
  location = "asia-northeast3"
}

 

이제 terraform apply를 진행하면 아래와 같이 데이터 세트가 생성된 것을 확인 가능하다.

 


Variables

variables.tf 파일을 이용해서 변수명을 관리 가능하다. 변수의 기본적인 형태는 다음과 같다.

variable "Variable Name" {
  description = "Variable Description"
  default     = "value"
}

 

후에 main.tf의 각종 resource들을 정의할때 사용했던 variables를 모아서 정리해주고, 적용시켜주었다.

...
resource "google_bigquery_dataset" "demo-dataset" {
  dataset_id = var.bq_dataset_name
  location   = var.location
}

 

또한 지난 시간에 진행했던 GOOGLE_APPLICATION_CREDENTIALS도 variable로 관리가 가능하다!!

provider "google" {
  # gcloud auth application-default login
  # project = "<Your Project ID>" 
  credentials = var.credentials
  project     = var.project
  region      = var.region
}

 

다음과 같이 credentials 변수를 입력해주면 사용 가능하다.

 


전체 코드는 Github에 업로드 하였습니다.

https://github.com/poriz/data-engineering-zoomcamp-poriz/tree/main/01-docker-terraform/terraform_gcp

'Infra & Container > Terraform' 카테고리의 다른 글

Infra - Terraform > basic (GCP)  (2) 2024.03.23
Terraform - Terraform이란?  (0) 2024.03.21

테라폼을 사용해서 간단한 google storage bucket을 만들어보는 예제를 수행한다.

참고!! 해당 과정은 mac에서 진행되었습니다.

Terraform 설치하기

brew install terraform

 

간단하게 brew를 사용해서 설치해주었다. 설치는 완료되었으니 GCP를 사용하기 위해서 간단한 사전 작업을 진행해야한다.


서비스 계정의 비밀키를 사용하기

인증을 위한 비밀키를 사용하기 위해서 다음과 같은 과정을 진행하였다.

서비스 계정 만들기

적절한 액세스 권한을 부여한 서비스 계정을 생성했다. BigQuery와 storage bucket을 사용하기 위해 관리자 권한을 넣어두었다.

 

서비스 계정을 만들었다면 해당 계정을 누르고 '새 키 만들기' 를 눌러줘야한다. > json으로 저장되는데 해당 파일은 유출되면 큰일!

GOOGLE_APPLICATION_CREDENTIALS

구글 인증방법에는 두가지 방식이 있다.

  • gcloud auth login을 사용하기
  • CREDENTIALS를 비밀키를 이용해서 인증하기

첫 방법은 설치할 부분이 많아서 생략하고 두번째 방식으로 진행하였다.

첫번째 방식은 다음 블로그글을 참고하면 좋을 듯하다!

https://jungwoon.github.io/google%20cloud/2018/01/11/Google-Application-Default-Credential.html
 

Google Application Default Credentials 사용하기 | Jungwoon Blog

이번에는 구글 클라우드를 이용하여 Client Library를 이용하는 서비스키를 default로 설정하는 방법에 대해서 공유 드리려고 합니다. 예전에 이거때문에 삽질을 많이했었던 기억이 있어서 도움이 되

jungwoon.github.io

 

우선 아까 받은 키 파일의 경로를 환경변수에 입력해주어야한다. zsh을 사용해서 다음과 같이 진행하였다.

code ~/.zshrc

 

위의 명령으로 zshrc를 열어준다음에

export GOOGLE_APPLICATION_CREDENTIALS='키 위치'

 

코드를 알맞게 넣어주었다. (실은 그냥 기존 export 코드들 바로 아래에 넣었다.)

여튼 해당 과정을 모두 수행하였다면 이제 테라폼 파일을 생성할 차례이다.


main.tf 생성하기

google provider를 사용해서 틀잡기

우선 google provider를 사용해야하므로 docs에서 해당 부분을 찾아준다.

https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/getting_started

 

Terraform Registry

 

registry.terraform.io

화면 오른쪽의 use provider를 누르면 사용 예시가 나오는데 해당 틀을 기반으로 코드를 작성하였다.

 

terraform {
    required_providers {
        google = {
            source  = "hashicorp/google"
            version = "5.21.0"
        }
    }
}

provider "google" {
    project = "Your_project_name" 
    region  = "asia-northeast3" 
}

 

region 때문에 조금 삽질을 해버렸는데 서울은 asia-northeast3를 사용하면 되는것 같다.

 

이렇게 간단하게 코드 틀을 잡았다면 이제 디렉토리 내의 모든 tf파일의 코드 스타일을 맞추기 위해 다음 작업을 수행한다.

terraform fmt

 

코드의 틀도 잡았으니 배포하기에 앞서서 테라폼 초기화를 진행한다. (init)

terraform init

 

(다른 블로그의 글들을 보면 storage코드를 넣고나서 진행하기도 하던데 문제는 없을듯하다!)

 

storage 코드 삽입

이제 storage를 다루기 위한 코드를 추가해야한다. 마찬가지로 docs를 조금 참고해서 깔끔하게 만들어주면 된다.

https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/storage_bucket

 

Terraform Registry

 

registry.terraform.io

 

resource "google_storage_bucket" "data-lake-bucket" {
  name          = "bucket-name"
  location      = "ASIA"
  force_destroy = true

  lifecycle_rule {
    condition {
      age = 1
    }
    action {
      type = "AbortIncompleteMultipartUpload"
    }
  }
}

 

마찬가지로 location을 서울에 맞춰서 지정해준다. (강의에서는 US로 모든걸 퉁치는바람에 삽질을..)

 

배포 진행하기

전체적인 코드의 구성이 완료되었으니 배포를 진행할 시간이다!!

terraform plan

 

plan 명령으로 배포할 resource를 확인하고

terraform apply

 

apply를 사용해서 실제로 배포시킨다.

 

중간에 Enter a value가 나오면 yes로 (진행시켜)

 

결과를 확인하기위해서 GCP의 cloud storage로 들어가면 다음과 같이 잘 생성된 것을 확인 가능하다.

 

삭제하기

terraform destroy

 

destroy 명령을 사용해서 만들어진 cloud storage 버킷을 삭제할 수 있다.


Terraform gitignore

테라폼을 사용하면서 인증키나 비밀스러운 키값들을 관리해야하는 경우가 많다고한다. 그래서 github에 올릴때 ignore을 잘 해줘야하는데

역시나 정리된 git repo가 있어서 가져왔다. 참고해서 사용하면 될듯하다!

https://github.com/github/gitignore/blob/main/Terraform.gitignore


전체 코드는 Github에 업로드 하였습니다.

https://github.com/poriz/data-engineering-zoomcamp-poriz/tree/main/01-docker-terraform/terraform_gcp

'Infra & Container > Terraform' 카테고리의 다른 글

Infra - Terraform > bigquery & variables  (0) 2024.03.23
Terraform - Terraform이란?  (0) 2024.03.21

Terraform이란 무엇인가.

HashiCorp Terraform is an infrastructure as code tool that lets you define both cloud and
on-prem resources in human-readable configuration files that you can version, reuse, and share. You can then use a consistent workflow to provision and manage all of your
infrastructure throughout its lifecycle.
- hashicorp.com -
정리를 한다면...
  • 테라폼은 인프라를 구축하기위한 코드 툴이다. > 코드로 인프라를 관리!
  • on-prem 리소스들을 구성 파일을 통해서 재사용, 공유가 가능하다.
  • 일관된 workflow를 사용해서 infrastructure를 프로비저닝하고 관리 가능하다.
참고) 프로비저닝이란?
프로비저닝은 IT 인프라를 생성하고 설정하는 프로세스로서, 다양한 리소스에 대한 사용자 및 시스템 액세스를 관리하는 데 필요한 단계를 포함합니다. 프로비저닝은 서버, 애플리케이션, 네트워크 구성, 스토리지, 엣지 기기 등을 배포하는 과정에서 초기 단계에 해당합니다.
출처: Red Hat (https://www.redhat.com/ko/topics/automation/what-is-provisioning)

Terraform을 사용하는 이유.

  • 단순하게 infrastructure를 관리하기 위해서
  • 협업의 간편함
  • 재현성
  • 자원을 확실하게 제거하기 위해

Terraform이 할 수 없는 일들!

  • Infrastructure의 코드를 관리하고 업데이트 하는것
  • 고정된 자원을 변화시키는 것
  • 테라폼에 정의되지 않은 리소스를 관리하는것

이번 코스에서는 테라폼의 모든것을 다루지는 않는다고한다! 필요한 부분만 다루게 될 것 같다.

'Infra & Container > Terraform' 카테고리의 다른 글

Infra - Terraform > bigquery & variables  (0) 2024.03.23
Infra - Terraform > basic (GCP)  (2) 2024.03.23

+ Recent posts