- オリビアを聴きながら
- AMIを管理する時の個人的な課題
- ということで amiCtrl を作ってみた
— Be Together(導入)
— ヘルプ
— AMI 作成
— AMI を確認
— AMI を削除 - 終わり
— Describe Image して Snapshot の ID が取れることを知らなかったので…
— gox を初めて使った
— ghr も初めて使った
— 以上
オリビアを聴きながら
リリースした。
github.com
AMI を管理する時の個人的な課題
- AMI に紐付いた Snapshot を忘れてしまう(特に AMI を削除する場合)
- マネジメントコンソールからの作成が面倒でしかも CLI がサクッと出てこない
ということで amiCtrl を作ってみた
Be Together(導入)
wget とかでバイナリを取得する。
wget https://github.com/inokappa/amiCtrl/releases/download/v0.0.1/amiCtrl_darwin_amd64 \ -O ${HOME}/bin/amiCtrl chmod 755 ${HOME}/bin/amiCtrl
ヘルプ
$ ${HOME}/bin/amiCtrl -h Usage of /path/to/bin/amiCtrl: -ami string AMI ID を指定. -create タグをインスタンスに付与. -delete タグをインスタンスから削除. -describe タグを詳細を確認. -endpoint string AWS API のエンドポイントを指定. -instance string Instance ID を指定. -name string AMI Name を指定. -noreboot No Reboot オプションを指定. (default true) -profile string Profile 名を指定. -region string Region 名を指定. (default "ap-northeast-1")
AMI 作成
./amiCtrl -instance=i-xxxxxxxxxxxxxxxxx -name=suzuki-ami-desu -create
以下のように出力される。
+-----------------+--------------+--------------------------------+ | AMI NAME | AMI ID | SNAPSHOT ID | +-----------------+--------------+--------------------------------+ | suzuki-ami-desu | ami-1234567x | snap-123456789a1234567 | | | | snap-123456789b1234567 | +-----------------+--------------+--------------------------------+
AMI を確認
./amiCtrl -instance=i-xxxxxxxxxxxxxxxxx -ami=ami-12345678
以下のように出力されるので、悩みどころだった AMI と Snapshot の関連付けについてもいい感じで確認出来る(個人的に)。
+-----------------+--------------+--------------------------------+ | AMI NAME | AMI ID | SNAPSHOT ID | +-----------------+--------------+--------------------------------+ | suzuki-ami-desu | ami-1234567x | snap-123456789a1234567 | | | | snap-123456789b1234567 | +-----------------+--------------+--------------------------------+
AMI に関連した SNAPSHOT ID まで確認することが出来る。
AMI を削除
./amiCtrl -instance=i-xxxxxxxxxxxxxxxxx -ami=ami-12345678 -delete
以下のように出力される。
+-----------------+--------------+--------------------------------+ | AMI NAME | AMI ID | SNAPSHOT ID | +-----------------+--------------+--------------------------------+ | suzuki-ami-desu | ami-1234567x | snap-123456789a1234567 | | | | snap-123456789b1234567 | +-----------------+--------------+--------------------------------+ 上記の AMI を削除しますか?(y/n): y AMI を削除します... AMI を削除しました.
終わり
Describe Image して Snapshot の ID が取れることを知らなかったので…
今まで全く知らなかったこと。(知ったかぶりしていたこと。)
Describe Image の内容に Snapshot ID が含まれていたこと。
{ "Images": [ { ... "BlockDeviceMappings": [ { "DeviceName": "/dev/sda1", "Ebs": { "DeleteOnTermination": true, "SnapshotId": "snap-1234567890abcdef0", "VolumeSize": 8, "VolumeType": "standard" } } ], ... } ] }
知らなかったので、AMI と Snapshot の関連付けを確認する為に、以下のように Describe Snapshot の Description に含まれる AMI ID を利用していた。
{ "Snapshots": [ { "Description": "Created by CreateImage(i-xxxxxxxxxxxxxxxxx) for ami-1234567x from vol-xxxxxxxxxxxxxxxxx", ... } ] }
docs.aws.amazon.com
API ドキュメントを見ると、以下のようにレスポンスに Snapshot ID が含まれているので
<DescribeImagesResponse xmlns="http://ec2.amazonaws.com/doc/2016-11-15/">
<requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId>
<imagesSet>
<item>
...
<blockDeviceMapping>
<item>
<deviceName>/dev/sda1</deviceName>
<ebs>
<snapshotId>snap-1234567890abcdef0</snapshotId>
<volumeSize>15</volumeSize>
<deleteOnTermination>false</deleteOnTermination>
<volumeType>standard</volumeType>
</ebs>
</item>
</blockDeviceMapping>
...
</imagesSet>
</DescribeImagesResponse>
ずっと昔から Describe Image だけで Snapshot ID を確認することが出来ていたのかもしれない。
gox を初めて使った
github.com
以下のように実行するだけでクロスコンパイルがサクッと出来てしまって泣いた。
gox -output "pkg/amiCtrl_{{.OS}}_{{.Arch}}"
-output
を指定しない場合にはカレントディレクトリにバイナリが出力される。
$ gox -output "pkg/amiCtrl_{{.OS}}_{{.Arch}}" Number of parallel builds: 3 --> netbsd/arm: amiCtrl --> darwin/386: amiCtrl --> linux/arm: amiCtrl ... --> linux/386: amiCtrl --> darwin/amd64: amiCtrl --> linux/amd64: amiCtrl
ghr も初めて使った
github.com
バイナリを Github Release ページにアップロードしてみたかったので ghr を初めて利用した。
事前に GitHub Token を払い出して環境変数に定義するか、コマンドラインオプション(-t
)に設定する必要があるが、以下のように簡単に Release ページの作成からバイナリのアップロードを完了することが出来た。
ghr -u inokappa -r amiCtrl v0.0.1 ./pkg/
以下のように出力される。
$ ghr -u inokappa -r amiCtrl v0.0.1 ./pkg/ ==> Create a new release --> Uploading: amiCtrl_darwin_amd64 --> Uploading: amiCtrl_windows_amd64.exe --> Uploading: amiCtrl_freebsd_amd64 --> Uploading: amiCtrl_darwin_386 ...
以下のように Release ページ作成されている。
おお、お手軽過ぎる。
以上
メモでした。
「時東ぁみ」の代表的な楽曲は知らないので本文中には出てきていないが悪しからず。
元記事はこちら
「俺の郷 〜 尾崎亜美、鈴木亜美、時東ぁみもみんな一緒に EC2 AMI を作成、削除するツールを作ってリリースした 〜」