본문 바로가기
모바일 APP/Swift

S3 쉘스크립트 만들기

by 살길바라냐 2023. 4. 5.

이유 :


모바일 라이브러리를 CI/CD를 구축하는 과정에서 

unityframework.framework를 S3에서 다운로드 받고 
unityframework.framework를 감싼 회사 framework를

압축후 S3에 업로드 해야하는 업무가 주어졌다. 

차후에 어떤 CI/CD Tool를 정해지지 않는 사항에서
즉각적으로 적용할수 있고, 


다른 개발자도 손쉽게 사용 할수 있는 방법을
강구 하던중 쉘스크립트 제작을 선택하게 되었다. 

 

제작 과정 :

 

  • 1 차 시도 

curl 명령을 사용해서 요청하기

 

S3 버킷 정책이 public일 경우
upload, download 문제가 없었지만

사용자별로 

읽기, 쓰기, 삭제 권한을 부여 해서 
관리할 경우 aws4-hmac-sha256 형식을 맞춰야 했고

공식문서에도 curl 관련된 명확한 방법이
명시 되어 있지 않고

curl -s https://$1.s3.amazonaws.com/$2 \
  -X $HTTP_METHOD \
  -H "Authorization: AWS4-HMAC-SHA256 \
      Credential=$ACCESS_KEY_ID/$DATE/$REGION/$AWS_SERVICE/aws4_request, \
      SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-security-token, \
      Signature=$SIGNATURE" \
  -H "x-amz-content-sha256: $EMPTY_STRING_HASH" \
  -H "x-amz-date: $DATE_AND_TIME" \
  -T "$OUTPUT"
  -H "x-amz-date: $DATE_AND_TIME" \
  -H "x-amz-security-token: $SESSION_TOKEN" \
  -o "$OUTPUT"

 

그래서 다른 방법을 찾던중 aws cli를 사용하기로 결정했다. 

 

  • 2차시도 

aws cli 설치하여 사용하기 

 

Homebrew를 사용하여 설치

$ brew install awscli

$ which aws
/usr/local/bin/aws

$ aws --version
aws-cli/2.0.26 Python/3.8.3 Darwin/19.0.0 botocore/2.0.0dev30

 

AWS IAM에서

개인 Access Key Id와 Secret Access Key
설정 하고 복사하자

 

aws configure 입력하여 아까 복사한
Access Key Id와 Secret Access Key를 넣어 준다. 

 

저장된 credentials 파일은
리눅스, macOS는 ~/.aws/

Windows는  C:\Users\USERNAME\.aws\에 있다.

 

 

[AWS] 📚 AWS CLI 설치 & 등록 방법 - 쉽고 빠르게 설명

AWS CLI (Command Line) AWS Command Line Interface는 쉘 커맨드를 사용하여 AWS 서비스와 상호 작용할 수 있는 도구이다. 우리가 브라우저로 아마존 웹 서비스 홈페이지(콘솔 홈)에 가서 서비스를 이용한 것

inpa.tistory.com

[참조]

 

 

아래 스크립트를 실행하면
S3파일을 업로드 및 다운로드 된다.

 

#!/bin/bash

# 사용 방법
# ./s3Download.sh {버킷 내부 디렉토리 명}
# ./s3Download.sh 0.0.1

if which aws >/dev/null ; then # which 명령으로 aws 명령이 가능한지 확인한다. 
	aws s3 sync s3://{버킷이름}/$1/ . # 만약 aws 있다면 현재 경로에 버킷에 저장된 파일을 다운 받는다. 
else
	echo "aws cli 가 설치되어 있지 않습니다. 설치를 먼저 해주세요" # 만약 aws 없다면 스크립트를 종료한다. 
  exit 1
fi

 

 

#!/bin/bash

# 사용 방법
# ./s3Upload.sh {압축파일을 저장할 경로} {버킷내 특정 디렉토리 =버전}
# ./s3Upload.sh ./ 0.0.1

compress() { # .tar.gz압축 하는 함수
  dir=$1
  target=$2
  echo "Compressing $target"
  tar -zcvf $dir/$target.tar.gz $target
  echo "Compressing $target done"
}

uploadToS3() { # s3 업로드 하는 함수
  if [ ! -e $1 ]; then 
        echo 업로드할 압축 파일이 존재 하지 않숩니다 
        exit 1
  else
  echo "Uploading $1 to $2"
  aws s3 cp $1 s3://{버킷 이름}/$2/
  echo "Uploading $1 to $2 done"
  fi
}

if ! which aws >/dev/null; then # aws 설치 여부 확인
	echo "aws cli 가 설치되어 있지 않습니다. 설치를 먼저 해주세요"
  exit 1
fi

if [ -z $1 ] && [ -z $2 ]; then # {압축파일을 저장할 경로} {버킷내 특정 디렉토리 =버전} 입력 여부 확인
        echo 압축파일을 저장할 경로와 버전을 입력해주세요.
        exit 1
  else 
  if  [ ! -d  {디렉토리명} ]; then # 지정한 {디렉토리명} 해당 위치에 존재하는지 확인
        echo {디렉토리명}가 존재 하지 않습니다.
        exit 1
    else 
    compress $1 {디렉토리명}
    uploadToS3 $1/{디렉토리명}.tar.gz $2
  fi
fi

 

 

Tip:

 

 

[Shell Script] 리눅스 쉘(Shell) 스크립트

1. 쉘(Shell)스크립트란 ? 쉘을 통하여 프로그램을 만든 것DOS의 Batch 파일 작성과 비슷하지만 더 막강한 기능들을 가지고 있음기존의 명령어들을 이용하여 만들어지는 스크립트 파일의 문법은 다

www.dreamy.pe.kr

[참조]

728x90
반응형

'모바일 APP > Swift' 카테고리의 다른 글

Objective C Enum을 -> Swift에서 사용하기  (0) 2023.06.26
Objective c 네트워크 통신  (0) 2023.05.25
Xcode 구조  (0) 2021.05.31
IOS 개발 조건  (0) 2021.05.31