Goで作って配布するAzureコマンドラインユーティリティ

 Goで作って配布するAzureコマンドラインユーティリティ

de:code夏まつり ~よりコミュニティを楽しくするためのコミュニティのすすめ the FINAL
https://msdevjp.connpass.com/event/183747/

5b47136bedcba2799edf4fcd27ea66d7?s=128

YAEGASHI Takeshi

August 08, 2020
Tweet

Transcript

  1. Goで作って配布する Azureコマンドラインユーティリティ de:code夏まつり 〜よりコミュニティを楽しくするためのコミュニティのすすめ the FINAL 2020-08-08 ⼋重樫 剛史 Takeshi

    Yaegashi
  2. ⾃⼰紹介 2 ⼋重樫 剛史 Takeshi Yaegashi 株式会社バンダイナムコスタジオ所属 Linux・Unix・OSS・Go ⾔語が好きなエンジニア 組み込みシステム開発、ゲームサーバ開発、CI/CD

    インフラ開発、 開発環境のクラウドシフトなどの業務に従事 活動場所 ホームページ・ブログ https://l0w.dev GitHub https://github.com/yaegashi GitLab https://gitlab.com/yaegashi Twitter https://twitter.com/hogegashi
  3. 今⽇の話題 3 § 私の de:code 2020 § Go と Gophers

    と Azure § azbill の紹介とクラウド利⽤費⽤可視化のねらい § Go による Azure プログラミング § Go によるクロスプラットフォーム・シングルバイナリ CLI ツール開発
  4. 私の de:code 2020 4 § ゲーム会社の開発インフラのクラウド導⼊を推進する⽴場にいるので、 テクニカルな話題だけでなく、DX・組織変⾰の話題も⼤いに参考になりました § 全部は⾒てませんが参考になったセッションや企画 -

    A12 A13 2020 年も最⾼のゲームをつくろう! Game Stack でゲーム開発をしよう! - S09 Apps on Azure AD - アプリケーション連携 WHY と HOW - Z05 ビジネスをアジャイルに変⾰する「Cloud Center of Excellence」とは - de:code 夏まつり 〜よりコミュニティを楽しくするためのコミュニティのすすめ § 実は de:code 2019 では⾃分も登壇していました - DT01 ゲームメーカー⽬線でAzureを活⽤した開発インフラのクラウドシフトとアプリ設計事例紹介
  5. Go について 5 https://golang.org § Google 製のプログラミング⾔語 (2009) § C

    ライクでシンプルな⽂法、豊富なライブラリ § サーバー、インフラ、コマンドライン (CLI) ツールが得意分野 - Docker, Kubernetes, Terraform など現代のクラウドインフラの実装主⼒⾔語 § クロスプラットフォーム開発サポート - Linux, macOS, Windows など各OS・CPU向け実⾏ファイルが簡単に作れる § マスコット Gopher (ホリネズミ) - Go コミュニティの⼈たちを Gophers と呼ぶこともあります
  6. Gophers にとっての Microsoft/Windows/Azure 6 § フロンティアもしくはブルーオーシャン (のひとつ) - Go にとって未踏のサービス・OS・API

    がたくさんある - Go・Azure・インフラなど様々なコミュニティで先駆者になれるチャンス § 事例 msgraph.go https://github.com/yaegashi/msgraph.go - 拙作の Microsoft Graph のクライアントライブラリ このような重要な API のライブラリがまだないのが Go と Azure の世界 - msgraph.go 利⽤プロジェクト - Terraform (Goで開発) の各種プロバイダ: msgraph, outlook - matterbridge チャットブリッジサーバ: Teams 対応に msgraph.go を利⽤ § Gophers Slack の #microsoft #azure-sdk-for-go などで交流しましょう - Microsoft 勤務の Gophers もたくさんいます
  7. azbill の紹介 7 https://github.com/yaegashi/azbill § Go ⾔語によるコマンドライン (CLI) ユーティリティ §

    Azure で使った費⽤の利⽤明細を JSONL や CSV の形式でエクスポートする § オフラインのコスト分析のためのデータを⽣成する § Qiita の紹介記事 https://qiita.com/yaegashi/items/dfde7206f7eaf009c345
  8. azbill 開発の動機 8 § 最近の仕事:開発インフラのクラウド導⼊推進 - 2019 年度は社内の Azure 利⽤実績を伸ばし

    Enterprise Agreement 導⼊に成功! - Azure サブスクリプションが作り放題となり、構成の⾃由度・柔軟性が⾶躍的に増す § クラウド利⽤コストの可視化 - どの部署・プロジェクトがどれだけ Azure を使っているかを誰でもわかるようにして、 新規利⽤開始の敷居をさらに下げ、相互チェックも働くようにしたい azbill
  9. Go による Azure プログラミング 9 https://github.com/Azure/azure-sdk-for-go § Azure SDK for

    Go - Azure Resource Manager (ARM) の REST API を発⾏できる Go のライブラリ - VM を作成・起動・停⽌したり、請求書を照会したりが Go プログラムでできる § Azure SDK の問題点 (Go に限らない話) - Azure SDK の更新が最新の ARM REST API に追いついていないことが多い - 例: 新しい形式の利⽤明細を照会するために Consumption API のバージョン 2019-10-01 を使い たいが Azure SDK for Go ではバージョン 2019-01-01 までしか使えない
  10. AutoRest による Azure SDK コード⽣成 10 https://github.com/Azure/autorest § AutoRest CLI

    で最新の ARM REST API の定義から SDK コードが⽣成できる - azure-rest-api-specs: REST API の OpenAPI 定義 - AutoRest CLI: SDK コード⽣成 CLI ツール (Node.js) - autorest.go: Go コード⽣成プラグイン (C# .NET Core) $ npm install -g autorest $ git clone --depth=1 https://github.com/Azure/azure-rest-api-specs.git specs $ autorest --go ¥ --tag=package-2019-10 ¥ --output-folder=./azure-sdk/consumption ¥ --package-name=github.com/foo/bar/azure-sdk/consumption ¥ specs/specification/consumption/resource-manager
  11. Visual Studio Code と development container による Go 開発環境セットアップ §

    開発環境構築の悩み - Go でなにか作ってみたいけどインストール と設定がめんどくさい… - AutoRest CLI を使おうと思ったら Node.js と か .NET Core のインストールも必要… § VSCode の development container が便利 - Linux 開発環境の Docker コンテナを⾃動的に 作ってシェルを起動してくれる - azbill も .devcontainer を⽤意しているので最 新版の開発・テストにすぐ参加できる - Go の開発においては CLI に限らず JAMstack アプリなどあらゆる案件でおすすめできる 11
  12. Go によるクロスプラットフォーム・ シングルバイナリ配布 § azbill のバイナリ配布 - Linux, macOS, Windows

    向けがある - Windows なら zip の中の約 9MB の実⾏ファ イル azbill.exe だけで動く § シングルバイナリが便利なところ - ダウンロードしてすぐに使ってもらえる - コンテナに簡単に組み込める § Go によるクロスプラットフォーム・シン グルバイナリ CLI の例 - kubectl, hugo, docker-compose, などなど - az aks install-cli 12
  13. GoReleaser によるビルド・リリース 13 https://goreleaser.com § 各OS・CPU向けのビルド・リリースを⾃動化してくれる CLI ツール § GitHub

    Actions, GitLab CI, CircleCI など様々な CI/CD サービスをサポート § azbill のようなクロスプラットフォーム CLI ツールに最適 § .goreleaser.yml を書くことで設定する project_name: azbill builds: - goos: [linux, darwin, windows] goarch: [amd64] archives: - name_template: '{{.ProjectName}}_v{{.Version}}_{{.Os}}_{{.Arch}}' format_overrides: - goos: windows format: zip
  14. Go による CLI ツール開発 14 § spf13/cobra https://github.com/spf13/cobra - Go

    で最も使われている CLI 構築ライブラリ - コマンドラインオプション解析や bash/zsh 補完などをサポートする - kubectl などもこれを使っている § yaegashi/cobra-cmder https://github.com/yaegashi/cobra-cmder - spf13/cobra の拡張 - 階層コマンドの記述とテストがやりやすくなる - Qiita の記事 https://qiita.com/yaegashi/items/9acc1d22bcc247542a4e
  15. まとめ 15 § Go と Azure とクラウド導⼊の話を中⼼にお伝えしました - Go と

    Gophers と Azure - azbill とクラウド費⽤可視化の取り組み - Go の得意なクロスプラットフォーム・シングルバイナリ CLI ツール § これからもいろいろなコミュニティへのアウトプットを頑張っていきます!
  16. おわり 16