Skip to content

Instantly share code, notes, and snippets.

@eggbean
Last active January 24, 2024 00:47
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eggbean/345e28e2d7d878f2cce68f45eeb50a38 to your computer and use it in GitHub Desktop.
Save eggbean/345e28e2d7d878f2cce68f45eeb50a38 to your computer and use it in GitHub Desktop.
Script to install or update AWS CLI v2 on Linux/WSL (x86_64 and aarch64 supported). Can be used in ansible or bootstrap script.
#!/bin/bash
# AWS CLI v2 install/update script
# For v2 you either need to install manually
# or use a script like this
#
# For bash v5 >
#
# For auto-completion add `cli_auto_prompt = on` to config
# ..or add AWS_CLI_AUTO_PROMPT=on environment variable
# see: https://go.aws/3BiT8WJ
#
# For updates go to:
url='https://gist.github.com/eggbean/345e28e2d7d878f2cce68f45eeb50a38'
set -eo pipefail
fingerprint='FB5DB77FD5C118B80511ADA8A6310ACC4672475C'
expires=$(date -d 2024-07-26 +%s)
pubkey=$(cat <<'EOV'
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBF2Cr7UBEADJZHcgusOJl7ENSyumXh85z0TRV0xJorM2B/JL0kHOyigQluUG
ZMLhENaG0bYatdrKP+3H91lvK050pXwnO/R7fB/FSTouki4ciIx5OuLlnJZIxSzx
PqGl0mkxImLNbGWoi6Lto0LYxqHN2iQtzlwTVmq9733zd3XfcXrZ3+LblHAgEt5G
TfNxEKJ8soPLyWmwDH6HWCnjZ/aIQRBTIQ05uVeEoYxSh6wOai7ss/KveoSNBbYz
gbdzoqI2Y8cgH2nbfgp3DSasaLZEdCSsIsK1u05CinE7k2qZ7KgKAUIcT/cR/grk
C6VwsnDU0OUCideXcQ8WeHutqvgZH1JgKDbznoIzeQHJD238GEu+eKhRHcz8/jeG
94zkcgJOz3KbZGYMiTh277Fvj9zzvZsbMBCedV1BTg3TqgvdX4bdkhf5cH+7NtWO
lrFj6UwAsGukBTAOxC0l/dnSmZhJ7Z1KmEWilro/gOrjtOxqRQutlIqG22TaqoPG
fYVN+en3Zwbt97kcgZDwqbuykNt64oZWc4XKCa3mprEGC3IbJTBFqglXmZ7l9ywG
EEUJYOlb2XrSuPWml39beWdKM8kzr1OjnlOm6+lpTRCBfo0wa9F8YZRhHPAkwKkX
XDeOGpWRj4ohOx0d2GWkyV5xyN14p2tQOCdOODmz80yUTgRpPVQUtOEhXQARAQAB
tCFBV1MgQ0xJIFRlYW0gPGF3cy1jbGlAYW1hem9uLmNvbT6JAlQEEwEIAD4CGwMF
CwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQT7Xbd/1cEYuAURraimMQrMRnJHXAUC
ZMKcEgUJCSEf3QAKCRCmMQrMRnJHXCilD/4vior9J5tB+icri5WbDudS3ak/ve4q
XS6ZLm5S8l+CBxy5aLQUlyFhuaaEHDC11fG78OduxatzeHENASYVo3mmKNwrCBza
NJaeaWKLGQT0MKwBSP5aa3dva8P/4oUP9GsQn0uWoXwNDWfrMbNI8gn+jC/3MigW
vD3fu6zCOWWLITNv2SJoQlwILmb/uGfha68o4iTBOvcftVRuao6DyqF+CrHX/0j0
klEDQFMY9M4tsYT7X8NWfI8Vmc89nzpvL9fwda44WwpKIw1FBZP8S0sgDx2xDsxv
L8kM2GtOiH0cHqFO+V7xtTKZyloliDbJKhu80Kc+YC/TmozD8oeGU2rEFXfLegwS
zT9N+jB38+dqaP9pRDsi45iGqyA8yavVBabpL0IQ9jU6eIV+kmcjIjcun/Uo8SjJ
0xQAsm41rxPaKV6vJUn10wVNuhSkKk8mzNOlSZwu7Hua6rdcCaGeB8uJ44AP3QzW
BNnrjtoN6AlN0D2wFmfE/YL/rHPxU1XwPntubYB/t3rXFL7ENQOOQH0KVXgRCley
sHMglg46c+nQLRzVTshjDjmtzvh9rcV9RKRoPetEggzCoD89veDA9jPR2Kw6RYkS
XzYm2fEv16/HRNYt7hJzneFqRIjHW5qAgSs/bcaRWpAU/QQzzJPVKCQNr4y0weyg
B8HCtGjfod0p1A==
=gdMc
-----END PGP PUBLIC KEY BLOCK-----
EOV
)
# Check if expired
if (( EPOCHSECONDS > expires )); then
echo "PGP key expired - for script update go to:" >&2
echo "${url}" >&2
exit 1
fi
# Check for dependencies
deps=( curl gpg unzip )
unset bail
for i in "${deps[@]}"; do command -v "$i" >/dev/null 2>&1 || { bail="$?"; echo "$i" is not available; }; done
if [ "$bail" ]; then exit "$bail"; fi
# Check if root
[ "$(id -u)" -ne "0" ] && { echo "This script must be run as root" >&2; exit 1; }
# Check architecture
[ "$(arch)" = "aarch64" ] && arch='aarch64'
[ "$(arch)" = "x86_64" ] && arch='x86_64'
[ -z "${arch}" ] && { echo "CPU architecture not supported" >&2; exit 1; }
cd "${TMPDIR:-/tmp}"
curl -s "https://awscli.amazonaws.com/awscli-exe-linux-${arch}.zip" -o "awscliv2.zip"
gpg --list-keys ${fingerprint} >/dev/null 2>&1 || gpg --import <(echo "${pubkey}") >/dev/null 2>&1
curl -so awscliv2.sig https://awscli.amazonaws.com/awscli-exe-linux-${arch}.zip.sig
gpg --verify awscliv2.sig awscliv2.zip >/dev/null 2>&1
unzip -qo awscliv2.zip
if [ -L /usr/local/bin/aws ]; then
./aws/install --bin-dir /usr/local/bin --install-dir /usr/local/aws-cli --update
else
./aws/install --bin-dir /usr/local/bin --install-dir /usr/local/aws-cli
fi
rm -rf awscliv2.{zip,sig} aws/
aws --version
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment