APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

App ServiceでGolangのネイティブ対応がプレビューになりました

はじめに

こんにちは、コンテナソリューショングループの髙井です。

Azureの更新フィードを見ていたらApp ServiceでGolangのネイティブ対応がPublic previewになっていました。

azure.microsoft.com

せっかくなのでちょっと試してみます。

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が起動スクリプトになっていそうな雰囲気です。

learn.microsoft.com

たとえば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アプリケーションをホストしてみましょう。

Go 1.19 (Experimental) を選択

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

「Deploy to Web App...」からデプロイします

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

ちなみにこのサンプルアプリケーションは簡易的なユーザー登録機能があるので、以下のようにするとユーザー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あたりが来るといいですね。

本記事の投稿者: 髙井 比文
AKSをメインにしたインフラとアプリの領域際をご支援することが多いです。Azureは11冠です。
Hifumi Takai - Credly