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/

YAEGASHI Takeshi

April 24, 2021
Tweet

More Decks by YAEGASHI Takeshi

Other Decks in Technology

Transcript

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

    View Slide

  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 の最新動向・開発体制・コード生成戦略

    View Slide

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

    View Slide

  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 サポートの実装

    View Slide

  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

    View Slide

  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月で終了予定

    View Slide

  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.

    View Slide

  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 など)

    View Slide

  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 対応は未定

    View Slide

  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 を含む、
    様々な言語がこれに準拠して開発されている

    View Slide

  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 の違いなどが問題

    View Slide

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

    View Slide