728x90
go mod init example.com/api
go get github.com/gin-gonic/gin
go get github.com/go-sql-driver/mysql
golang을 설치한 이후 위 명령어를 실행하여 golang init과 gin을 다운받아줍니다. ECR는 github처럼 코드를 올리는 있는 곳인데 여기서는 golang Dockerfile를 올려 최종적으론 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의 databases들을 불러오는 것을 확인할 수 있습니다.
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]
위와 같이 명령어를 실행하여 ECR에 golang Dockerfile를 업로드 할 수 있었습니다.
728x90
'기능반공부 > 클라우드 컴퓨팅' 카테고리의 다른 글
[CC] Terraform 기초 사용법 (0) | 2023.03.08 |
---|---|
[CC] AWS SSM(Systems Manager) - Patch Manager (0) | 2023.03.06 |
[CC] AWS SSM(Systems Manager) - Run Command (0) | 2023.03.06 |
[CC] AWS SSM(Systems Manager) - session manager (0) | 2023.02.28 |
[CC] AWS Cloud Service logs(AWS CloudWatch & AWS CloudTrail) (0) | 2023.02.22 |