created at 2025-03-30
Table of contents
AWS 프로필이 dev, stage, 여러 prod, etc. 여러개가 있는데 매번 빠르게 옮겨다니기 너무 귀찮아서 작성. IAM 기본 credential default 바라보게만 만들고 이제 명령어 딸각하고 vpn 만 바꿔주면 자원 접근 가능.
이번에 aws 계정변경 스크립트를 alias 에 등록해놓고 쓸려고 여느때와 마찬가지로 gpt 에 던져서 작성했지만 해결못해줌. 그래서 혼자 이쁘게 작성해볼려했지만 쉘 스크립트에 대한 기본지식이 부족했음.
스크립트는 쓸 일이 너무 많은데 정작 베드락을 공부하지 않았던 것임. 이참에 맨날 쓰는 것들 정리!
이에 앞서 aws 계정변경 스크립트는 아래와 같음. 매우 단순하며 .aws/credentials 에 있는 default 프로파일을 미리 세팅해놓은 프로필로 변경해주는 스크립트.
계정 변경 스크립트 세팅
- aws_profile_change.sh
#!/bin/bash
if [ -z "$1" ]; then
echo "HELP: $0 <PROFILE_NAME>"
exit 1
fi
CREDENTIALS_FILE="$HOME/.aws/credentials"
AWS_PROFILE=$1
is_valid() {
local retval=0
if [[ ! -f "$CREDENTIALS_FILE" ]]; then
echo "$retval"
return 0
fi
if grep -qx "^\[$AWS_PROFILE\]$" "$CREDENTIALS_FILE"; then
retval=1
fi
echo "$retval"
}
get_aws_credentials() {
local retval=$( is_valid )
if [ "$retval" = "0" ]; then
echo "$retval"
return 0
fi
# Access Key 추출
local access_key=$(sed -n "/^\[$AWS_PROFILE\]/,/^\[/p" "$CREDENTIALS_FILE" | grep "aws_access_key_id" | awk -F'=' '{print $2}' | tr -d ' ')
# Secret Key 추출
local secret_key=$(sed -n "/^\[$AWS_PROFILE\]/,/^\[/p" "$CREDENTIALS_FILE" | grep "aws_secret_access_key" | awk -F'=' '{print $2}' | tr -d ' ')
echo "$access_key $secret_key"
}
update_aws_profile() {
local creds
creds=$(get_aws_credentials)
if [ "$creds" = "0" ]; then
echo "cannot find [$AWS_PROFILE] profile in $CREDENTIALS_FILE"
exit 1
else
local access_key=$(echo "$creds" | awk '{print $1}')
local secret_key=$(echo "$creds" | awk '{print $2}')
aws configure set aws_access_key_id "$access_key" --profile "default"
aws configure set aws_secret_access_key "$secret_key" --profile "default"
echo "[default] profile is updated by [$AWS_PROFILE] profile"
fi
}
update_aws_profile
- mac 이라서 zsh 의 기본 PATH 에 bin 패스 추가
mkdir -p ~/bin
cp ~/scripts/aws_profile_change.sh ~/bin/aws-profile
chmod +x ~/bin/aws-profile
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
- execute!
ghkdqhrbals@ghkdqhrbalsui-MacBookPro scripts % aws-profile prod
[default] 프로파일이 [prod] 프로파일로 업데이트되었습니다.
쉘 스크립트
함수
- 함수 내에서 사용하는 return 은 일반적인 return 이 아니라 exit code 라고 보면 됨. 0 ~ 255 사이 종료코드 중 어떤 것을 내보낼 지 선택하는 것임. 0은 정상종료코드.
- 여러가지 방법으로 부모스택에 리턴값(string)을 전달가능. 그 중 가장 자주쓰는건 echo 로 출력하는 방법.
- 객체 이런거 없기때문에 여러개 리턴할려면 echo 로 출력 후 awk $1 $2 로 받아서 사용
- $? : 바로 직전 명령어의 exit code 반환. 그래서 함수 호출 후 바로 $? 로 확인 가능.
- local 로 변수 중복을 막아주자!
IF 문
- ”” 값 true, “1” 들어가면 true 로 분기되어서 빈 값을 넣어줘야함.
- if 조건문에 [] 필수. (()) 산술연산 전용.
- if [ -z “$1” ] : $1 이 비어있으면 true