尝试使用AWS App Runner快速部署Golang服务器

AWS App Runner是什么?

这是一个可以轻松部署容器化的Web应用程序的服务。(据说它在后台使用了Fargate)
由于发布于2021年5月,所以它似乎是一个相对较新的服务。

在运行容器的方式中,有Amazon ECS,但是在想要快速搭建服务器的时候,这可能会很方便。

料金结构(@东京地区)

这个组成要素包括以下三个部分。

    1. 内存配置….0.009美元/GB

 

    1. 活动容器实例的CPU和内存….0.081美元/vCPU + 0.009美元/GB

 

    构建费用….0.005美元/构建时间(分钟)

如果运行一个没有构建的1个vCPU、2GB内存的实例,持续一个月的活动,将产生大约70美元的费用。

2022年2月的更新中,VPC的流量得到支持。

根据发布说明,据说App Runner现在可以访问VPC资源了。
https://docs.aws.amazon.com/apprunner/latest/relnotes/release-2022-02-08-vpc.html

所以说,迄今为止,如果要访问AWS资源中的RDS等资源,则需要公共访问。这一点让我对使用App Runner有些犹豫,但通过这次更新,我决定试一试。(然而,本文中的服务器需要公共访问。。。)

验证环境

我打算使用Golang的echo框架来部署应用程序。
Golang的版本如下↓↓

go version go1.17.8 darwin/amd64

这是GitHub代码库的网址。

亲身实践

(1) 创建 ECR 仓库
本次我们将尝试使用推送至 ECR 的镜像来运行 App Runner。
本文中,我们已经创建了一个名为 apprunner-golang 的仓库。

スクリーンショット 2022-03-06 9.05.27.png

因为以后可能会需要,所以我会复制推送命令保存起来。

(2)准备Golang应用程序的实施

mkdir apprunner-golang && cd apprunner-golang
go mod init apprunner-golang
go get github.com/labstack/echo/v4
go get github.com/labstack/echo/v4/middleware

(3) 实施

vim server.go
package main

import (
	"github.com/labstack/echo/v4"
	"github.com/labstack/echo/v4/middleware"
	"net/http"
)

func main() {
	e := echo.New()
	e.Use(middleware.Logger())
	e.Use(middleware.Recover())

	e.GET("/", helloAppRunner)

	e.Logger.Fatal(e.Start(":8080"))
}

func helloAppRunner(c echo.Context) error {
	return c.String(http.StatusOK, "Hello, This is AWS App Runner!!")
}

(4) 创建DockerFile

FROM golang:1.17-alpine

WORKDIR /app
COPY go.mod ./
COPY *.go ./

RUN go mod tidy \
    && go get \
    && go build -o /apprunner-golang

EXPOSE 8080

CMD ["/apprunner-golang"]

(5) 将图像推送到 ECR
使用在 ECR 控制台中获取的推送命令。

aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin {your_account_id}.dkr.ecr.ap-northeast-1.amazonaws.com
docker build -t apprunner-golang .
docker tag apprunner-golang:latest {your_account_id}.dkr.ecr.ap-northeast-1.amazonaws.com/apprunner-golang:latest
docker push {your_account_id}.dkr.ecr.ap-northeast-1.amazonaws.com/apprunner-golang:latest

//M1 Macでビルドす場合は以下の通りにしないとだめっぽい
docker build --platform amd64 -t apprunner-golang .

在App Runner控制台上进行操作,选择”容器注册表”和”Amazon ECR”,然后指定先前创建的ECR镜像的URI。按照以下设定,点击”下一步”。

スクリーンショット 2022-03-06 9.19.40.png

在下一个界面上,您需要指定服务名称。同时,请确认端口是否设置为8080,网络是否已设置为公共访问。

スクリーンショット 2022-03-06 9.22.44.png

点击“下一步”。接着在确认页面上点击“创建和部署”。

スクリーンショット 2022-03-06 10.13.30.png

点击默认域,您可能会看到来自Golang的响应。

スクリーンショット 2022-03-06 10.14.17.png

此刻的情绪

    • コンテナ用意するだけで簡単にサービスが立ち上がるのでかなり便利。今後は、わざわざEC2上でdocker動かす必要はないかな、という気がする。

 

    • ECSよりも大分手軽にサーバーを構築できる。学習コストもかなり低い。

 

    • カスタムドメインもApp Runnerのコンソールから設定できるので、手軽に独自ドメインのWebサイト作れる。

 

    • GitHubとも連携できるので、イメージをビルドする手間も省くことができそう。

 

    Auto Scalingも手軽に設定できそうな感じ。

源代码

您可以在以下链接中获取源代码:
https://github.com/Kohei-Sato-1221/apprunner-golang

广告
将在 10 秒后关闭
bannerAds