はじめに
こんにちは、コンテナソリューショングループの髙井です。
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あたりが来るといいですね。