반응형
이유 :
모바일 라이브러리를 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\에 있다.
[참조]
아래 스크립트를 실행하면
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:
[참조]
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 |