名前のとおり。通常NameタグはGUIなどで入力していくが、AutoScalingのインスタンスなどの場合、増減を勝手にした場合にいちいちGUIで設定していくのはしんどい。
EC2のNameタグには、そのインスタンスがどのアベイラビリティーゾーンに属するのかを識別するために、ゾーン名(AとかCとか)を付与する場合が多い。そういうとき、ユーザーデータに以下シェルを設定しておくと自動で名前をつけてくれる。
前提条件
・今回の場合「SERVERNAME-AZNAME」というNAMEタグの命名規則としている。このとき、AZNAMEの部分を自動的に付与する。
・AmazonLinux2またはRHELインスタンスで対応可能。
bash(USER DATA)
#!/bin/bash
IID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
REG_ZONE=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone`
AZ=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | tail -c1`
variable=${REG_ZONE}
length=${#variable}
REG=${variable::length-1}
wait
aws --region ${REGION} ec2 create-tags \
--resources ${IID} --tags Key=Name,Value=SERVERNAME-${AZ}
メタデータ情報より、自身のインスタンスID、リージョンとゾーン情報を取得。
ゾーン情報とリージョンを分離して抽出。
そうしたらawsコマンドのcreate-tagsで、上記の情報をもとにNameタグを設定。
AutoScaling環境で利用すると便利。
追記 2023/3/16
IAMポリシー、IAMロールの設定が必要のため、追記しました。