EC2 インスタンス名の一部からインスタンスに SSH over Session Manager でサクッと接続する
背景
EC2 インスタンス名の一部からインスタンス情報を瞬時に出す に記載した記事は単純に インスタンスの情報を返すだけだったが、そのまま接続もしてしまいたいなということで、スクリプトを少しカスタマイズしました。
前提
- aws cli がインストール済みである
- EC2 をよくさわる
-
SSH over Session Manager を設定済みである
利用方法(準備)
以下のようなコマンドを実行します
$ cat <<'CONFIG' >> ~/.$(basename $SHELL)rc
function guess-connect() {
function help() {
cat <<EOT >&2
guess-ssm-connect <guess> <profile>
<guess> ec2 インスタンスの tag:Name の文字列の一部を指定します
<profile> aws-cli で指定するプロファイルがある場合は指定します (任意)
ex.
1. guess-ssm-connect melon prod
2. guess-ssm-connect panda
EOT
}
function sshconnect() {
id=$(echo $1 | jq -r .id | head -1)
ssh $id
}
if [ $# -eq 0 ]; then
echo 引数は1つ以上指定してください >&2
help
return 1;
fi
GUESS=$1
PROFILE=default
if [ $# -ge 2 ]; then
PROFILE="$2"
fi
declare -a instances
i=1
for instance in $(aws --profile $PROFILE \
ec2 describe-instances \
--filter "Name=tag:Name,Values=*$GUESS*" \
--query 'Reservations[].Instances[].{id:InstanceId,name:Tags[?Key==`Name`].Value|[0]}' \
| jq -Mc '. | sort_by(.name)| .[] | {"id":.id,"name":.name}')
do
instances[$i]=$instance
let i++
done
if [ $i -eq 1 ]; then
echo 接続するインスタンスはありません
return 1
fi
if [ $i -eq 2 ]; then
echo ${instances[1]} に接続します
sshconnect ${instances[1]}
return $?
fi
for ((i = 1; i <= ${#instances[@]}; i++)) {
echo "ID $i) $(echo ${instances[i]}| jq -r .name)"
}
if [[ "$SHELL" =~ /zsh$ ]]; then
read "REPLY?どのインスタンスに接続するか ID を入力してください(1 ~ $(expr $i - 1)): "
else
read -p "どのインスタンスに接続するか ID を入力してください(1 ~ $(expr $i - 1)): " REPLY
fi
echo "${instances[$REPLY]} に接続します"
sshconnect ${instances[$REPLY]}
}
CONFIG
# SHELL をリロード
$ exec $SHELL -l
これで準備ができました。
接続してみる
接続先がヒットしない場合
[urabe@mac48 ~]$ guess-connect hoge
接続するインスタンスはありません
[urabe@mac48 ~]$ echo $?
1
[urabe@mac48 ~]$
接続先が1つヒットした場合
[urabe@mac48 ~]$ guess-connect reda
{"id":"i-03*****","name":"redash"} に接続します
Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-1045-aws x86_64)
接続先が複数ヒットした場合
[urabe@mac48 ~]$ guess-connect web
ID 1) production-web
ID 2) stage-web
どのインスタンスに接続するか ID を入力してください(1 ~ 2): 1
{"id":"i-06*****","name":"production-web"} に接続します
Last login: Thu Sep 17 17:49:22 2020 from localhost
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
[urabe@mac48 ~]$ guess-connect hoge
接続するインスタンスはありません
[urabe@mac48 ~]$ echo $?
1
[urabe@mac48 ~]$
[urabe@mac48 ~]$ guess-connect reda
{"id":"i-03*****","name":"redash"} に接続します
Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-1045-aws x86_64)
[urabe@mac48 ~]$ guess-connect web
ID 1) production-web
ID 2) stage-web
どのインスタンスに接続するか ID を入力してください(1 ~ 2): 1
{"id":"i-06*****","name":"production-web"} に接続します
Last login: Thu Sep 17 17:49:22 2020 from localhost
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
Author And Source
この問題について(EC2 インスタンス名の一部からインスタンスに SSH over Session Manager でサクッと接続する), 我々は、より多くの情報をここで見つけました https://qiita.com/oz-urabe/items/2ad6a2a468f65991b388著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .