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/

Avatar for YAEGASHI Takeshi

YAEGASHI Takeshi

April 24, 2021
Tweet

More Decks by YAEGASHI Takeshi

Other Decks in Technology

Transcript

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

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

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