AWS CLIを使ってTagの値のみを取得する

AWS CLIを使って、以下のように割り当てられたインスタンスのTagの値のみ(今回はWordPress)を取得します。
f:id:kenjifunasaki:20130814155254p:plain
今回はAmazon Linuxを使うので、AWS CLIのインストール方法は割愛します。

# Amazon Linux 2013.03に入っているデフォルトのaws-cliを使いました。バージョンは以下です。

$ aws --version
aws-cli/0.9.3 Python/2.6.8 Linux/3.4.43-43.43.amzn1.x86_64

#バージョンが異なると、オプションの指定が異なる可能性があります。

まず以下の環境変数を設定します。

export AWS_DEFAULT_REGION=ap-northeast-1
export AWS_CREDENTIAL_FILE=/opt/aws/credential-file

credential-fileを作成します。

$ sudo cp /opt/aws/credential-file-path /opt/aws/credential-file
$ sudo vi /opt/aws/credential-file
AWSAccessKeyId=XXXXXXXXXXXXXXXXXX
AWSSecretKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

以下コマンドを実行して動作確認。

$ aws ec2 describe-instances
{
    "Reservations": [
        {
            "OwnerId": "000000000000",
            "ReservationId": "r-883ce98b",
            "Groups": [
(以下省略)

ちゃんと出力されることを確認。

$ aws ec2 describe-tags
{
    "ResponseMetadata": {
        "RequestId": "b98ff86b-24e7-4950-9161-c864e11c20a7"
    },
    "Tags": [
        {
            "ResourceType": "snapshot",
            "ResourceId": "snap-6d0d4c4d",
            "Key": "Name",
            "Value": "dev-urandom-1G"
        },
        {
            "ResourceType": "security-group",
            "ResourceId": "sg-958dff94",
            "Key": "aws:cloudformation:stack-name",
            "Value": "WordpressSite"
        },
(以下省略)

通常describe-tagsを実行すると、全部のTagが出てきてしまうので、絞り込みをします。

$ aws ec2 describe-tags --filter '{"name":"resource-id","values":"i-06672203"}'
{
    "ResponseMetadata": {
        "RequestId": "8c60bc2e-16bc-4882-8bfb-de5889eb84c3"
    },
    "Tags": [
        {
            "ResourceType": "instance",
            "ResourceId": "i-06672203",
            "Key": "Name",
            "Value": "WordPress"
        }
    ]
}

これをさらに絞り込むためにjqを使います。jqは入力内容を元に出力を絞り込むためのプログラムです。
まずは、jqをインストール。

$ sudo yum install jq

そして、上記出力をjqを使って絞り込みます。

$aws ec2 describe-tags --filter '{"name":"resource-id","values":"i-06672203"}' | jq '.Tags[] | .Value'
"WordPress"

以上で、WordPressの値のみを抽出することができました!

もちろん、Name以外のTagも取得できますので、いろいろ使いまわせそうですね。