こんにちは、技術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