尝试使用AWS App Runner快速部署Golang服务器
AWS App Runner是什么?
这是一个可以轻松部署容器化的Web应用程序的服务。(据说它在后台使用了Fargate)
由于发布于2021年5月,所以它似乎是一个相对较新的服务。
在运行容器的方式中,有Amazon ECS,但是在想要快速搭建服务器的时候,这可能会很方便。
料金结构(@东京地区)
这个组成要素包括以下三个部分。
-
- 内存配置….0.009美元/GB
-
- 活动容器实例的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](https://cdn.silicloud.com/blog-img/blog/img/657d56de37434c4406cdb0c7/16-0.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](https://cdn.silicloud.com/blog-img/blog/img/657d56de37434c4406cdb0c7/28-0.png)
在下一个界面上,您需要指定服务名称。同时,请确认端口是否设置为8080,网络是否已设置为公共访问。
![スクリーンショット 2022-03-06 9.22.44.png](https://cdn.silicloud.com/blog-img/blog/img/657d56de37434c4406cdb0c7/30-0.png)
点击“下一步”。接着在确认页面上点击“创建和部署”。
![スクリーンショット 2022-03-06 10.13.30.png](https://cdn.silicloud.com/blog-img/blog/img/657d56de37434c4406cdb0c7/32-0.png)
点击默认域,您可能会看到来自Golang的响应。
![スクリーンショット 2022-03-06 10.14.17.png](https://cdn.silicloud.com/blog-img/blog/img/657d56de37434c4406cdb0c7/34-0.png)
此刻的情绪
-
- コンテナ用意するだけで簡単にサービスが立ち上がるのでかなり便利。今後は、わざわざEC2上でdocker動かす必要はないかな、という気がする。
-
- ECSよりも大分手軽にサーバーを構築できる。学習コストもかなり低い。
-
- カスタムドメインもApp Runnerのコンソールから設定できるので、手軽に独自ドメインのWebサイト作れる。
-
- GitHubとも連携できるので、イメージをビルドする手間も省くことができそう。
- Auto Scalingも手軽に設定できそうな感じ。
源代码
您可以在以下链接中获取源代码:
https://github.com/Kohei-Sato-1221/apprunner-golang