progrhyme's tech blog

主にIT関連の技術メモ

GitHub Pagesをメタデータサーバとする簡易インストーラー「binq」をGo言語で作った

  • どんなツールか
  • 使い方
  • なぜ作ったか?
  • メタデータメタデータサーバ
  • 利用例
  • 今後の予定
    • パッケージ管理機能
    • URLフォーマットの自動生成
    • その他
  • まとめ
  • 参考
  • 免責事項

※2020-07-13追記: 各リポジトリGitHub Org https://github.com/binqry に移しました。*1

どんなツールか

「簡易インストーラー」と書きましたが、単純にインターネットからソフトウェアをダウンロードして、実行ファイルを指定されたディレクトリに配置します。
圧縮ファイル形式で配布されているものは解凍して、実行ファイルを見つけて配置します。
バイナリのまま配布されているものだと、UNIX系OS環境だとよく chmod +x しないといけないのですが、それは自動的にやります。
WINDOWSだともうちょっと別の対応が要りそうですが、まだやってません。

使い方

# フルURL指定
binq https://github.com/peco/peco/releases/download/v0.5.7/peco_darwin_amd64.zip \
  -d path/to/bin
binq https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 \
  -d path/to/bin -f jq

# メタデータサーバ + プログラム名指定
binq -s https://progrhy.me/binq-index mdbook -d path/to/bin

## 環境変数でメタデータサーバとインストール先ディレクトリを設定可能
export BINQ_SERVER=https://progrhy.me/binq-index
export BINQ_BIN_DIR=path/to/bin
## @VERSION でバージョン指定可能
binq jq@1.6 -f jq

なぜ作ったか?

続きを読む

シェルスクリプトのパッケージ管理ツール「shelp」をGo言語で作った

これです。

https://github.com/progrhyme/shelp/

前回の記事でもちらっと触れましたが、あれから2週間近く経って、自分が欲しい機能はもう一通り揃ったところです。

何ができるツールなの?

だいたいbasherと同じようなことができます。 basherの機能概要については以前にQiitaに書きましたが、多少の相違点もあるので、改めて書き下します。

shelpの主な機能:

  • 任意のGitリポジトリをgit cloneして $SHELP_ROOT 下に配置し、「パッケージ」として扱います
    • リポジトリが bin/ とかルートディレクトリ直下に実行ファイルを含んでいればPATHを通します(カスタマイズ可能)
    • 取得するbranch, tag, commit hashの指定が可能です
  • include というシェル関数で任意のパッケージの任意のシェルスクリプトを読み込むことができます
  • YAMLの設定ファイルに取得したいパッケージリストを書いてまとめてインストールしたり、リストにないパッケージをまとめて削除できます
  • Bash, Zsh, fish shellをサポート。他のPOSIXコンパチなシェルでもたぶん動く
続きを読む

Hello basher, Goodbye to clenv

  • TL;DR
  • あらすじ
    • 4年前〜clenv開発
    • basherとの出会い、そして移行
  • そもそも解決したかった課題
  • clenvでできていたこと
  • clenvの課題
  • basherの良い点と得られた恩恵
  • basherの不具合と、不足機能への対処
  • まとめ
  • 次回予告(?)

TL;DR

自作のシェルスクリプト・パッケージ管理ツール「clenv」から、「basher」に移行したという話。

basherそのものの機能や使い方についてはQiitaにエントリを書いたので、興味のある方はそちらをどうぞ:

あらすじ

4年前〜clenv開発

シェルスクリプトのパッケージ管理ツールがほしくなり、なぜか良い物が見つけられなかったので自作してしまったのは、ちょうど4年前のことだった。

コミットログによると、2016年の4月にガッと作って、6月ぐらいまでちょこちょこいじり、9月にまた多少機能追加して、それからずっと放置していた。
ので、実装の詳細はもうあまり記憶にもないのだけど、元々自分で欲しくて作ったものということもあり、一応ずっと使い続けていた。

basherとの出会い、そして移行

続きを読む

Google Cloudのウェビナー『Google流、理想的なCI/CDを導入するための考え方とその実践』を視聴した

はじめに

先週に引き続き、本ウェビナーシリーズの第3回『Google流、理想的なCI/CDを導入するための考え方とその実践』を視聴した。
このシリーズは『Google Cloud で実現するモダンなアプリケーション開発』というもので、下がそのサイトである:

今回はプライベートの都合でリアルタイムでの視聴はできなかったので、後でYouTube動画を見返すことになった。
タイトルと概要からなんとなく察していたけど、ややビギナー向けな感のある内容だったので、個人的には結果としてよかったと思う。
さくさく飛ばして、GKEの自動デプロイ機能のデモと、気になった質疑の内容を中心に視た。

