前回やったコマンドラインによるEC2インスタンス作成では、tagが付きませんでした。

今回は、コマンドライン(CUI)を使用して、EC2インスタンスにtagを付けてみます。



・tagを付けるためのコマンドを探す
AmazonLinux では、AWSコマンドは /opt/aws/bin/ の配備されています。ここから tag というファイル名を持つファイルを探します。
$ ls -1 /opt/aws/bin/*tag*
/opt/aws/bin/as-create-or-update-tags
/opt/aws/bin/as-delete-tags
/opt/aws/bin/as-describe-tags
/opt/aws/bin/ec2addtag
/opt/aws/bin/ec2-create-tags
/opt/aws/bin/ec2-delete-tags
/opt/aws/bin/ec2-describe-tags
/opt/aws/bin/ec2dtag
/opt/aws/bin/ec2tag
/opt/aws/bin/rds-add-tag-to-resource
/opt/aws/bin/rds-list-tags-for-resource
/opt/aws/bin/rds-remove-tags-from-resource
ザっと眺める限りでは、ec2-describe-tags、ec2-create-tags、ec2-delete-tags が関連するコマンドのようですね。
⇒ AWS操作コマンドのマニュアルがどこにあるのか知らないので、いつもこんな感じで探してます……。



・tagの追加
現在起動しているECインスタンスのタグ一覧を取得してみます。
$ ec2-describe-tags
TAG     instance        i-3b0b4738      Name    Master AmazonLinux
コマンドライン操作に使用している AmazonLinux サーバのみなので、上記のような結果になっていますね。これに新しいtagを追加してみます。
$ ec2-create-tags \
     i-3b0b4738 \
     --tag DESCRIPTION='Command line server'
TAG     instance        i-3b0b4738      DESCRIPTION     Command line server

$ ec2-describe-tags
TAG     instance        i-3b0b4738      DESCRIPTION     Command line server
TAG     instance        i-3b0b4738      Name    Master AmazonLinux
バッチリ追加されたようです。



・特定のタグだけ探す
ec2-describe-tags には、--filtyer オプションを使用して特定のタグを持つものだけを検索する機能もあるようです。
$ ec2-describe-tags  i-3b0b4738 --filter key=name

$ ec2-describe-tags  i-3b0b4738 --filter key=Name
TAG     instance        i-3b0b4738      Name    Master AmazonLinux
$ ec2-describe-tags  i-3b0b4738 --filter value=master*

$ ec2-describe-tags  i-3b0b4738 --filter value=Master*
TAG     instance        i-3b0b4738      Name    Master AmazonLinux
挙動を見る限り、--filter オプションで検索する場合には、キー、バリュー両方とも 大文字小文字が区別されている(= Case Sensitive)様子…。


実際には、EC2インスタンスに与えたtagでサーバの挙動を変えることは無いのかもしれないけれど…。AWS  Management Console でインスタンスを区別するには便利なので、結構使うと思います。



・tagの削除
tagを削除するには ec2-delete-tags を使うのですが…
$ ec2-delete-tags i-3b0b4738 -tag DESCRIPTION
TAG     instance        i-3b0b4738      DESCRIPTION     Command line server

$ ec2-describe-tags
TAG     instance        i-3b0b4738      DESCRIPTION     Command line server
TAG     instance        i-3b0b4738      Name    Master AmazonLinux
なぜか tag を消せません。

EC2インスタンスは自分自身のタグを消去できないのかと思って、他のインスタンスから実行してみましたが やはり 消せませんでした。CUI プログラムのバージョンが古いのかと思って yum update をしてみましたが、やはり効果なし…

ん...

tag の value を空文字にして、それから消去したら良いのでは……と想像したので実行してみます。
$ ec2-create-tags  i-3b0b4738  --tag DESCRIPTION=
TAG     instance        i-3b0b4738      DESCRIPTION

$ ec2-describe-tags
TAG     instance        i-3b0b4738      DESCRIPTION
TAG     instance        i-3b0b4738      Name    Master AmazonLinux

$ ec2-delete-tags i-3b0b4738  --tag DESCRIPTION=
TAG     instance        i-3b0b4738      DESCRIPTION

$ ec2-describe-tags
TAG     instance        i-3b0b4738      Name    Master AmazonLinux

消えた!!!

ちなみに「ec2-delete-tags i-3b0b4738  --tag DESCRIPTION=」じゃなく「ec2-delete-tags i-3b0b4738  --tag DESCRIPTION」でも消せました。
つまり、「tagを消去する前にはいったん空文字列を設定し、それからtag自身を消去する」という手順ならOKらしい。バグっぽいな…まぁ、消せるから良いけど…。


これで EC2インスタンスに tag を自由に追加/削除できるようになりました。



今回はここまで。