Slide 1

Slide 1 text

Microsoft Azure 向け Go SDK の 最新動向・開発体制・コード生成戦略 2021/04/24 Go Conference 2021 Spring 八重樫 剛史 Takeshi Yaegashi

Slide 2

Slide 2 text

自己紹介 八重樫 剛史 Takeshi Yaegashi 株式会社バンダイナムコスタジオ所属 Linux・Unix・OSS・Go 言語が好きなエンジニア 組み込みシステム開発、ゲームサーバ開発、 CI/CD インフラ開発、 開発環境のクラウドシフトなどの業務に従事 活動場所 ホームページ・ブログ https://l0w.dev GitHub https://github.com/yaegashi Twitter https://twitter.com/hogegashi Go Conference 登壇 2019 Microsoft Graph API for Go 2021 cobra-cmder: Goの言語機能を活用したシンプルな CLIツール構成法 2021 Microsoft Azure 向け Go SDK の最新動向・開発体制・コード生成戦略

Slide 3

Slide 3 text

本日の話題 ● Microsoft Azure クラウドサービスについてざっくりと ● Azure および Azure Active Directory の API について ● Go SDK について ● 最新の開発動向について

Slide 4

Slide 4 text

Azure と Go ● Azure サービスを Go で使うためのドキュメントや SDK が充実してきている ○ https://azure.microsoft.com/ja-jp/develop/go/ ○ https://docs.microsoft.com/ja-jp/azure/developer/go/ ● Azure サポートのため Go SDK の重要性が特に高まっている ○ Azure Kubernetes Service (AKS) - Azure ネイティブリソースの統合 ○ HashiCorp Products (Terraform, Packer, Vault, Consul, etc.) - Azure サポートの実装

Slide 5

Slide 5 text

Azure を使うための API ● Azure Resource Manager (ARM) REST API ○ API Endpoint https://management.azure.com ○ API Specs https://github.com/Azure/azure-rest-api-specs (Swagger 2.0) ○ API Reference https://docs.microsoft.com/en-us/rest/api/azure/ ○ 公式 Go SDK https://github.com/Azure/azure-sdk-for-go ○ Azure の IaaS や PaaS のリソースのほとんどはこの API で作ったり消したりする。 ○ ただしこの API だけでは Azure は使えない。API を使おうとするヒト・モノ(セキュリティプリンシパ ル)とその認証・認可の基盤が必要。 → Azure Active Directory

Slide 6

Slide 6 text

Azure Active Directory を使うための API ① ● Azure Active Directory (Azure AD) Graph API ○ API Endpoint https://graph.windows.net ○ API Specs https://graph.windows.net/$metadata (OData 3.0) ○ API Reference https://docs.microsoft.com/en-us/previous-versions/azure/ad/graph/api/api-catalog ○ 公式 Go SDK Azure SDK for Go の中にある graphrbac クライアント ○ ユーザー、グループ、アプリケーション、ライセンスの操作ができる ○ Deprecated / 2022年6月で終了予定

Slide 7

Slide 7 text

Azure Active Directory を使うための API ② ● Microsoft Graph API ○ API Endpoint https://graph.microsoft.com ○ API Specs https://graph.microsoft.com/v1.0/$metadata (OData 4.0) ○ API Reference https://docs.microsoft.com/en-us/graph/api/overview ○ 公式 Go SDK ない ○ ユーザー・グループ・アプリ・ライセンスとかだけではなく、 Microsoft 365 クラウドサービスに属するリソースすべてが扱える OneDrive, SharePoint, Outlook, Teams, etc.

Slide 8

Slide 8 text

Azure SDK for Go の開発体制① ● AutoRest スイートにより Swagger 2.0 仕様から自動生成される ○ https://github.com/Azure/autorest → AutoRest 本体 (C#) ○ https://github.com/Azure/autorest.go → AutoRest の Go コードジェネレータ (C#) ○ https://github.com/Azure/azure-rest-api-specs → Azure REST API 仕様 (Swagger 2.0) ○ https://github.com/Azure/azure-sdk-for-go → 上記を使って生成された SDK (Go) ○ https://github.com/Azure/go-autorest → 共通ランタイムライブラリ (Go) ● 現状の問題 ○ Go コードジェネレータが C# で書かれておりしんどい ○ go-autorest の認証などの共通ランタイムが古くなってきている (Azure AD v1.0 など) ○ いまだに Azure AD Graph API (graphrbac) しか使えず Microsoft Graph API が必要なのに困って いるプロダクトが多い (Terraform など)

Slide 9

Slide 9 text

Azure SDK for Go の開発体制② ● "Track 2" の開発が進んでいる ○ https://github.com/Azure/autorest.go/tree/track2 → 新しい Go コードジェネレータ (TypeScript) ○ https://github.com/Azure/azure-sdk-for-go/tree/master/sdk → 新しい Go SDK ● どうなるか ○ Go コードジェネレータが今度は TypeScript になった ○ 共通ランタイム含めパッケージ構成が刷新・次のようなパッケージが見える ■ 共通: azcore, azindentity (Azure AD v2 にも対応) ■ ARM: resource, compute, network, keyvault, storage ○ ただし Azure AD Graph 依存は変わらず Microsoft Graph 対応は未定

Slide 10

Slide 10 text

Azure SDKs ● Azure SDKs Guidelines というサイトができた ○ General Guidelines ○ Go Gidelines (DRAFT) ● 様々な言語向けの SDK 開発ガイドラインを規定 ○ 認証・承認、I/Oルーチン実装、APIドキュメント、etc. ○ SDK 開発実例として普通にいろいろと参考になる ○ Azure AD Graph や Microsoft Graph API に関する言及はない … ● Go SDK Track 2 を含む、 様々な言語がこれに準拠して開発されている

Slide 11

Slide 11 text

Microsoft Graph API の Go SDK をとりまく状況 ● Terraform Azure AD provider ○ Azure SDK for Go で Azure AD を使っている Terraform プロバイダ ○ Issues の大半が Microsoft Graph API でなければ解決できないものになってしまった ○ いま見たら、独自ライブラリ実装の道を歩み始めていた https://github.com/hashicorp/terraform-provider-azuread/issues/323 ● msgraph.go ○ 勢いで作った拙作の Go ライブラリ (Go Conference 2019 で発表) ○ そこそこ実用になるが Azure SDKs ガイドラインを見て、いろいろ作り直しを考えている ○ OpenAPI (Azure REST API) と OData (MS Graph) の Spec の違いなどが問題

Slide 12

Slide 12 text

まとめ ● Azure のサービスや SDK 開発の近況について紹介しました ● Azure に興味が湧いたらぜひ使ってみてください! ● SDK 開発、特に Microsoft Graph 関連はコントリビュートのチャンス! ● Gophers Slack の #azure-sdk-for-go (英語) にいつもいます! 質問などあったら答えます!