こんにちは、技術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の利用を検討してみてはいかがでしょうか。
どなたかの助けになれば幸いです。
城 航太 (記事一覧)
営業部カスタマーサクセス課・課長
AWSへの移行、AWSアカウントセキュリティ、ネットワーク広く浅くといった感じです。最近はAmazon WorkSpacesやAmazon AppStream2.0が好きです。APN Ambassador 2019,2020