所感

  • GKEの自動デプロイ機能はとても楽そう
  • DORAのDevOps Quick Checkは、まあ、やってみる価値はあるかも

GKEの自動デプロイ機能

3月に発表された下の記事の機能のデモがあった:

Cloud Buildか、と思いながらスルーしていたので、今回見れてよかった。

見ていると本当に簡単そうだった。

  • GitHubリポジトリを選ぶだけでGKEにデプロイしてくれる
  • その後、継続的デプロイを設定するタイミングでYAMLを作る
    • 推奨設定を作ってくれる

作られるデプロイパイプライン:

  • GitHub -> Google Cloud Source Repositoryにミラーリング
  • Cloud Buildでビルド
    • Dockerイメージをビルド
    • GCRにpush
    • 新しいManifestファイル作る
    • GKEにManifestを適用

ちょっと試してみようと思ったが、そのままではGitHubリポジトリやBitbucketリポジトリに選択肢が現れなかった。
たぶんこの辺りの設定が要るのかな、と思う:

私の関わる現場では別のCI/CDツールと組み合せたりしているけど、Cloud Buildだけで済ませるのもシンプルでいいかなと思った。

DORAのDevOps Quick Check

動画の最初の方で紹介があった。

https://www.devops-research.com/quickcheck.html

これである。
アンケート形式で5つの設問に答えると、自分の現場のソフトウェア・デリバリーのパフォーマンスが業界平均と比べてどのくらいかというのがわかる。

DORAというのは、DevOps Research and Assessmentの略で、Google内にそういうチームがあるそうだ。

Q&A抜粋メモ

気になったやつだけ。

  • Q) Artifact Registry使ったほうがいいの?
    • A) まだβなので、商用環境での利用はお待ち下さい
  • Q) GCRで、開発環境のレジストリと本番環境のレジストリ、どっちかに寄せたい気もするが、分けた方がいいのか、ポリシーはある?
    • A) 金融系の案件などで分ける事例もあれば、まとめる事例もある。自分らの都合に合わせてよしなにやってくれ。
  • Q) Argo CDじゃないとできないことあるの?
    • A) リポジトリ監視して同期するような仕組みができない

以上。

Bash/ZshのプロンプトにGoogle Cloud SDKのconfig情報を表示する「gcloud-prompt」を作った

  • TL;DR
  • 作成の経緯
  • デモ
  • 実装の解説めいた注意事項
  • おまけ: kubectlのcontext/namespaceと併せて表示
  • 終わりに
  • 参考
  • 脚注

TL;DR

これです。

https://github.com/progrhyme/gcloud-prompt

gcloud-prompt.sh を読み込んで gcloud_prompt という関数を実行すると、Google Cloud SDKのconfigurationやconfigの設定値を出力します。

作成の経緯

最近、GCPで複数のプロジェクトを利用しています。 それぞれのプロジェクトの設定をconfiguration*1)という単位にまとめて管理すると便利です。

しかし、別の作業をしていてターミナルに戻ったときなど、「いまアクティブなconfigurationは何だっけ?」となってしまうことがありそうです。 もちろん、 gcloud config list などのコマンドで確認できますが、プロンプトにアクティブなconfigurationやプロジェクト名、compute regionなどを表示できれば、より便利で、効率的で、安心できると思います。

このような用途のツールは、GitHubなどを検索すると既に色んな人が作っているようでしたが、自分に合う良い物が見つけられなかったので、自作することにしました。

デモ

続きを読む

Google Cloudのウェビナー『Anthos anywhere』を視聴した

はじめに

先週から、『Google Cloud で実現するモダンなアプリケーション開発』という全10回のウェビナーが配信されている。

興味のあるものをいくつか視聴してみるつもりでいる。

今日は第2回の開催で、題は『Anthos anywhere ~ Anthos の進化を追う ~』というものだった。

資料はまだアップされていないようだけど、先週のセッションの資料はもう上のサイトに上がっているので、来週までにはアップされるのではないかと思う。
あと、You Tube Liveの動画はしばらくは見返せるようだ。

※6/2追記: 資料が上のサイトで公開された。

Pickup

  • Anthos Sample Deploymentの情報は見落としていたかも。とても試しやすくなっているので、試したい。(それでも放っておくと懐が痛むぐらいのお金は掛かるのでなるべく会社で)
  • 7月以降に従量課金モデルが出るらしいので、期待
  • Anthos GKE on AWS
    • まだβで、Multi-Cloudのライセンスモデルはまだ出てない
    • EKSじゃなくてGKE. EC2の上に乗る。K8sのバージョンにも -gke が入ってる
    • ログ、メトリクスはCloud Logging / Monitoringに集約される

