Zazwyczaj ładuję tagi jako zmienne środowiskowe podczas uruchamiania, uruchamiając skrypt UserData. W zależności od instancji zmieniam parametry --query
i --filter
na wywołanie describe-instances
, ale poza tym skrypt pozostaje taki sam. UWAGA: Poniższy przykład nie obejmuje znacznika Name
i znaczników zawierających :
- zmień to zachowanie, aby odpowiadało Twoim potrzebom.
#!/bin/bash -v
apt-get update
apt-get -y install awscli
# add boot script which loads environment variables
cat > /etc/profile.d/export_instance_tags.sh << 'EndOfMessage'
# fetch instance info
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
INSTANCE_AZ=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
INSTANCE_REGION="`echo \"$INSTANCE_AZ\" | sed -e 's:\([0-9][0-9]*\)[a-z]*\$:\\1:'`"
# export instance tags
export_statement=$(aws ec2 describe-tags --region "$INSTANCE_REGION" --filters "Name=resource-id,Values=$INSTANCE_ID" --query 'Tags[?!contains(Key, `Name`) && !contains(Key, `:`)].[Key,Value]' --output text | sed -E 's/^([^\s\t]+)[\s\t]+([^\n]+)$/export \1="\2"/g')
eval $export_statement
# export instance info
export INSTANCE_ID
export INSTANCE_AZ
export INSTANCE_REGION
EndOfMessage
Biegnie describe-tags
notować wszystkie znaczniki, formatuje wyjście do sekwencji instrukcji eksportowych sed
następnie uruchamia wynik używając eval
Właśnie stworzyłem ulepszoną wersję rozwiązania przedstawionego powyżej na https://gist.github.com/marcellodesales/a890b8ca240403187269 –