LoginSignup
5
1

More than 1 year has passed since last update.

GoのWebアプリをAzure App Serviceにデプロイする

Last updated at Posted at 2022-11-10

はじめに

2022年11月、実験版ながら再びLinuxでのAzure App ServiceでGoがサポートされました。

初代(?)は2017年12月にサポート対象外となりました。

今回は、Goのコードがデプロイされて、組み込みイメージを使ってLinuxコンテナーでコンパイル&実行されます。

デプロイ手順が「app-service-linux-docs/use_go_with_appservice.md at master · Azure/app-service-linux-docs · GitHub」で公開されています。こちらに従ってGoのWebアプリをAzure App Serviceにデプロイしてみましょう!

本記事は、macOS Monterey 12.6.1 + Go 1.19.3 にて試しています。

事前準備

  • Azure アカウント
  • Azure CLI
  • Go 1.18 および 1.19

サンプル アプリケーション

ディレクトリーを作成して、その中にカレントを移動させます。
ここではディレクトリー名を hello にしています。

% mkdir hello
% cd hello 

go mod init コマンドにて、Goのコードを書くための準備をします。
パッケージの依存関係を管理する go.mod ファイルが作成されます。
最初の go.mod には、使用するGoのバージョンのみが追記されています。

% go mod init hello
go: creating new go.mod: module hello
% ls
go.mod
% cat go.mod 
module hello

go 1.19

ファイル名を main.go として、Goのコードを書きます。
ここでは vim を使ってコーディングしています。

% vim main.go
package main

import (
	"fmt"
	"net/http"
)

func main() {
	http.HandleFunc("/", HelloServer)
	http.ListenAndServe(":8080", nil)
}

func HelloServer(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello, %s!", r.URL.Path[1:])
}

コードを書き終えたら、main.go ファイルを保存します。

go fmt コマンドにて、コードのフォーマットを整えます。

% go fmt main.go 
main.go

go run コマンドにて、コードを実行します。

% go run main.go

Webブラウザーにて、URL http://localhost:8080/world/ にアクセスすると、「Hello, world!」が表示されます。

URLの最後の単語 world を別の単語に書き換えると、書き換えた内容が表示されます。(例:gopher に書き換えると「Hello, gopher!」になります。)

動作確認ができたら [Ctrl] + [C] キーで停止します。

AzureでWebアプリを作成

az login コマンドを実行すると、Webブラウザーが起動しますので、Azureアカウントでログインします。

% az login
A web browser has been opened at https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login --use-device-code`.
[
  {
    "cloudName": "AzureCloud",
    ...
    "user": {
      ...
      "type": "user"
    }
  }
]

az webapp up コマンドにて、ソースコード main.go をApp Serviceにデプロイします。

az webapp up --runtime GO:1.18 --sku B1 --os Linux --logs
  • --runtime:コードを実行させるGoのバージョンを指定します。
    設定できる値は az webapp list-runtimes コマンドにて、確認できます。
% az webapp list-runtimes --os linux --output table
Result
------------------
...
GO:1.19
GO:1.18
  • --sku:App Service のサービスプランを指定します。
    設定できる値は「価格 – Linux 用 App Service | Microsoft Azure」で確認できます。

  • --logs:Webアプリ起動後、デプロイを指示したターミナル上にログを出力します。
    ログ出力は[Ctrl] + [C] キーで停止します。

The webapp '<app-name>' doesn't exist
Creating Resource group '<group-name>' ...
Resource group creation complete
Creating AppServicePlan '<app-service-plan-name>' ...
Creating webapp '<app-name>' ...
Configuring default logging for the app, if not already enabled
Creating zip with contents of dir /home/tulika/myGoApp ...
Getting scm site credentials for zip deployment
Starting zip deployment. This operation can take a while to complete ...
Deployment endpoint responded with status code 202
You can launch the app at http://<app-name>.azurewebsites.net
...

アプリをブラウズする

Webブラウザーにて、デプロイ先のApp ServiceのURL http://<app-name>.azurewebsites.net/world/ にアクセスすると「Hello, world!」が表示されます。

おめでとうGoざいます、GoのWebアプリがApp Serviceにデプロイされて動作していることを確認できました!

リソースの後片付け

az group delete コマンドにて、リソースグループ名を指定して削除します。

% az group delete --resource-group <resource-group-name>

さいごに

コンテナー経由ながらネイティブ サポートの感覚で、再びGoでApp Serviceを使えるようになったのは、しかも最新バージョンのGoが使えるのは、嬉しい限りです!

外部パッケージの使用、.goファイルの構成、main.go 以外のファイル名など、これから色々と試して行きたいところです。成果が得られましたら、また記事を投稿します。

今度こそ(?)一般提供版になれるよう、皆さんもいっぱい使ってやってつかぁさい!q@w@p

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1