
はじめに
こんにちは、コンテナソリューショングループの髙井です。
Azureの更新フィードを見ていたらApp ServiceでGolangのネイティブ対応がPublic previewになっていました。
せっかくなのでちょっと試してみます。
Golangをインストールする
asdfのインストール
brewが入っている前提です。バージョンマネージャを使いたいので今回はasdf経由でGolangをインストールします。
brew install asdf
シェルの種類に応じてasdfをパスに追加する必要があるのでインストール完了後にbrewに表示される説明文に従います。
# zshの場合
echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ${ZDOTDIR:-~}/.zshrc
インストール手段・シェル別のパス追加方法は公式サイトに載っています。
シェルを再起動したら、Golangプラグインをインストールします。
asdf plugin-add golang https://github.com/kennyp/asdf-golang.git
最新版のGolangをインストール
あとは最新版をインストールすればよいです。
asdf install golang latest asdf global golang latest
$ go version go version go1.19.3 linux/amd64
今日の時点では1.19.3が最新版のようです。App Serviceは1.18系と1.19系がインストールされています。
Ginアプリケーションをダウンロードしてくる
公式ドキュメントを見ると、どうもネイティブではgo run main.goが起動スクリプトになっていそうな雰囲気です。
たとえばRevelで作ったアプリケーションはrevel runで起動するためスタートアップコマンドを別途設定する必要がありそうですが、今回はそのあたりのワークアラウンドは後回しにしてGinを使いましょう。
まずはディレクトリを切ってGinをインストールします。
mkdir test-app-gin && cd $_ go mod init test-app-gin go get -u github.com/gin-gonic/gin
公式のクイックスタートからサンプルのmain.goをダウンロードして使用します。
curl https://raw.githubusercontent.com/gin-gonic/examples/master/basic/main.go > main.go
この状態でgo run main.goすればアプリケーションが起動します(localhost:8080/pingにアクセスするとpongが返ってきます)。
App Serviceを立ててZIPデプロイする
とりあえず、今回はお試しなのでFreeプランをAzure Portalからデプロイして先ほどのGinアプリケーションをホストしてみましょう。

デプロイが終わったらVisual Studio CodeのAzure拡張機能からデプロイするのがラクです。

問題なくサイトにアクセスできるはずです。

ちなみにこのサンプルアプリケーションは簡易的なユーザー登録機能があるので、以下のようにするとユーザーfooを登録できます。
curl -X POST \
http://localhost:8080/admin \
-H 'authorization: Basic Zm9vOmJhcg==' \
-H 'content-type: application/json' \
-d '{"value":"bar"}'
登録状況の確認は/user/:nameにアクセスします。
$ curl localhost:8080/user/foo
{"user":"foo","value":"bar"}
おわりに
App Serviceでカスタムコンテナを経由せずにGolangが使えるようになりました。次はRustあたりが来るといいですね。