Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Table of contents

  1. 계정 변경 스크립트 세팅
  2. 쉘 스크립트
    1. 함수
    2. IF 문

저는 dev, stage, prod 등 다양한 AWS 프로필과 여러 클러스터를 운영하고 있습니다. 하지만 대부분의 도구(jdbc URL, AWS CLI 등)는 기본적으로 default 프로필만 참조하기 때문에, 매번 원하는 프로필을 사용하려면 –profile 옵션을 반복해서 지정해야 합니다. 그래서 상황에 따라 ~/.aws/credentials 파일의 default 프로필을 수동으로 변경해가며 사용하고 있습니다.

이것도 너무 귀찮아서 default 프로필 변경해주는 딸깍버튼을 xbar 와 sh 로 만들었습니다. 추가로 aws 프로필 변경뿐만 아니라 git 프로필 변경도 만들어서 회사계정/개인계정 git ssh global rsa key 변경을 alias 에 넣어 sh 로 호출하도록 설정했고 한술 더 떠서 자주 치는 피아노 pdf 악보 버튼도 만들었습니다.

a

계정 변경 스크립트 세팅

  1. 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

  1. 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
  1. execute!
ghkdqhrbals@ghkdqhrbalsui-MacBookPro scripts % aws-profile prod
[default] 프로파일이 [prod] 프로파일로 업데이트되었습니다.

쉘 스크립트

함수

  • 함수 내에서 사용하는 return 은 일반적인 return 이 아니라 exit code 라고 보면 됨. 0 ~ 255 사이 종료코드 중 어떤 것을 내보낼 지 선택하는 것임. 0은 정상종료코드.
  • 여러가지 방법으로 부모스택에 리턴값(string)을 전달가능. 그 중 가장 자주쓰는건 echo 로 출력하는 방법.
    1. 객체 이런거 없기때문에 여러개 리턴할려면 echo 로 출력 후 awk $1 $2 로 받아서 사용
    2. $? : 바로 직전 명령어의 exit code 반환. 그래서 함수 호출 후 바로 $? 로 확인 가능.
  • local 로 변수 중복을 막아주자!

IF 문

  • ”” 값 true, “1” 들어가면 true 로 분기되어서 빈 값을 넣어줘야함.
  • if 조건문에 [] 필수. (()) 산술연산 전용.
  • if [ -z “$1” ] : $1 이 비어있으면 true