如何使用terraform将docker容器部署到heroku?

时间:2020-06-10 13:54:31

标签: docker heroku containers terraform

我正在尝试通过terraform将容器化的nextJS应用程序部署到Heroku。

我可以使用以下容器成功部署而无需:

provider "heroku" {
 email = var.HEROKU_EMAIL
}

resource "heroku_app" "app" {
    name = var.app_name
    region = "eu"
}

resource "heroku_build" "nextjs" {
    app = heroku_app.app.id
    buildpacks = ["https://github.com/heroku/heroku-buildpack-nodejs"]

    source = {
        path = "./app"
    }
}

resource "heroku_formation" "app" {
    app = heroku_app.app.id
    type= "web"
    quantity = 1
    size = "Free"
    depends_on = [heroku_app.app]
}

看着terraform documentation,似乎可以使用以下命令将Heroku堆栈设置为container

resource "heroku_app" "app" {
    name = var.app_name
    region = "eu"
    stack = "container"
}

并且我创建了一个简单的heroku.yml

build:
    docker:
        web: Dockerfile
run: 
    web: npm build && npm start

目前还不清楚heroku_build中的“源”应该是什么,目前我正在获取:

Error: error retrieving formation: Get https://api.heroku.com/apps/<app-name>/formation/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx: Couldn't find that app.

This github issue公开了一个相关问题,但对我的理解没有太大帮助

1 个答案:

答案 0 :(得分:1)

您需要一个Dockerfile,以告诉Heroku如何构建Docker映像:

FROM node:12
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
CMD [ "node", "server.js" ]

然后,对于heroku_build:

resource "heroku_build" "this" {
  app = heroku_app.this.name

  source = {
    path =  "."
  }
}

这样,您可以将当前文件夹(。)“推”到Heroku,它将找到heroku.yml并创建Docker映像。