프로그래밍 연습하기

백엔드 프로젝트(Terraform) -2- 본문

웹 프로젝트

백엔드 프로젝트(Terraform) -2-

john.k 2022. 1. 16. 23:57
반응형

먼저 Terraform으로 Heroku 앱을 만들어보겠습니다.

 

데이터베이스를 사용하는 간단한 앱이기 때문에

Heroku 앱에 Postgresql 데이터베이스 애드온을 추가하겠습니다.

 

저는 Visual Studio Code를 사용해서 Terraform 코드를 작성했습니다. 

 

코드는 다음과 같습니다.

코드가 간단해서 그냥 main 하나에 다 써도 되겠지만 분리를 해봤습니다.

사실은 앱 네임 등 여러가지를 더 분리할 수 있겠지만 일단은 이정도로만 하고

다음에 기회가 되면 해보도록 하겠습니다.

 

# /terraform/main.tf

module "my_heroku" {
  source = "./heroku"
}


# /terraform/heroku/resource.tf

resource "heroku_app" "my_app" {
  name   = "my-test-app-terraform"
  region = "us"

  buildpacks = [
    "heroku/python"
  ]
  config_vars = {
    FASTAPI_ENV = "production"
  }
}

resource "heroku_addon" "prd_db" {
  app  = heroku_app.my_app.name
  plan = "heroku-postgresql:hobby-dev"
  name = "myapp-prd-db"
}

resource "heroku_addon_attachment" "prd_database" {
  app_id   = heroku_app.my_app.id
  addon_id = heroku_addon.prd_db.id
  name     = "myapp_prd_db"
}

# /terraform/heroku/version.tf

terraform {
  required_providers {
    heroku = {
      source  = "heroku/heroku"
      version = "~> 4.0"
    }
  }
}

config_vars의 FASTAPI_ENV는

FastAPI 앱에서 환경 변수를 통해 실행 환경을 설정하도록 만들것이기 때문에 설정했습니다.

 

그리고 heroku_addon_attachment에서 name이 추후 FastAPI에서 Heroku DB URL을 가져올 환경 변수 이름이 됩니다.

 

Terraform을 다운받아서 로컬에서 생성해볼 수도 있고, GitHub 저장소에 올려서 관리할 수도 있습니다.

GitHub 저장소에서 관리하려면 코드를 GitHub 저장소에 올리고

Terraform Cloud에서 GitHub 저장소와 연동을 하고

 

환경 변수 설정을 해줍니다.

Heroku 앱을 생성하기 위해서 Heroku 계정 이메일과 API Key가 필요합니다.

 

 

그리고 수동으로 Plan 후 Apply를 하거나

Auto Apply를 켜서 GitHub 저장소에 올라온 코드가 변경될 시 자동으로 적용되게 할 수도 있습니다.

Destroy는 Settings 옆의 화살표를 누르면 나옵니다.

 

제가 만든 GitHub 저장소 입니다.

https://github.com/br-kim/terraform-example-heroku

 

GitHub - br-kim/terraform-example-heroku

Contribute to br-kim/terraform-example-heroku development by creating an account on GitHub.

github.com

 

다음으로는 간단한 FastAPI 앱을 만들고 GitHub 저장소에 올려 Terraform으로 만들어 놓은 Heroku에 연동하겠습니다.

 

반응형

'웹 프로젝트' 카테고리의 다른 글

백엔드 프로젝트 (GitHub Action) -4-  (0) 2022.02.02
백엔드 프로젝트 (FastAPI, Heroku) -3-  (0) 2022.02.01
백엔드 프로젝트 -1-  (0) 2022.01.16
Comments