リリースした。
github.com
AMI を管理する時の個人的な課題
- AMI に紐付いた Snapshot を忘れてしまう(特に AMI を削除する場合)
- マネジメントコンソールからの作成が面倒でしかも CLI がサクッと出てこない
ということで amiCtrl を作ってみた
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 ページ作成されている。
おお、お手軽過ぎる。
以上
メモでした。
「時東ぁみ」の代表的な楽曲は知らないので本文中には出てきていないが悪しからず。