web-dev-qa-db-ja.com

AWSで自動スケーリンググループ名をフェッチする

皆さん、私は実行中のインスタンスのタグを環境変数としてエクスポートするスクリプトを書いています。自動スケーリンググループの問題は、これらのタグがインスタンスで使用できないことです。

Api/aws cliコマンドを使用して、インスタンスがどの自動スケーリンググループに属するかをどのようにして知るのですか?スクリプトでインスタンスタグを使用する必要がありますが、使用できません。提案?

ありがとう!

8
CMag

Api/aws cliコマンドを使用して、インスタンスがどの自動スケーリンググループに属するかをどのようにして知るのですか?

autoscaling describe-auto-scaling-instancesコマンドとオプション--instance-ids、 このような:

aws autoscaling describe-auto-scaling-instances --instance-ids="i-zzxxccvv"

自動スケーリンググループの問題は、これらのタグがインスタンスで使用できないことです。 [...]スクリプトでインスタンスタグを使用する必要がありますが、使用できません。提案?

インスタンスが属する自動スケーリンググループのタグを取得したいので、これを解釈していますか?上記のコマンドから返されたAutoScalingGroupNameを使用すると、次のコマンドを使用できます。

aws autoscaling describe-tags --filters Name=auto-scaling-group,Values=name-of-the-auto-scaling-group-here
8
Bazze

インスタンスの自動スケーリンググループを見つける最も簡単な方法は、タグを調べることです。自動スケーリンググループ内のインスタンスには、グループ名を含むaws:autoscaling:groupNameという名前のタグがあります。次のコマンドを使用して、そのタグを取得できます。

aws ec2 describe-tags --filters "Name=resource-id,Values=${INSTANCE}" "Name=key,Values=aws:autoscaling:groupName"

次に、Bazzeの説明に従ってタグを取得できます。

これに対する代替ソリューションは、タグを自動スケーリンググループからインスタンスに伝播することです。

Cloudformationを使用してASGを作成する場合は、伝達する各タグに"PropagateAtLaunch": "true"を設定します( Aws Cloud Formation Docs を参照)。

グループを手動で作成する場合は、各タグの[新しいインスタンスにタグを付ける]ボックスをオンにしてください。

これを完了すると、タグがインスタンスにコピーされ、describe tagsコマンドを使用してインスタンスのタグを検査できます。

aws ec2 describe-tags --filters "Name=resource-id,Values=${INSTANCE}"

Aws cliツールの出力を処理するのにjq役立つと思います。たとえば、次のコマンドは、JSONからkey=valueリストを生成します。

aws ec2 describe-tags --filters "Name=resource-id,Values=${INSTANCE}" | jq -r '.Tags[] | @text "\(.Key)=\(.Value)"'
5
sihil

すべてをまとめるには:

INSTANCE_ID=`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id`
ASG_NAME=`aws ec2 describe-tags --filters "Name=resource-id,Values=$INSTANCE_ID"  --region us-east-2 | jq '.Tags[] | select(.["Key"] | contains("aws:autoscaling:groupName")) | .Value'`
ASG_NAME=`echo $ASG_NAME | tr -d '"'`

echo $ASG_NAMEと表示されるはずです。

1
ErnieAndBert