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

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

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

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

YAEGASHI Takeshi

August 08, 2020
Tweet

More Decks by YAEGASHI Takeshi

Other Decks in Technology

Transcript

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

    View Slide

  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

    View Slide

  3. 今⽇の話題
    3
    § 私の de:code 2020
    § Go と Gophers と Azure
    § azbill の紹介とクラウド利⽤費⽤可視化のねらい
    § Go による Azure プログラミング
    § Go によるクロスプラットフォーム・シングルバイナリ CLI ツール開発

    View Slide

  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を活⽤した開発インフラのクラウドシフトとアプリ設計事例紹介

    View Slide

  5. Go について
    5
    https://golang.org
    § Google 製のプログラミング⾔語 (2009)
    § C ライクでシンプルな⽂法、豊富なライブラリ
    § サーバー、インフラ、コマンドライン (CLI) ツールが得意分野
    - Docker, Kubernetes, Terraform など現代のクラウドインフラの実装主⼒⾔語
    § クロスプラットフォーム開発サポート
    - Linux, macOS, Windows など各OS・CPU向け実⾏ファイルが簡単に作れる
    § マスコット Gopher (ホリネズミ)
    - Go コミュニティの⼈たちを Gophers と呼ぶこともあります

    View Slide

  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 もたくさんいます

    View Slide

  7. azbill の紹介
    7
    https://github.com/yaegashi/azbill
    § Go ⾔語によるコマンドライン (CLI) ユーティリティ
    § Azure で使った費⽤の利⽤明細を JSONL や CSV の形式でエクスポートする
    § オフラインのコスト分析のためのデータを⽣成する
    § Qiita の紹介記事
    https://qiita.com/yaegashi/items/dfde7206f7eaf009c345

    View Slide

  8. azbill 開発の動機
    8
    § 最近の仕事:開発インフラのクラウド導⼊推進
    - 2019 年度は社内の Azure 利⽤実績を伸ばし Enterprise Agreement 導⼊に成功!
    - Azure サブスクリプションが作り放題となり、構成の⾃由度・柔軟性が⾶躍的に増す
    § クラウド利⽤コストの可視化
    - どの部署・プロジェクトがどれだけ Azure を使っているかを誰でもわかるようにして、
    新規利⽤開始の敷居をさらに下げ、相互チェックも働くようにしたい
    azbill

    View Slide

  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 までしか使えない

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  16. おわり
    16

    View Slide