AWS CLIでEBSボリュームにタグ付けする

記事タイトルとURLをコピーする

こんにちは、技術3課の城です。
3月で期が変わりまして、技術4課⇒技術3課に異動となりました。

さて、以前に当社渡辺がということで下記紹介してますが、AWS CLIでも簡単にやれますよ、というところをお見せしたいと思います。
EBSにタグをつけるスクリプトを作った

渡辺のものとは若干趣向を変えて、NameタグからEBSのボリュームIDを取得、タグ付けをする、といった内容をご紹介します。
具体例としてEC2にアタッチされた2つのEBSボリュームのタグ設定について、やってみたいと思います。

環境

実行環境はWindows10端末のWSLで、詳細は下記です。

$ cat /etc/issue | head -1
Ubuntu 16.04.3 LTS \n \l

$ bash --version -v | head -1
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)

$ aws --version
aws-cli/1.16.101 Python/3.5.2 Linux/4.4.0-17763-Microsoft botocore/1.12.91

変数の設定

利用するユーザープロファイル、リージョンを指定します。
ユーザープロファイルについてm詳細はこちらのブログにて説明しています。

export AWS_DEFAULT_PROFILE="dev-admin"
export AWS_DEFAULT_REGION="ap-northeast-1"

変数の設定(Nameタグの値)

対象のNameタグの値を変数に設定します。

TAG_NAME="TEST-20190304"

変数の設定(EBSに設定するタグの値)

EBSに設定するタグの値を変数に設定します。

TAG_APPLICATION="WEB"
TAG_OWNER="JO"
TAG_STAGE="Production"

VolumeIDの取得

対象となるEBSのVolumeIDを取得します。

EC2_VOLUME_IDS=$( \
  aws ec2 describe-instances \
    --filter "Name=tag:Name,Values=${TAG_NAME}" \
    --query 'Reservations[].Instances[].BlockDeviceMappings[].Ebs[].VolumeId' \
    --output text \
) \
&& echo ${EC2_VOLUME_IDS}

結果(例)

vol-0b43716d783e44288 vol-09947341dba029cb3

事前確認

事前にタグが設定されていないことを確認します。

aws ec2 describe-volumes \
  --volume-ids ${EC2_VOLUME_IDS}

結果(例)

{
    "Volumes": [
        {
            "CreateTime": "2019-03-03T07:53:23.807Z",
            "Iops": 150,
            "SnapshotId": "snap-0490dd2cb58cf07c6",
            "State": "in-use",
            "VolumeType": "gp2",
            "Size": 50,
            "VolumeId": "vol-0b43716d783e44288",
            "AvailabilityZone": "ap-northeast-1a",
            "Attachments": [
                {
                    "AttachTime": "2019-03-03T07:53:23.000Z",
                    "InstanceId": "i-00ed48e6ebad270e9",
                    "Device": "/dev/sda1",
                    "DeleteOnTermination": true,
                    "State": "attached",
                    "VolumeId": "vol-0b43716d783e44288"
                }
            ],
            "Encrypted": false
        },
        {
            "CreateTime": "2019-03-03T07:53:23.923Z",
            "Iops": 100,
            "SnapshotId": "",
            "State": "in-use",
            "VolumeType": "gp2",
            "Size": 1,
            "VolumeId": "vol-09947341dba029cb3",
            "AvailabilityZone": "ap-northeast-1a",
            "Attachments": [
                {
                    "AttachTime": "2019-03-03T07:53:23.000Z",
                    "InstanceId": "i-00ed48e6ebad270e9",
                    "Device": "xvdf",
                    "DeleteOnTermination": true,
                    "State": "attached",
                    "VolumeId": "vol-09947341dba029cb3"
                }
            ],
            "Encrypted": false
        }
    ]
}

タグの設定

対象の全EBSにタグを設定します。

aws ec2 create-tags \
  --resources ${EC2_VOLUME_IDS} \
  --tags \
    Key=Name,Value=${TAG_NAME} \
    Key=Application,Value=${TAG_APPLICATION} \
    Key=Owner,Value=${TAG_OWNER} \
    Key=Stage,Value=${TAG_STAGE}

結果

返り値なし

事後確認

タグが設定されたことを確認します。

aws ec2 describe-volumes \
  --volume-ids ${EC2_VOLUME_IDS}

結果(例)

{
    "Volumes": [
        {
            "CreateTime": "2019-03-03T07:53:23.807Z",
            "Encrypted": false,
            "Attachments": [
                {
                    "InstanceId": "i-00ed48e6ebad270e9",
                    "State": "attached",
                    "Device": "/dev/sda1",
                    "VolumeId": "vol-0b43716d783e44288",
                    "AttachTime": "2019-03-03T07:53:23.000Z",
                    "DeleteOnTermination": true
                }
            ],
            "Size": 50,
            "SnapshotId": "snap-0490dd2cb58cf07c6",
            "VolumeId": "vol-0b43716d783e44288",
            "Tags": [
                {
                    "Value": "JO",
                    "Key": "Owner"
                },
                {
                    "Value": "Production",
                    "Key": "Stage"
                },
                {
                    "Value": "TEST-20190304",
                    "Key": "Name"
                },
                {
                    "Value": "WEB",
                    "Key": "Application"
                }
            ],
            "VolumeType": "gp2",
            "Iops": 150,
            "AvailabilityZone": "ap-northeast-1a",
            "State": "in-use"
        },
        {
            "CreateTime": "2019-03-03T07:53:23.923Z",
            "Encrypted": false,
            "Attachments": [
                {
                    "InstanceId": "i-00ed48e6ebad270e9",
                    "State": "attached",
                    "Device": "xvdf",
                    "VolumeId": "vol-09947341dba029cb3",
                    "AttachTime": "2019-03-03T07:53:23.000Z",
                    "DeleteOnTermination": true
                }
            ],
            "Size": 1,
            "SnapshotId": "",
            "VolumeId": "vol-09947341dba029cb3",
            "Tags": [
                {
                    "Value": "Production",
                    "Key": "Stage"
                },
                {
                    "Value": "WEB",
                    "Key": "Application"
                },
                {
                    "Value": "TEST-20190304",
                    "Key": "Name"
                },
                {
                    "Value": "JO",
                    "Key": "Owner"
                }
            ],
            "VolumeType": "gp2",
            "Iops": 100,
            "AvailabilityZone": "ap-northeast-1a",
            "State": "in-use"
        }
    ]
}

タグが設定されたことを確認できました。

最後に

今回はEBSボリュームのタグをAWS CLIにて設定する方法について、ご紹介しました。
AWS CLIはマネジメントコンソールよりも手順化しやすく、一括で設定することには秀でているかと思います。
もし、マネジメントコンソールでポチポチ手作業をしているような作業があれば、AWS CLIの利用を検討してみてはいかがでしょうか。

どなたかの助けになれば幸いです。

城 航太 (記事一覧)

サイトリライアビリティエンジニアリング部・CSM課・課長

AWSへの移行、AWSアカウントセキュリティ、ネットワーク広く浅くといった感じです。最近はAmazon WorkSpacesやAmazon AppStream2.0が好きです。APN Ambassador 2019,2020