🌎

GoをAzure App ServiceにContainer Deploy

2023/02/23に公開

はじめに

こんにちは、立命館大学と同志社大学を中心に活動している学生IT団体watnow代表のまーしーです。Azure App ServiceにGo製のアプリをContainer化してDeployする方法について解説します。

準備

Azureのアカウントを作成してください。
Azure App Serviceには(F1)というインスタンスがあり、制限の範囲内で無料で使うことができます。また、学生の方は大学のメールアドレスで登録することで300$のクレジットをもらうことができます。
https://azure.microsoft.com/ja-jp/free/

Githubのアカウントを作成してください
https://github.com/

Docker Hubのアカウントを作成してください
https://hub.docker.com/

Azure App Serviceとは

Azure App ServiceはAzureが提供するPaas(Platform as a Service)です。サーバの知識がなくても任意のプログラミング言語でWebアプリケーション、backendAPIをホスティングできます。

1.Go製のアプリを用意

用意するアプリは、gin,chi,echo,httpなどなんでも大丈夫です。

例(echo)

teminalで以下のコマンドを実行してecho製のアプリを作成します。

$ mkdir myapp && cd myapp
$ go mod init myapp
$ go get github.com/labstack/echo/v4

main.goを作成します

package main

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

func main() {
	e := echo.New()
	e.GET("/", func(c echo.Context) error {
		return c.String(http.StatusOK, "Hello, World!")
	})
	port := os.Getenv("PORT")
	if port == "" {
		port = "8080"
	}
	e.Logger.Fatal(e.Start(":" + port))
}

Dockerfileを用意

dockerfileを作成します。

# build環境
FROM golang:1.20.2-alpine as builder

WORKDIR /app

COPY go.mod go.sum ./
RUN go mod download

COPY . .
RUN go build -o main .

# 実行環境
FROM alpine
RUN apk update && apk upgrade
RUN mkdir /app
WORKDIR /app

COPY --from=builder /app/main ./main

CMD ["./main"]

2.ローカルで動作確認

以下を実行してサーバを起動

go run main.go

http://localhost:8080 にアクセスするし

このように出力されればOKです

Hello, World!

3.Github Actionsの設定を行う

yaml設定

./.github/workflows/push-dockerhub.yamlを作成します。
Github Actionsからdockerのbuildを行いDocker HubにpushするAcitonsになります。

name: Build Docker image and push to Docker Hub

on:
  push:
    branches: 
	   - main

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: Check out the repo
        uses: actions/checkout@v3

      - name: Log in to Docker Hub
        uses: docker/login-action@v2.0.0
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Build and push
        uses: docker/build-push-action@v3
        with:
          context: .
          push: true
          tags: ${{ secrets.DOCKER_USERNAME }}/exampleapp:latest

secretsを設定

GitHubの今回使用するレポジトリで Settings/Secrets and variavles/Actions に行きNew repository secretsに以下の値を設定します

  • 設定項目
    • 1
      • Name
        • DOCKER_USERNAME
      • Secret
        • DockerHubのusername
    • 2
      • Name
        • DOCKER_PASSWORD
      • Secret
        • DockerHubのpassword

4.Githubに保存

Githubに今回のプロジェクトで使うレポジトリを作成して、Githubにコードをpushしてください。
このときActionsでJobが成功していることを確認してください。

5.DockerHubを確認

DockerHubにアクセスしActionでpushしたdocker imageがあることを確認してください。

6.Azure App Serviceを設定

設定をおこないApp Serviceを作成します。

設定項目

  • 基本

    • サブスクリプション : 任意
      • リソースグループ : 任意
    • 名前 : 任意
    • 公開 : Dockerコンテナー
    • オペレーティングシステム : Linux
    • 地域 : 任意
    • 価格プラン : Free F1
  • Docker

    • オプション : 単一コンテナー
    • イメージソース : Docker Hub
    • アクセスの種類 : パブリック
    • イメージとタグ : {Docker_UserName}/exampleapp:latest

7.確認

デプロイが完了したら、App Serviceが発行するURLにアクセスして結果を確認します。

このように出力されれば成功です

Hello, World!

Discussion