Profile picture

[Shell Script] 셸 스크립트로 개발 환경 한 번에 설정 - (AWS CLI,Credentials / Docker 로컬 개발환경)

JaehyoJJAng2023년 04월 27일

개요

조직에 새로운 사람이 들어오면 그 사람의 PC에 새롭게 개발 환경을 설정 해줘야 할 것이다.

1. 정리가 잘된 개발 환경 문서 파일을 넘겨주거나
2. 구두로 개발 환경 설정 방법을 설명해주거나

그러나 위 두 방법을 매번 입사자가 올 때마다 하기에는 매우 번거롭고 귀찮다.

이럴 때 개발 환경을 한 방에 설정해주는 셸 스크립트를 작성하면 위 고민이 사라진다.


목표

해당 포스트에서는 두 가지의 셸 스크립트를 작성할 것이다.

첫 번째 스크립트의 과정은 대강 아래와 같다

  1. PATH에 Working Directory(작업 경로) 추가.
  2. AWS CLI, AWS EB(ElasticBeanstalk) CLI 설치.
  3. AWS Credential 추가

두 번째 스크립트의 과정은 대강 아래와 같다.

  1. 로컬 환경에서 Docker에 웹서버(Python FastAPI)올리기

위 두 셸 스크립트로 얻는 이점은

첫 번째 셸 스크립트 실행 한 번으로 AWS 기반의 개발 환경이 자동으로 맞춰지고
두 번째 셸 스크립트 실행 한 번으로 로컬 환경에서 바로 개발 가능한 환경이 만들어진다는 것이다.

💡 Tips
참고로 해당 포스트에서는 셸 스크립트 문법에 대해 다루지 않는다.
셸 스크립트에 대해서 더 자세히 알고싶다면 아래 글을 참고하자.
<셸 스크립트 문법 - WTT Devlog>


사전 준비

첫 번째 셸 스크립트의 AWS Credential 인증 과정에서 AWS IAM 유저의 Access Key가 필요하니 미리 발급 받아보자.


1. AWS 로그인 후 IAM 서비스로 이동
image


2. 직접 정책 연결 - AdminstratorAccess 연결 (테스트용이므로 해당 권한 연결)
image


3. 유저 생성 후 Access Key 발급 (.csv 파일로 원하는 경로에 저장)
image
image
image


1. 셸 스크립트 (1)

1-1. 사전 준비

먼저 프로젝트 폴더를 생성하고, 내부에 디렉토리 구조를 만들어보자.

$ mkdir -p ~/setup/01_aws_setup
$ cd ~/setup/01_aws_setup

$ mkdir ./utilities
$ cd ./utilities

$ mkdir ./{bin,tmp}
$ cd ../

$ mkdir webserver

만들어진 폴더 구조는 아래와 같다.

$ tree -L 2 .
.
├── utilities
│   ├── bin
│   └── tmp
└── webserver

4 directories, 0 files

1-2. 스크립트 작성


1-3. 파일 권한 수정

해당 셸 스크립트를 실행 가능한 상태로 만들어주자.

$ chmod 700 /home/jaehyo/setup/01_aws_setup/utilities/bin/setup.sh

1-4. 스크립트 실행

$ bash /home/jaehyo/setup/01_aws_setup/utilities/bin/setup.sh

쭉 실행 되다가 마지막에 AWS IAM Access 패스워드를 입력하면 ..
image
끝이난다! (Done !)


그리고 마지막으로 ~/.aws/credentials 파일을 확인해보면 ..

$ cat ~/.aws/credentials
[default]
aws_access_key=AKIXXXXX
aws_secret_access_key=nXyXXXXX

위와 같이 파일이 잘 생성되었다!


2. 셸 스크립트 (2)

두 번째 셸 스크립트 작성 전 준비해야 할 것이 있다.
도커가 필요하기 때문에 도커를 설치해주도록 하자.


2-1. 사전 준비

아래 포스트를 참고하여 도커를 설치하도록 하자.
[CentOS 7] 도커 설치하기 - WTT Devlog


2-2. 스크립트 작성

도커 허브에 이미 배포된 이미지를 사용할 것이므로 Dockerfile을 따로 작성할 필요는 없다.


$ vi /home/jaehyo/setup/01_aws_setup/utilities/bin/run_docker_local.sh
#!/usr/bin/bash

# 현재 경로에 있는 setup.sh source 불러오기
source ./setup.sh

# 이미지명 지정
IMAGE_NAME='nginx:latest'

# 현재 로컬 개발 컨테이너가 동작 중인지 확인
container_stat=$(docker ps -f name=nginx -q)
if [[ ${container_stat} ]]; then
  echo "이미 컨테이너가 동작 중입니다."
  echo "해당 컨테이너를 종료합니다"
  docker stop ${container_stat}
  docker rm ${container_stat}
fi

# 도커 이미지 pull
docker pull "${IMAGE_NAME}"

# 컨테이너 실행
docker run -d -it --name nginx -p 80:80 -v "${LJH_HOME}/webserver:/var/www/webserver "${IMAGE_NAME}"

setup.sh 스크립트를 source 함으로써 "${LJH_HOME}" 변수를 run_docker_local.sh 스크립트에서 불러올 수 있었음.


2-3. 스크립트 권한 수정

chmod 700 ./run_docker_local.sh

2-4. 스크립트 실행

$ bash ./run_docker_local.sh

실행 결과 생략 ..


Loading script...