2023-03-08 · 6분
Terraform 基础用法
Terraform 基础 — 按资源整理一整套 AWS Web 服务编排:VPC、子网、IGW/NAT、安全组、IAM、S3、RDS、ALB、ECR、ECS 与 CloudWatch。
cloudterraform
2023-10-16 · 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 存放代码的方式,是一个推送镜像的地方——这里我们上传 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")
}
以上是示例代码。如果已有数据库,稍作修改后运行,即可看到它列出数据库中的 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]
执行以上命令,即可将 Golang 的 Docker 镜像上传到 ECR。
原文(韩语): tistory — 发布于 2023-10-16,已迁移至本博客。本翻译由 AI 协助完成。
…