Go から Microsoft Azure を利用する

Posted: , Modified:   Go Azure Swagger Qiita

本稿は Qiita 投稿記事 のバックアップです.

概要

English

Microsoft Azure をプログラムから利用する場合 .Net が一般的な選択肢だと思われるが, あえて Go から利用する方法について調べた.

Microsoft Azure SDK for Go

“go azure” で検索すると見つかる公式の SDK が Microsoft Azure SDK for GoAzure Storage SDK for Go である.後者は前者のうち storage に関する API だけを切り離したもので,今後は別リポジトリとして開発されるそうだ.

公式 SDK のため,基本的にはこれらを使えれば良いのだが,まだ preview 版であり未実装の API が多い.個人的には,Azure Storage SDK for Go は必要な機能は揃っていたが,それ以外は別の方法を探した方が良いと感じた.

余談だが,Microsoft Azure SDK for Go は一つの操作 Foo に対して Foo, FooPreparer, FooResponder, FooSender と4つの関数がセットで定義されているのだが,後ろの3つはパブリックにする必要はあるのだろうか?補完やドキュメント検索がごちゃごちゃするのだが・・・.

Azure REST API Specifications

Azure REST API Specifications は REST API 定義書を管理している公式のリポジトリである. こちらの方は,ほぼ全ての API を網羅していると思われる. REST API 定義書さえあれば,Swagger を使って Go 用のパッケージを自動生成できる.

試してみたところ,現状は Microsoft Azure SDK for Go を使うよりもこちらの方が良いと思われる.

REST API 定義書から Go 用のパッケージを生成するには,go-swagger を用いる.

$ go get -u github.com/go-swagger/go-swagger/cmd/swagger

例えば,compute API に関するパッケージを生成する場合,

$ swagger generate client \
	-f https://raw.githubusercontent.com/Azure/azure-rest-api-specs/master/arm-compute/2016-04-30-preview/swagger/compute.json \
	-t compute

のようにする.

ただし,Azure REST API Specifications のバグか Swagger 実装のバグか分からないが, swagger コマンドがエラーを出す場合がある.その時は,他のバージョン(日付)でうまく行くものがないか調べて対応する.