所感

新しめの情報がまとまっていて、キャッチアップに良いセッションだった。

聴講ログ

以下は聴講ログ。
いくつかスクリーンショットも載せる。

イントロ

  • スピーカー情報
    • 篠原 一徳 氏
    • Google Cloud アプリケーション モダナイゼーション スペシャリスト
  • 自己紹介
  • アジェンダ
    • 概要
    • Sample Deployment
    • Ingress for Anthos
    • Anthos GKE on AWS
    • まとめとAnthosの今後
  • 概要
  • Anthos 1.3サービス一覧(2020年5月時点)
    • Multi Cloud β
    • :

Anthos 1.3 サービス一覧(2020年5月時点)

  • Anthos BYOK
    • 基本マネージドK8sを提供するが、自分のK8sや他社管理のK8sもAnthos管理下にできるようになる予定
  • OSSをベースにしたソフトウェアスタック
  • 提供形態
    • ソフトウェア提供
    • Multi-Cloudライセンス ... 近日登場予定
  • これまでの進化の軌跡
    • Anthos 1.0: 2019年6月 GKE On-Prem, Config ManagementがGA
    • 3ヶ月毎にマイナーバージョンアップ
  • Anthos 1.3の注目アップデート
    • Anthosサンプル環境の提供
      • GCP上で1クリックで環境構築
    • マルチクラスタ負荷分散
    • マルチクラウドのサポート

Anthos Sample Deployment

  • Anthos Sample Deployment (Preview)
    • Anthos on GCPのサンプル環境をGCP情に構築し、Anthosの各機能をチュートリアルに従いハンズオンで体験することが可能
    • デフォルトで自動構築される環境
      • Anthos GKEクラスタ
      • Jump Server (GCE)
      • Anthos Config Management
      • Anthos Service Mesh
      • サンプルのマイクロサービスアプリケーション
    • Cloud ShellまたはJumpサーバ経由でアクセスできる
    • Marketplaceから構築可能
      • 所要時間15分ほど
    • 注意: 新規GCPプロジェクトのみサポート
  • デモ - Anthos Sample Deployment
    • 料金: 1カ月だいたい $431
    • Anthosライセンス料はかからない - 6月末まで
    • いくつかパラメータ設定が可能
    • デプロイボタン
      • GCPのDeployment Managerが動く
    • GCPコンソール
      • Anthosダッシュボード
      • 機能 - アルファ版
        • 機能一覧を見られる
      • ブティックのサンプルアプリケーション
      • Anthos Service Mesh
        • 各サービスを一覧で見られる
        • トポロジー
          • サービス間の関係をグラフで可視化してくれる
          • frontend -> (recommend, cart, ...)
          • カーソルを合わせると秒間リクエスト数が表示される
          • cartserviceが2つ
            • service, deploymentが分かれて表示
            • podが2つある
        • SLOを設定する
          • SLIを選択
            • 可用性 or レイテンシ
          • 目標値を決める
          • 評価期間を決める
          • SLIやエラーバジェットが見られる
          • アラート通知設定できる
          • Observabilityを実現

Anthos Service Meshのトポロジ表示機能
Anthos Service Meshのトポロジ表示機能

Anthos Service MeshにおけるSLO管理機能
Anthos Service MeshにおけるSLO管理機能

  • Anthos Sample Deployment まとめ
    • あくまで検証用、本番ワークロードは乗せない

Ingress for Anthos

  • About
    • External HTTP(S) Load Balancingをベースにした新しいサービス
    • リージョンをまたいだクラスタ間でのHTTP/Sロードバランシングが可能
    • VPCネイティブクラスタで利用可能(NEG依存)
    • バックエンドの状態を見つつ、最寄りのクラスタトラフィックを転送
    • kubemciとの違い
      • CLIツールではなく、CRD
  • リージョンをまたいだクラスタ間でのHTTP/Sロードバランシングが可能
    • イメージ図
    • 両方共1.1.1.1
      • IP anycast
      • 近い方に割り当てられる
      • フェールバックもしてくれる

Ingress for Anthosによるリージョンをまたいだクラスタ間負荷分散
Ingress for Anthosによるリージョンをまたいだクラスタ間負荷分散

Ingress for Anthosアーキテクチャー
Ingress for Anthosアーキテクチャ

  • Ingress for Anthosデモ
    • ローカルのターミナル
      • GKEクラスタのリスト
      • gcloud container hub memberships list
        • GKE Hubに入ってるGKEのリスト
      • gcloud alpha container hub features multiclusteringress describe
      • Deployment zoneprinterを3クラスタにデプロイしている
      • MultiClusterService ... CRD
        • Service相当
      • MultiClusterIngress
        • MCSをbackendに指定
      • kubectl describe mci zone-ingress
      • curl叩いてみる
        • 東京からアクセスすると東京のメッセージ、USからアクセスするとUSのメッセージが表示される
  • Ingress for Anthosの主なユースケース
    • リージョン間で冗長構成を組みたい
    • GKEクラスタのかなりーアップグレードをしたい
    • グローバルにサービスを提供しつつ
      • クライアント〜サーバ間のレイテンシを低くしたい
      • シングルIPで運用したい
    • ※今のところ、BackendConfigでサポートしているのはTimeoutのみ

Anthos GKE on AWS

Anthos GKE on AWSアーキテクチャー
Anthos GKE on AWSアーキテクチャ

  • Anthos GKE on AWSデモ
    • AWSコンソール
    • ターミナル
    • kind: AWSCluster
    • kind: AWSNodePool
    • kubectl get AWSClusters
    • 1.15.8-gke.14
    • Service
      • type: LoadBalancer
      • ELBが作られる
    • Ingress ... Envoy
  • 主な機能
    • HPA
    • Cluster auto scaling
    • Not yet
      • Ingress (ALB)
      • Workload Identity
      • VPA
  • ユースケース
    • GCP, AWS双方のエコシステムを利用しつつ、一貫性のあるK8sの運用を行いたい
    • GKE Hub
    • Anthos CLI
    • Anthos Config Management & more
    • ログ、メトリクス管理を集約し、ガバナンスを高めたい
      • Cloud Logging / Monitoringに集約される
  • Anthosの今後
    • マルチクラウド対応の拡充
      • Azureサポート
    • Non-VMware, Edge Computing, カバー領域の拡大
      • Bare Metalサポート
      • BYOk
    • 業界別ソリューション
      • Anthos for Telecom
      • Anthos for Retail
  • Anthos関連の注目セッションの紹介

Q&A

  • Ingress for Anthosのトラフィッククラスタレベルでカナリアリリースやりたい
    • こういうユースケースがあることは理解しているので、今後にご期待下さい
  • Anthos on GCPとAnthos on On-premiss, Anthos GKE on AWSの違いは?
    • 機能が充実しているのは on GCP
      • 価格が安いのも on GCP
    • AWSクラウドなので、オンプレより便利なこともある
    • AWSはまだ価格決まってない
      • 夏にはGAになる予定
  • Ingress for AnthosはEKS対応の予定はある?
    • Anthos GKE on AWSはEC2に立てるのでEKSじゃない
    • ユースケースとしてあることは理解している
  • Anthos GKE on AWSユースケースは?
  • Ingress for Anthos と、F5 などの別の GSLB を利用するケースの違いを教えて下さい
    • GSLB: DNSベースで実装している
    • Ingress for AnthosはDNSに依存していない
      • 1つのAレコードだけ
  • IstioとAnthosの違いは?
    • Anthos Service MeshはIstioベースで、互換性がある
    • Cloud RunはKnativeベース
  • Anthos GKE on AWSの初期構築が大変そう

fish shellに手を出しかけたけど、気づいたらOh My ZshでZsh環境をカスタマイズしていた

  • はじめに〜fish shellを少しだけ試してみた
  • むしろZsh環境を見直したくなった
  • そしてOh My Zsh
  • やってみたらできた
  • 現状
  • 終わりに
  • 余談: Macの端末アプリについて
  • 脚注

はじめに〜fish shellを少しだけ試してみた

きっかけは曖昧だけど、たぶん身近でfish shellユーザーが結構増えている(ような気がした)ことだったと思う。

最近自分でもfish shellを少しだけ試して、まあ悪くないんじゃないかと思ったけど、UbuntuデスクトップだとPowerlineフォントで何かがおかしくて、特殊文字が上手く表示されない感じになった。
その後、macOSでも試したけど、なんだか思ったよりカラフルにならずに、調整が必要そうな感じだった。 たぶん、もう少し頑張ればもっといい感じになったんだろうと思うけど。

それでも、fish良いなと思った機能がいくつかあった:

  • コマンドの自動補完。ヒストリから直近で最もマッチするものを引っ張ってくれるようだ
  • パスの短縮: ~/my/repos/hoge -> ~/m/r/hoge みたいにしてくれる

あと、テーマのスクリーンショットを見ていると、bobthefishとかはカラフルで良いなと思った。

むしろZsh環境を見直したくなった

……が、一旦冷静になって考え直してみると、「それ、別にZshでもできるんじゃないか?」と思った。

続きを読む