EC2インスタンスを起動停止する”だけ”のCLIツール「pyc2」作ってみた

こんにちは、かずやです。

ぼくは、普段から開発環境としてAmazon EC2を使っています。

EC2の特徴といえば、ご存知「使った分だけ課金 = 従量課金制」。せっかくオンデマンドに利用できる環境を使っているのなら「必要な時だけ動かす」運用を実現したいと思うのは自然なことでしょう。

もともと、ある方法を使ってそれを実現していたのですが、”ちょこっと”した手間が残ってしまっていたんですよね。この状況がどうにも気に食わなかったのでツールを作って解決してみようと思った次第。

めっちゃ個人的でニッチなニーズなのですがw、とりあえず今回はどんなものを作ったのか、どんな考えで作ったのかをご紹介していきます。

pyc2とは

Pythonで書いた、EC2のランチャーってことで、pyc2(パイーシーツー)と名付けてみました。

しかしできることは圧倒的名前負けで、今の所、

  • インスタンスに任意の名前をつける(インスタンスIDと任意の名前を対応させる)
  • 任意の名前によるインスタンスの起動・停止
  • インスタンスにつけた名前の一覧を出力

のみ。めっちゃ雑にいうと、インスタンスに任意の名前つけてその名前で起動停止できるよっていうただそれだけのものです。うっわ低機能…。

完全個人的な用途で作ったので、READMEもクッソ雑ですが一応githubにソースはあげてあります。

bsk00wisteria/pyc2

開発用インスタンスを「使いたい時だけ動かしたい」

もともと開発用インスタンスは、弊社サーバーワークスのサービスCloud Automatorで起動・停止していました。

AWS運用自動化サービス「Cloud Automator」

このツールを使えば、インスタンスのスタート/ストップをスケジューリングできます。例えば業務時間が10:00〜19:00だとしたら、

  • 9:30:スタート
  • 19:30:ストップ

というジョブスケジュールを登録すれば、その通りにインスタンスを起動・停止してくれるのです。これにより夜間利用料を抑えられていいよね! というのがコンセプト。良い。非常に。

ですが、色々プロジェクトをやってたり、開発環境が必要なタイミングが減ったりすると、開発環境用のEC2を使わないを使わない日も出てきます。

そうすると、上記の運用では微妙にマッチしなくなってくるんですよね。たまに使わない日があるとかならいいんですが、「週1日だけ使う」みたいな場合、4日分の利用料が無駄になります。

なんとなく気になるので、最近起動ジョブは停止していました。使いたいなと思った時に起動するという運用。停止ジョブは残しているので、インスタンスを止め忘れる心配はありません。やっぱりCloud Automator便利。

しかし、インスタンスの起動を、いちいちコンソール入ってぽちぽちして…ってやるのがめんどくさかった。そう、ここ。これをどうにかしたかった。

本当はAWS CLIでやればよかったんですが、ID管理をどうするのか考えるのめんどくさくなってきて。(※AWS CLIで起動をするためにはインスタンスID(i-xxxxxxx)を渡す必要がある)

じゃあもういっそ、ID管理してくれるツール作ってみようかなーと思ったというのが経緯になります。

使い方

セットアップ

1. まず設定ファイルを作成します(←ここ自動的に設定してくれるようにしようと考え中)

〜/.pyc2rcファイルを作成。rcファイルなのにyaml記法で設定値を書き込みます。

2. AWSのAPIが叩けるように環境を整えます。

説明めんどいので端折りますが、環境変数にキーとシークレットをセットするか、aws configureで値をセットするか。

まあなんかこの辺参考に → AWS CLI の設定

3. pyc2をインストールします。

ここで後出しの情報ですが、今回pyc2を作ったのは単純に不便さの解消というのもありますが、一番の理由は「Python使ってCLIツール作ってみたかったから」。

なので、pyc2はpip使ってインストールするとCLIツールとして動くようにしてあります。

というわけでgithubからpipインストール。

これで、pyc2が使えるようになりました。

コマンド例

管理しているインスタンス一覧を取得したい場合

インスタンスを起動したい場合

インスタンスを停止したい場合

argparseの使い方に慣れておらず名前をoptionで渡すようになっているのがイケてないなあとは思っているので、その辺は解消予定。

追記:2018/3/25 こちら修正しました。–nameというオプション形式で渡すのではなく、普通にインスタンス名を渡せば起動・停止できるようになっています。

おわりに

まあ正直このツールが刺さる人はいないだろうなーと思ってますw。

だいたいこのブログ書きながら「Dash使って各インスタンス起動のスニペット登録しておけばいいのでは」とか「aws cli使って名前から起動できるようなワンライナー考えればいいのでは」とか楽な方法がたくさん頭に湧いてきてるくらいですしね。

車輪の再発明というか、車輪につけるカバーみたいなの作って楽しんでるような状態。いやそれいるのかみたいなw。

とはいえ途中書いたように、今回の目的は「Python使ってCLIツール作ってみる」ことだからこれでいいのです。過程でargparseの勉強したり、pipでインストールできるようにするためにどうしたらいいのか学んだり、色々できたので。

その辺も後々アウトプット予定です。まとまってないので、とりあえず作ったものを先に出したという感じ。

あとpyc2もせっかく作ったからには多少なり使えるツールにするために改修していく予定なので、もし使いたい奇特な方がいらっしゃったらフィードバックくれると嬉しいです。

Twitter | bsk00wisteria

ではではっ!

シェアする

  • このエントリーをはてなブックマークに追加

フォローする