🦄

Azure App ServiceへDockerコンテナをデプロイし、Webアプリを動かしてみる。-Go言語-

2021/12/15に公開

はじめに

こんにちは都内の某スタートアップでエンジニアを務めているものです。
今年10月にAzureとGoを使ってマイクロサービスの開発を行なっている現在の職場へ転職したので今回は業務の振り返りと備忘録も込めてAzure App ServiceへコンテナをデプロイしGolang製のアプリを動かしてみたいと思います。

対象読者

  • Azure初心者
  • ローカルのDockerコンテナで作ったWebアプリをAzure上で動かしてみたい方。

注意

  • 本記事ではAzureへのデプロイ手順を目的としたものなのでWebアプリの細かい実装手順は省きます。
  • 間違っている部分がありましたらコメントいただけると幸いです。
  • 本記事の手順にはAzureのアカウント作成が必要です。

準備

Azureのアカウントを作成。

※ Azure公式
https://azure.microsoft.com/ja-jp/free/

Azure App Serviceってなに?

Azure App Service を使用すると、インフラストラクチャを管理することなく、任意のプログラミング言語で Web アプリケーション、モバイル バックエンド、および RESTful API を構築し、ホストできます。

公式ドキュメント
https://docs.microsoft.com/ja-jp/azure/app-service/

Go言語ってなに?

Google製のプログラミング言語です。軽くて実行速度が速いです。
公式ドキュメント
https://go.dev/doc/

1. コンテナ上で動かすアプリを用意

デプロイ用のDockerfileを作成する。
Dockerfile

FROM golang:1.17

RUN mkdir /app
WORKDIR /app

COPY . ./
RUN go mod download
RUN go build .

EXPOSE 8080

CMD [ "./hello_azure" ]

デプロイするアプリを作成。
以下を実行してGinのパッケージ取得を行います

go get github.com/gin-gonic/gin

hello_azure.go

package main

import (
    "fmt"
    "log"

    "github.com/gin-gonic/gin"
)

func main() {
    router := gin.Default()

    router.GET("/", func(ctx *gin.Context) {
        ctx.String(200, "Hello Azure!")
    })

    if err := router.Run(":8080"); err != nil {
        log.Fatal("Server Run Failed.: ", err)
    }
}

2. ローカルで動作確認

http://localhost:8080にアクセスすると以下の結果が出力されます

Hello Azure!

3. Azure PortalからAzureコンテナーレジストリ(ACR)の作成を行う。

Azure Portalへログインし、コンテナイメージのデプロイ場所を作成しましょう!
下記画面で

  • サブスクリプションの選択
  • リソースグループの選択
  • レジストリ名の入力
  • 場所(リージョン)の選択
    を行い、コンテナレジストリを作成します。

4. ACRへローカルで作成したコンテナイメージをデプロイする。

まずはローカルでイメージをbuild

docker build -t <レジストリ名>.azurecr.io/hello_azure:v1.0.0 .

ローカルのターミナルからACRへイメージをデプロイ
※Azure CLIをローカルへインストールする必要があります。

Azure CLI をインストールする方法(MS公式)
https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli

# Azureへログイン
$ az login

# デプロイ先のACRへログインする
$ az acr login --name <自分の作成したACRの名前>

# ACRへビルドしたコンテナイメージをPushする
$ docker push akuruwasaki.azurecr.io/hello_azure:v1.0.0

4. Azure App Serviceを使用してコンテナからWeb Appを作成する

Azure PortalのAzure App ServiceからWeb Appの新規作成をする

  • インスタンスの詳細

    • 名前は任意のものを選択
    • Dockerコンテナーを選択
    • オペレーティングシステムは Linux
  • App Serviceプラン

    • 今回はお試しなので一番安いものを選択しましょう!
  • 使用するコンテナイメージを選択する

    • イメージソースはACRから
    • レジストリは手順3で作成したものを選択
    • イメージとタグは手順4でデプロイしたものを選択

これでAzure上にコンテナアプリをデプロイできました! お次は環境変数の設定をします!

5. Azure App Serviceに環境変数を設定していく

Azure上にコンテナアプリをデプロイができたのですが、このままデプロイ先のホストへアクセスしても無効です!
App Serviceの構成からアプリ内で使用する環境変数を設定し、アプリのポート番号の設定を行います。

App Serviceの構成からアプリ内で使用する環境変数を設定していく

WEBSITES_PORT=8080 を今回デプロイしたアプリに設定します。
(※ ポートの設定をする場合はWEBSITES_PORTという変数名にするとAzure App Serviceが自動でポート番号と判別してくれます)
アプリケーション設定で環境変数を設定したら保存してください!

それではデプロイしたAzure App ServiceのURLへアクセスし、

Hello Azure!

と表示されたら完成です!

お疲れ様でした!

参考記事

https://docs.microsoft.com/ja-jp/azure/container-registry/container-registry-get-started-docker-cli?tabs=azure-cli

https://docs.microsoft.com/ja-jp/azure/devops/pipelines/targets/webapp-on-container-linux?view=azure-devops&tabs=yaml

Discussion