🦔
AWS CLI, jq, xargs を使って利用可能な AWS リージョンに SSH キーを一括登録する
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
Discussion