Skip to content

Instantly share code, notes, and snippets.

@giseongeom
Last active April 7, 2016 08:28
Show Gist options
  • Select an option

  • Save giseongeom/e22a313fba41985430b1 to your computer and use it in GitHub Desktop.

Select an option

Save giseongeom/e22a313fba41985430b1 to your computer and use it in GitHub Desktop.
aws-select - AWS region, profile (AccessKeyId, SecretAccessKey) 정보를 환경변수로 설정하는 스크립트 (as bash function)
#!/usr/bin/env bash
function aws-select {
# Changelog
# 0.1 (2016.01.11): initial release
# 0.2 (2016.01.15)
# aws-credential.txt no longer needed. only $HOME/.aws/credentials required.
# hide parts of secret key displayed
local _func_version='0.3-build-20160407'
local _AWS_CRED_LISTFILE="$HOME/.aws/credentials"
local _AWS_RZ_SELECTION=""
local _AWS_PROFILE_SELECTION=""
local _CRED_PROFILE_NAME_LIST=""
_CRED_PROFILE_NAME_LIST=$(grep "\[.*\]" $_AWS_CRED_LISTFILE | tr '\r\n' ' ' | tr -d '\[' | tr -d '\]')
local _CRED_LIST=""
for _my_cred_username in $_CRED_PROFILE_NAME_LIST;
do
local _cred_list_tmp_access_key=$(grep -A1 -i $_my_cred_username $_AWS_CRED_LISTFILE | tail -1 | cut -f3 -d" " | tr -d '\r\n')
local _cred_list_tmp_secret_key=$(grep -A2 -i $_my_cred_username $_AWS_CRED_LISTFILE | tail -1 | cut -f3 -d" " | tr -d '\r\n')
_CRED_LIST+=" "$_my_cred_username,$_cred_list_tmp_access_key,$_cred_list_tmp_secret_key
done
local _REGION_LIST="
tokyo,ap-northeast-1
seoul,ap-northeast-2
n.virgina,us-east-1
n.california,us-west-1
oregon,us-west-2
singapore,ap-southeast-1
sydney,ap-southeast-2
saopaulo,sa-east-1
ireland,eu-west-1
frankfurt,eu-central-1
"
local _USAGE="
-------------------------------------------------------------------------------------
#
# Usage: $FUNCNAME [ -l | -p PROFILE | -r REGION ]
# Options:
# -l List the Region names and AWS Credential currently stored.
# -p PROFILE Set the AWS Default Credential, using the given AWS profile.
# -r REGION Set the AWS Default Region, using the given city name.
#
# Version: $_func_version
-------------------------------------------------------------------------------------
"
case "$1" in
"-l")
if [ -z "$2" ]; then
echo
for myregion in $_REGION_LIST;
do
local region_name="${myregion%,*}"
local region_code="${myregion#*,}"
echo " AWS Region: $region_name [${region_code}]"
done
echo
for mycred in $_CRED_LIST;
do
local profile_name="${mycred%%,*}"
local cred_access_key_id_tmp="${mycred%,*}"
local cred_access_key_id="${cred_access_key_id_tmp##*,}"
local cred_secret_key_tmp="${mycred##*,}"
local cred_secret_key='**********'${cred_secret_key_tmp:35:45}
echo " AWS Profile: $profile_name"
echo " AccessKeyId: $cred_access_key_id"
echo " SecretAccessKey: $cred_secret_key"
done
echo
else
echo
echo 'Please enter correct argument'
echo "$_USAGE"
fi
;;
"-r")
if [ -n "$2" ] && [ -z "$3" ]; then
# Convert case into lowercase
_AWS_RZ_SELECTION=$(echo "$2" | tr '[:upper:]' '[:lower:]')
for myregion in $_REGION_LIST;
do
local region_name="${myregion%,*}"
local region_code="${myregion#*,}"
if [ "$_AWS_RZ_SELECTION" == "$region_name" ]; then
local _AWS_RZ_SELECTION_STATUS=1
local _AWS_RZ_SELECTION_NAME="$region_name"
local _AWS_RZ_SELECTION_CODE="$region_code"
fi
done
#
if [ -z "$_AWS_RZ_SELECTION_STATUS" ]; then
echo
echo ---------------------------------------------------------------------
echo "$_AWS_RZ_SELECTION is incorrect. Please enter correct region name"
echo ---------------------------------------------------------------------
echo
fi
#
if [ -n "$_AWS_RZ_SELECTION_STATUS" ]; then
export AWS_DEFAULT_REGION_SELECTED="$_AWS_RZ_SELECTION_NAME"
export AWS_DEFAULT_REGION="$_AWS_RZ_SELECTION_CODE"
echo
echo ---------------------------------------------------------------------
echo "AWS_DEFAULT_REGION: $_AWS_RZ_SELECTION_NAME [$_AWS_RZ_SELECTION_CODE]"
echo ---------------------------------------------------------------------
echo
fi
elif [ -n "$3" ]; then
echo
echo 'Please enter correct argument'
echo "$_USAGE"
else
echo
echo '*REGION* is required'
echo "$_USAGE"
fi
;;
"-p")
if [ -n "$2" ] && [ -z "$3" ]; then
_AWS_PROFILE_SELECTION=$(echo "$2" | tr '[:upper:]' '[:lower:]')
for mycred in $_CRED_LIST;
do
local profile_name="${mycred%%,*}"
local cred_access_key_id_tmp="${mycred%,*}"
local cred_access_key_id="${cred_access_key_id_tmp##*,}"
local cred_secret_key="${mycred##*,}"
local cred_secret_key_tmp="${mycred##*,}"
local cred_secret_key_display='**********'${cred_secret_key_tmp:35:45}
if [ "$_AWS_PROFILE_SELECTION" == "$profile_name" ]; then
local _AWS_PROFILE_SELECTION_STATUS=1
local _AWS_PROFILE_SELECTION_ACCESS_KEY="$cred_access_key_id"
local _AWS_PROFILE_SELECTION_SECRET_KEY="$cred_secret_key"
fi
done
if [ -z "$_AWS_PROFILE_SELECTION_STATUS" ]; then
echo
echo ---------------------------------------------------------------------
echo "$_AWS_PROFILE_SELECTION is incorrect. Please enter correct profile name"
echo ---------------------------------------------------------------------
echo
fi
if [ -n "$_AWS_PROFILE_SELECTION_STATUS" ]; then
export AWS_SELECTED_PROFILE="$_AWS_PROFILE_SELECTION"
export AWS_ACCESS_KEY_ID="$_AWS_PROFILE_SELECTION_ACCESS_KEY"
export AWS_SECRET_ACCESS_KEY="$_AWS_PROFILE_SELECTION_SECRET_KEY"
echo
echo ---------------------------------------------------------------------
echo "AWS_ACCESS_KEY_ID: $_AWS_PROFILE_SELECTION_ACCESS_KEY [$_AWS_PROFILE_SELECTION]"
echo AWS_SECRET_ACCESS_KEY: \*\*\*\*\*\*\*\*\*\*${_AWS_PROFILE_SELECTION_SECRET_KEY: -5}
echo ---------------------------------------------------------------------
echo
fi
elif [ -n "$3" ]; then
echo
echo 'Please enter correct argument'
echo "$_USAGE"
else
echo
echo '*PROFILE* is required'
echo "$_USAGE"
fi
;;
*)
if [ -n "$AWS_DEFAULT_REGION" ]; then
if [ -n "$AWS_DEFAULT_REGION_SELECTED" ]; then
echo
echo "AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION_SELECTED [$AWS_DEFAULT_REGION]"
else
echo "AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION"
fi
fi
if [[ -n "$AWS_ACCESS_KEY_ID" ]] && [[ -n "$AWS_SECRET_ACCESS_KEY" ]]; then
# Generate secret key string for display usage
local cred_secret_key_display='**********'${AWS_SECRET_ACCESS_KEY:35:45}
if [ -n "$AWS_SELECTED_PROFILE" ]; then
echo "AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID [$AWS_SELECTED_PROFILE]"
echo "AWS_SECRET_ACCESS_KEY: $cred_secret_key_display"
else
echo "AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID"
echo "AWS_SECRET_ACCESS_KEY: $cred_secret_key_display"
fi
fi
echo "$_USAGE"
;;
esac
return 0
}
function aws-ami-delete {
# Changelog
# 0.1 (2016.01.13): initial release
local _USAGE="
-------------------------------------------------------------------------------------
#
# Usage: $FUNCNAME [ -d | -l ] AMI_ID (ami-xxxxxxxx)
# Options:
# -l List snapshot and detailed inforamtion about AMI_ID
# -d Delete AMI and related snapshot
#
-------------------------------------------------------------------------------------
"
case "$1" in
"-l")
if [[ -n "$AWS_DEFAULT_REGION" ]] && [[ -n "$AWS_ACCESS_KEY_ID" ]] && [[ -n "$AWS_SECRET_ACCESS_KEY" ]] && [[ -n "$2" ]] && [[ "$2" =~ ^[Aa][Mm][Ii]-* ]] && [[ -z "$3" ]]; then
local _myaws_ami_id="$2"
# list
aws ec2 describe-images --image-ids "$_myaws_ami_id" --query 'Images[].[Name,Platform,VirtualizationType,CreationDate,ImageId,BlockDeviceMappings[].Ebs[].SnapshotId]' --output table
else
echo 'Please enter correct argument'
echo
echo "$_USAGE"
fi
;;
"-d")
if [[ -n "$AWS_DEFAULT_REGION" ]] && [[ -n "$AWS_ACCESS_KEY_ID" ]] && [[ -n "$AWS_SECRET_ACCESS_KEY" ]] && [[ -n "$2" ]] && [[ "$2" =~ ^[Aa][Mm][Ii]-* ]] && [[ -z "$3" ]]; then
local _myaws_ami_id="$2"
local _myaws_ami_snapshot_id=$(aws ec2 describe-images --image-ids $_myaws_ami_id --query 'Images[].BlockDeviceMappings[].Ebs[].SnapshotId' --output text)
#
echo -n "Deleting ${_myaws_ami_id}..."
aws ec2 deregister-image --image-id $_myaws_ami_id
echo 'done'
#
echo -n "Deleting ${_myaws_ami_snapshot_id}..."
aws ec2 delete-snapshot --snapshot-id $_myaws_ami_snapshot_id
echo 'done'
else
echo 'Please enter correct argument'
echo
echo "$_USAGE"
fi
;;
*)
echo "$_USAGE"
;;
esac
return 0
}
@giseongeom
Copy link
Copy Markdown
Author

