0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

EC2インスタンスのNameタグをhostnameに(ローカルから)

Last updated at Posted at 2020-10-21

目的

EC2インスタンス自体にawscliをインストールせず、インスタンスのhostnameをNameタグの値にする

経緯

仕事上複数のインスタンスを扱うことがあるのですが、その際に今どのインスタンスにログインしているかがわからなくなります。
ネットにはインスタンスにログインしてNameタグを取得するためにawscliをインストールして...といった記事はありましたが、一つ一つにそのような作業をするのはめんどくさいですし無駄にパッケージを追加したくありません。
そこでローカルでNameタグを取得して、それをリモートのhostnameに適用する、というようなシェルスクリプトを書きました。

前提

awscli がローカルにインストール、設定されていること

スクリプト

set-hostname.sh
tag_name=`aws ec2 describe-instances \
            --query 'Reservations[].Instances[].{Name:Tags[?Key==\`Name\`].Value}' \
            --filter "Name=ip-address,Values=$1" \
            --profile プロファイル \
            | jq -r '.[0].Name[0]'`
echo $tag_name
ssh -i <秘密鍵へのパス> ec2-user@$1 "sh " <<-EOS
sudo hostnamectl set-hostname $tag_name
EOS
実行
set-hostname.sh <設定したいインスタンスのPublic IP>

説明

ほぼ見たままなので詳細は省きますが、ローカルの変数をリモートで使用するというところで少し詰まりました。参考欄のteratailで同じような質問をされている方がいたので興味があれば。

プロファイルや秘密鍵へのパス、ユーザー名などは引数にする。スクリプトの最後にsshコマンドを書いてそのままログインできるようにする。などして各々利便性を向上していただければと思います。
(自分は複数のAWS環境にアクセスする必要があるのでプロファイルを引数に取れるようにしています)

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?