2023-10-16 · 2

Golang Dockerfile と ECR アップロード

cloudgolangecr

この記事は公開から2年以上経過しています。

go mod init example.com/api
go get github.com/gin-gonic/gin
go get github.com/go-sql-driver/mysql

Golang をインストールした後、上記のコマンドを実行してモジュールの初期化と gin のダウンロードを行います。ECR は GitHub にコードを上げるのと同じ感覚でイメージを push できる場所で、ここでは Golang の Docker イメージをアップロードして、最終的には ECS でサービスをデプロイします。

// main.go
package main

import (
     "fmt"
     "database/sql"
     "log"

     "github.com/gin-gonic/gin"
     _ "github.com/go-sql-driver/mysql"
)

func main() {
	dsn := "[id]:[password]@tcp([db_endpoint]:[db_port])/"
  db, err := sql.Open("mysql", dsn)
  if err != nil {
      fmt.Println(err)
      return
  }

  if db != nil {
    fmt.Println("db connect to rds...")
  }
  defer db.Close()

  var databases []string

  // Query to get all databases
  rows, err := db.Query("SHOW DATABASES")
  if err != nil {
    log.Fatal(err)
  }
  defer rows.Close()

  for rows.Next() {
    var dbName string
    if err := rows.Scan(&dbName); err != nil {
      log.Fatal(err)
    }
    databases = append(databases, dbName)
  }

  fmt.Println("Databases:", databases)

  if err := rows.Err(); err != nil {
    log.Fatal(err)
  }

  r := gin.Default()

  r.GET("/", func(c *gin.Context) {
    c.JSON(200, gin.H{
      "message": "gin is running",
      "databases" databases
    })
  })

  r.Run(":3000")
}

上記はサンプルコードです。DB がある場合は少し修正して実行すると、DB 内のデータベース一覧が取得できることを確認できます。

FROM golang:1.18-alpine as build

WORKDIR /app

ENV GO111MODULE=on
ENV CGO_ENABLED=0
ENV GOOS=linux
ENV GOARCH=amd64

COPY . .

RUN go build -o main main.go

FROM alpine:3.12
RUN apk --update add ca-certificates

WORKDIR /app

COPY --from=build /app/main .

EXPOSE 3000

CMD ["/app/main"]

上記のように Dockerfile を書いたら、~/.aws/credentials に次のように保存します。

[default]
aws_access_key_id = [access_key_id]
aws_secret_access_key = [access_key]

awscli がインストールされている場合は aws configure コマンドでも構いません。

docker build -t restgo .
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin [ECR_URL]
docker tag restgo [ECR_URL]
docker push [ECR_URL]

上記のコマンドを実行して、Golang の Docker イメージを ECR にアップロードできました。


原文(韓国語): tistory — 2023-10-16 公開、当ブログへ移行。この翻訳は AI の協力で作成されました。

コメント

コメントを削除しますか?

関連記事

Golang Dockerfile と ECR アップロード · 나봄하랑