실행에 필요한 것들

  • AWS Credential: $HOME/.aws/credentials 파일이 있으면 됨.
  • 정상적으로 aws cli 사용하도록 profile 설정했다면 자동으로 생성됨 (기본값: default)

환경 설정

  • 로그인 할 때 function 정보를 읽어들일 수 있도록 .bashrc 또는 .bash_profile 에서 다음과 같이 설정
# aws-select()
if [ -f "${HOME}/.bash_awsrc" ]; then
  source "${HOME}/.bash_awsrc"
fi

실행

  • 옵션 없이 실행: 사용 예제만 표시
$ aws-select
-------------------------------------------------------------------------------------
#
#    Usage: aws-select [ -l | -p PROFILE | -r REGION ]
#    Options:
#         -l             List the Region names and AWS Credential currently stored.
#         -p PROFILE     Set the AWS Default Credential, using the given AWS profile.
#         -r REGION      Set the AWS Default Region, using the given city name.
#
#                                                         Version: 0.2-build-20160115
-------------------------------------------------------------------------------------
  • -l 옵션으로 실행하면 region 목록 및 $HOME.aws\credential 정보를 표시
$ aws-select -l
 AWS Region: tokyo [ap-northeast-1]
 AWS Region: seoul [ap-northeast-2]
 AWS Region: n.virgina [us-east-1]
 AWS Region: n.california [us-west-1]
 AWS Region: oregon [us-west-2]
 AWS Region: singapore [ap-southeast-1]
 AWS Region: sydney [ap-southeast-2]
 AWS Region: saopaulo [sa-east-1]
 AWS Region: ireland [eu-west-1]
 AWS Region: frankfurt [eu-central-1]

 AWS Profile: live01
     AccessKeyId: AKIAJVDFGN27SZYFIAOQ
     SecretAccessKey: cred1234
 AWS Profile: tech_support
     AccessKeyId: AKIAJW4ARYY5K6XKA3YA
     SecretAccessKey: cred5678
 AWS Profile: giseong.eom
     AccessKeyId: AKIAJOPHSAQZ32JS56HQ
     SecretAccessKey: cred90ab
  • Region 지정
