1
0

More than 3 years have passed since last update.

付け焼き刃でFargateにgoでマイグレーション&シード

Posted at

目的

go-ginで開発しているときにFargateに無理やりマイグレーション&シードを行いたかった感じです。

ただlayerが多すぎて肥大化しているので、あまりおすすめしません。
本当はfargateで新しいタスク立てたり、code pipeline使うべきなんでしょうけど、急いでいるのでこれで。

ファイル

以下fargateにデプロイするようのDockerfileです。
migrationとseedディレクトリにmain.goが入っているのでそれをbuildしてalpineのほうのイメージに移動させます。

FROM golang:latest as builder

ENV CGO_ENABLED=0
ENV GOOS=linux
ENV GOARCH=amd64
COPY . /go/src/backend

WORKDIR /go/src/backend

RUN go get github.com/line/line-bot-sdk-go/linebot && \
  go get github.com/joho/godotenv && \
  go get -u gorm.io/gorm && \
  go get gorm.io/driver/mysql && \
  go get github.com/golang-migrate/migrate && \
  go get github.com/golang-migrate/migrate/database/mysql && \
  go get github.com/golang-migrate/migrate/source/file && \
  go get github.com/pkg/errors && \
  GOOS=linux GOARCH=amd64 go build -o /main

WORKDIR /go/src/backend/migration
RUN go get github.com/go-sql-driver/mysql@v1.6.0 && \
  GOOS=linux GOARCH=amd64 go build -o /go/src/backend/migration/main

WORKDIR /go/src/backend/seed
RUN GOOS=linux GOARCH=amd64 go build -o /go/src/backend/seed/main

# runtime image
FROM alpine
RUN apk update \
  && apk add --no-cache git curl make gcc g++
COPY --from=builder /main .
COPY --from=builder /go/src/backend/migration ./migration
COPY --from=builder /go/src/backend/seed ./seed
COPY ./entrypoint.sh .
RUN ["chmod", "u+x", "./entrypoint.sh"]

ENV PORT=${PORT}
ENTRYPOINT ["./entrypoint.sh"]

entrypoint.shは以下です。
ステージングなので、まずデータベースのマイグレーションをすべてドロップします。そのあとマイグレーションをおこなって、シーディングして最後にサーバーのコードを走らせる感じです。

entrypoint.sh
#!/bin/sh
/migration/main drop
/migration/main up
/seed/main seed
/main
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0