Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Microsoft Azure 向け Go SDK の最新動向・開発体制・コード生成戦略

Microsoft Azure 向け Go SDK の最新動向・開発体制・コード生成戦略

Go Conference 2021 Spring
https://gocon.jp/sessions/session-lt2/

5b47136bedcba2799edf4fcd27ea66d7?s=128

YAEGASHI Takeshi

April 24, 2021
Tweet

Transcript

  1. Microsoft Azure 向け Go SDK の 最新動向・開発体制・コード生成戦略 2021/04/24 Go Conference

    2021 Spring 八重樫 剛史 Takeshi Yaegashi
  2. 自己紹介 八重樫 剛史 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 の最新動向・開発体制・コード生成戦略
  3. 本日の話題 • Microsoft Azure クラウドサービスについてざっくりと • Azure および Azure Active

    Directory の API について • Go SDK について • 最新の開発動向について
  4. 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 サポートの実装
  5. 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
  6. 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月で終了予定
  7. 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.
  8. 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 など)
  9. 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 対応は未定
  10. 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 を含む、 様々な言語がこれに準拠して開発されている
  11. 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 の違いなどが問題
  12. まとめ • Azure のサービスや SDK 開発の近況について紹介しました • Azure に興味が湧いたらぜひ使ってみてください! •

    SDK 開発、特に Microsoft Graph 関連はコントリビュートのチャンス! • Gophers Slack の #azure-sdk-for-go (英語) にいつもいます! 質問などあったら答えます!