$ aws-select -r seoul
---------------------------------------------------------------------
AWS_DEFAULT_REGION: seoul [ap-northeast-2]
---------------------------------------------------------------------

$ aws-select -r tokyo
---------------------------------------------------------------------
AWS_DEFAULT_REGION: tokyo [ap-northeast-1]
---------------------------------------------------------------------
  • Profile 지정
$ aws-select -p giseong.eom
---------------------------------------------------------------------
AWS_ACCESS_KEY_ID: AKIAJOPHSAQZ32JS56HQ [giseong.eom]
AWS_SECRET_ACCESS_KEY: cred90ab
---------------------------------------------------------------------

$ aws-select -p live01
---------------------------------------------------------------------
AWS_ACCESS_KEY_ID: AKIAJVDFGN27SZYFIAOQ [live01]
AWS_SECRET_ACCESS_KEY: cred1234
---------------------------------------------------------------------
  • 환경변수가 설정된 다음에 aws-select를 그냥 실행하면 앞서 지정한 값들의 정보를 표시함.
$ aws-select
AWS_DEFAULT_REGION: tokyo [ap-northeast-1]
AWS_ACCESS_KEY_ID: AKIAJVDFGN27SZYFIAOQ [live01]
AWS_SECRET_ACCESS_KEY: cred1234

-------------------------------------------------------------------------------------
#
#    Usage: aws-select [ -l | -p PROFILE | -r REGION ]
#    Options:
#         -l             List the Region names and AWS Credential currently stored.
#         -p PROFILE     Set the AWS Default Credential, using the given AWS profile.
#         -r REGION      Set the AWS Default Region, using the given city name.
#
#                                                         Version: 0.2-build-20160115
-------------------------------------------------------------------------------------

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment