年中アイス

いろいろつらつら

rnzoo 0.5.0開発中

EC2関連のコマンドをGoで実装したrnzooですが、0.5.0に向けて追加実装を色々やってます。 2017/03/23時点で0.5.0-dev5をリリースしています。devバージョンを使いたい場合は、以下で入ります。

brew tap reiki4040/rnzoo
brew install --devel rnzoo

0.5.0のゴール

大きくは2つです。片手落ちだった機能の拡充と、安全面への配慮。

EC2の作成から削除までライフサイクルを一通りできるようにする

新規作成 -> 停止 -> 起動 -> 停止 -> タイプ変更 -> 起動 -> 削除みたいな流れです。これでAWSコンソール開かなくても起動したりとかの操作は一通りできます。*1

確認をつけてより安全に

使ってもらっている同僚から、確認オプションが欲しいという要望もあり、危なそうなのはデフォルト確認して、確認なしオプションを追加し、動いてもまぁいいかなというのは、デフォルト確認なし、確認するオプションを追加しました。確認もinstance idでは判断できないので、Nameタグを使うようにして、よりわかりやすくしました。

0.5.0-dev5(2017/3/23時点)のアップデート内容

機能追加

変更

  • 実行前に確認オプションの追加(デフォルトは確認なし)
  • 確認時にinstance idではなくNameタグを表示するように
  • attach-eip --movemove-eipサブコマンドとして独立
  • terminate, move-eip, detach-eipはデフォルト確認ありで確認しないオプションを追加
  • サブコマンドの名称からec2を除いた短縮名を追加

internal

  • 使用ライブラリの最新追いつき(aws-sdk-goを最新にしてIPv6対応)
  • release scriptの整備(tag打ったら、リリースして、homebrewのプルリクまで作る)
  • homebrewのdevel対応の為に、バージョン表記からvを削除

リリース予定

アップデート的にはこの辺りにして、3末あたりに0.5.0としてリリースする予定です。次は0.6.0で、SecurityGroup関連と、内部のリファクタあたりをやろうかと。SecurityGroup自体はpiculetでCodenizeするのがいいと思っているので、あくまでEC2への付与、除去と、一時的なルール変更の位置付けになる予定です。

*1:EC2新規作成時のオプションは多すぎるので自分で使うもののみ。他は必要になったら実装する予定。

rnzooにinstance type変更機能を追加しました

rnzooのdevelopバージョンにec2typeというインスタンスタイプを変更するサブコマンドを追加しました。

# すでに入れている場合はtap不要
brew tap reiki4040/rnzoo

# developバージョンの指定でインストール
brew install rnzoo —devel

AWSコンソールからやると1インスタンスずつしかタイプ変更できず、たまに複数やりたくなるので追加しました。複数選ぶときはctrl+spaceです。また、変更したらどうせ起動するというのもあり、変更後に起動させるオプションも-startとしてつけています。

rnzoo ec2typeで、停止中のインスタンスが選択でき、続けてタイプの選択ができます。未指定の場合、以下の小さめ-標準ぐらいのタイプのみが選択できます。

  • t2.nano
  • t2.micro
  • t2.small
  • t2.medium
  • t2.large
  • c4.large
  • m4.large
  • r4.large

最初全部のタイプ選択できてもいいかなと思いましたが、並び順が面倒なのと、xlargeとか高いのは使わないし、間違って起動することを防ぐために除外しました。未指定の選択肢には出てきませんが、-tオプションは自由に指定できます。起動したい場合は、-t c4.2xlargeといった形で変更できます。新しいインスタンスタイプが増えた時に、更新しなくてもとりあえず、-tで対応できるというのもあります。

起動中のインスタンスを停止して変更も考えたんですが、停止まで待つ必要があり、CLIだと数分待てないかなーというのでやめました。多分やろうと思えばec2stop呼んで、ec2listでstoppedになるまで、定期ポーリングして待つとかでできそうですが、実装はしてません。

また、今回から、次のマイナーバージョンのdevelopブランチを作って、そこに機能追加していき、適宜(自分が使いたい時に)developバージョンとしてリリースしていこうとしています。そしてまとまったら正式版?*1としてリリース予定。この辺りはgit ブランチと開発バージョンなどの練習も兼ねてます。

*1:stableとは違うからなんて表現したやら

Pull Requestを自動で作成する

rnssh, rnzooの新しいバージョンを出そうとするときに、別リポジトリになっているhomebrew-rnssh, homebrew-rnzooを編集してpushするのが、地味に面倒だと思うようになり、他の自動化でも使えるかなと考えて、Pull Requestの自動作成をやってみるようにしてみました。

こんな感じで動かします。今回はversionとsha256 hashを渡してます。

bash genpr.sh 0.0.0 ab01cd23ef45ab01cd23ef45ab01cd23ef45ab01cd23ef45

コードはgistに。rnzooのhomebrewのバージョンアップ対応。

手順としてはすごく単純で、以下を行っているだけ。

  • tmpディレクトリにcloneしてくる
  • sedで該当ファイルを編集する
  • git commitする
  • git pushする
  • hubコマンドでPull Requestを作成する

実際にできたプルリク(テストなのでクローズしてます)

sedで編集している部分は、方法は何でもよく、コードで書き換えられるなら、他の用途にも使えそうです。AWSのCodenizeに使ってるroadworker(Route53)やmiam(IAM)などの定義追加や変更は、この応用でPull Requestを生成できそうな雰囲気。

hubコマンドは、githubCLIで操作できるもので、githubのreleaseも作れるようなので、あとはそこをスクリプトにすれば、リリースが全部自動化できます。最後のhomebrewの反映だけプルリクをマージのワンクッション。*1

rnsshとrnzooのリリース自動化状況

参考

*1:今回の場合は別にPull Requestでなくてmasterにそのままpushするでもいいんですが、練習と個人的に最後の一押しは手でいいかなというところ。