목록DevOps/Terraform (20)
우노
들어가기 앞서, Terraform으로 특정 자원을 생성할 경우, 해당 자원이 이미 생성되어 있는 상태라면, already exist 에러가 발생하게 됩니다. 따라서, 해당 포스팅에선 terraform import를 사용해, 이미 생성되어 있는 자원을 유지하면서 Terraform State 파일을 업데이트할 수 있는 방법을 다뤄보겠습니다. 생성하고자 하는 리소스 블록 선언 resource "google_cloud_scheduler_job" "test" { } 리소스 블록을 선언하지 않을 경우, 아래와 같은 에러가 발생하게 됩니다. Before importing this resource, please create its configuration in the root module. Terraform State..
들어가기 앞서, Google Kubernetes Engine(이하 GKE)에서 동작하는 애플리케이션들이 다양한 Google Cloud 서비스에 접근하기 위해선, GKE가 Google Cloud 서비스 접근 권한을 가지고 있어야합니다. 따라서 일반적으로는, Google Cloud 서비스 접근에 필요한 Role이 할당되어 있는 Google Service Account를 생성한 뒤, 쿠버네티스 RBAC(Role-based Access Control)를 위한 Kubernetes Service Account에 Google Service Account를 매핑해서 사용되고 있습니다. 따라서 해당 포스트에선, Terraform을 사용해 Google Service Account를 생성하고, Google Service A..
들어가기 앞서, kubernetes_secret을 사용해, 임의의 파일을 외부에 공개되지 않도록 pod에 저장한 뒤, container에서 pod의 volume을 mount하는 방법에 대해서 다뤄보겠습니다. 예제 코드 kubernetes_secret을 사용해, pod에 저장할 파일 정의 resource "kubernetes_secret" "access_secret" { metadata { name = "mlflow-access-secret" namespace = kubernetes_namespace.mlflow_nginx.metadata[0].name } data = { # "파일명" = "파일내용" ".htpasswd" = "id:pwd" } } kubernetes_deployment를 사용해, con..
들어가기 앞서, 해당 포스트에선, HTTP(S) Google Cloud Load Balancer(GCLB)를 Terraform을 사용해 생성하는 방법에 대해서 다뤄보겠습니다. GCLB 주요 구성 요소 프론트 엔드 : 클라이언트 요청을 받을 IP 주소, 포트, 프로토콜을 지정 Global Address 클라이언트 요청을 받을 IP 주소 지정 Global Forwarding Rule 클라이언트 요청을 Target Proxy에 전달 Target Proxy 클라이언트 요청을 Url Map으로 전달 호스트 및 경로 규칙 - 부하 분산기 Url Map 클라이언트 요청 Url에 따라 특정 Backend Service로 트래픽 전달 백엔드 Backend Service Backend Service로 등록된 Backend..
들어가기 앞서, Terraform은 아래와 같이 kubernetes provider를 선언할 수 있습니다. provider "kubernetes" { config_path = "~/.kube/config" config_context = "my-context" } 이때, 클러스터 액세스 정보를 담은 kubeconfig 파일이 필요합니다. 만약, kubeconfig 파일에 클러스터 액세스 정보가 없을 경우, 아래와 같은 에러가 발생하게 됩니다. Error: Provider configuration: cannot load Kubernetes client config 따라서, 해당 포스트에선 kubeconfig 파일 작성을 위한 사전 작업에 대해서 다뤄보겠습니다. kubeconfig 파일에 클러스터 연결 정보 ..
들어가기 앞서, 해당 포스트는, Terraform state로 관리되고 있는 자원 정보 확인 관련 명령어들을 정리합니다. 모듈을 포함한 모든 자원들의 세부 정보 출력 terraform show 모듈을 포함한 모든 자원들을 리스트형식으로 출력 terraform state list
들어가기 앞서, 해당 포스트에선, Terraform 자원을 제거하는 방법에 대해서 다뤄보겠습니다. 1. 실제 리소스와 Terraform 리소스 코드를 모두 제거하고 싶을 경우 Terraform 리소스 코드를 제거한 뒤, terraform apply 명령어로 변경 사항을 적용합니다. 2. 실제 리소스는 남기고, Terraform 리소스 코드만 제거하고 싶을 경우 Terraform 리소스 코드를 제거하고, terraform plan 명령어로 Terraform 리소스 코드와 실제 리소스의 차이를 로그로 확인한 뒤, terraform state rm [리소스] 를 통해 state 파일로 관리되고 있던 리소스 정보를 삭제합니다. terraform state rm 'module.foo.packet_devic..
들어가기 앞서, 예를 들어, Provider로 GCP를 사용할 경우, 프로젝트 종류 또는 리전 영역 등에 따라, 동일한 종류의 Provider를 다중으로 선언해야하는 경우가 있습니다. 따라서, 해당 포스트에선 다중 Provider 적용 방법에 대해서 다뤄보겠습니다. 다중 Provider 적용 방법 추가로 사용하는 provider에 alias를 지정하면 됩니다. provider "google" { project = ... region = ... zone = ... credentials = ... } provider "google" { alias = "second" project = ... region = ... zone = ... credentials = ... } 참고 https://blog.outsid..
Terraform이란? 테라폼(Terraform)은 코드로 인프라를 관리하는 IaC(Infrastructure as Code)도구입니다. IaC는 작성용이성, 재사용성, 유지보수 등의 장점을 가집니다. 하시코프(HashiCorp)가 제공하는 프로젝트 중 하나이며, AWS, Azure, GCP 같은 다양한 서비스들을 지원합니다. 하시코프는 인프라스트럭처와 관련된 다양한 오픈소스 프로젝트를 운영하는 회사입니다. 대표적으로, 개발 환경을 관리하는 Vagrant, 서비스 디스커버리 도구 Consul, 비밀 정보 관리 도구 Vault와 같은 프로젝트들이 있습니다. 테라폼은 HCL이라는 언어로 .tf 파일에 인프라스트럭쳐를 선언적으로 작성합니다. 주요 구성 요소 provider resource state local..
Terraform 및 Terraform Cloud 설정 Terraform 설치 Install | Terraform | HashiCorp Developer brew tap hashicorp/tap brew install hashicorp/tap/terraform Terraform Cloud 계정 생성 Terraform Cloud Workspace 생성 CLI-driven workflow로 생성 이를 통해, 로컬 환경에서 CLI로 작업을 진행해도, Terraform의 실질적인 실행 및 백앤드는 Terraform Cloud가 됩니다. Terraform Cloud Workspace Overview 진행 Terraform Cloud 토큰 생성 및 등록 터미널 → terraform login 명령어 입력 → yes..