AWS CLI, jq, xargs を使って利用可能な AWS リージョンに SSH キーを一括登録する

2 min read読了の目安(約1800字

aws ec2 describe-regions | jq --raw-output ".Regions[].RegionName" | xargs -n 1 ... という形で連携するのが便利

# 登録する SSH キーへのパス
PUBLIC_KEY_PATH=~/.ssh/id_rsa.pub

# 登録するキーペア名
KEY_NAME=mykeypair

# describe-regions で利用可能な AWS リージョンを取得
# jq で xargs に連携するために整形
# xargs で利用可能な各 AWS リージョンに import-key-pair を行う
#     xargs を使用しているのでマルチプロセスで動かすことも出来るものの echo を使って登録状況を確認したいので -P 1 を指定している
aws ec2 describe-regions | jq --raw-output ".Regions[].RegionName" | xargs -n 1 -I{} -P 1 sh -c "echo {}; aws --region {} ec2 import-key-pair --key-name $KEY_NAME --public-key-material fileb://$PUBLIC_KEY_PATH"

SSH キーの登録状況を確認

aws ec2 describe-regions | jq --raw-output ".Regions[].RegionName" | xargs -n 1 -I{} -P 1 sh -c "echo {}; aws --region {} ec2 describe-key-pairs"

SSH キーの削除

aws ec2 describe-regions | jq --raw-output ".Regions[].RegionName" | xargs -n 1 -I{} -P 1 sh -c "echo {}; aws --region {} ec2 delete-key-pair --key-name $KEY_NAME"

リファレンス

試した環境

% sw_vers
ProductName:    Mac OS X
ProductVersion: 10.15.7
BuildVersion:   19H114
% aws --version
aws-cli/2.1.6 Python/3.7.4 Darwin/19.6.0 exe/x86_64 prompt/off
% jq --version
jq-1.6