AWS

[AWS] AWS CLI를 통해 S3 로 파일 업로드 하기

먹세 2021. 3. 24. 17:18

1. 사전작업 IAM에서 s3 접근권한 설정

2. AWS CLI(Command Line Interface) 설치 (Linux)

3. AWS CLI 환경설정

4. cli 명령어로 파일 업로드

 

 

1. 사전작업 IAM에서 s3 접근권한 설정

 

[AWS] S3 권한 설정 하기 (IAM)

AWS 콘솔 혹은 코드상에서 S3 버킷에 파일을 업로드/다운로드 하기 위해서는 S3 권한이 필요하다. AWS에서 S3를 사용하기 위한 권한설정을 알아보자. AWS Identity & Access Management (IAM) 에서 할 수 있다. 1

mosei.tistory.com

AmazonS3FullAccess권한을 설정

 

 

2. AWS CLI(Command Line Interface) 설치 (Linux)

aws --version

으로 AWS CLI 설치 여부 확인 후 설치가 되어있지 않다면 설치

 

관련 버전은 위 설명 참고

 

docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-cliv2-linux.html

 

Linux에서 AWS CLI 버전 2 설치, 업데이트 및 제거 - AWS Command Line Interface

결과에서 경고가 예상되지만 문제가 되지는 않습니다. 이 경고는 개인 PGP 키(보유한 경우)와 AWS CLI PGP 키 사이에 신뢰 체인이 없기 때문에 발생한 것입니다. 자세한 내용은 Web of trust를 참조하십

docs.aws.amazon.com

 

 

3. AWS CLI 환경설정

aws configure

AWS Access Key ID [None] : 자신의 Accecss Key

AWS Secret Access Key [None] : 자신의 Secret Key

Default region name [None] : 자신의 region

Default output format [None] : json (text도 가능)

 

이 설정이 끝나게 되면 파일형태로 아래 위치에 생성 된다.

~/.aws/config

~/.aws/credentials

 

 

4. cli 명령어로 파일 업로드

// 서버의 로그들을 s3의 버킷에 동기화
aws s3 sync ./storage/logs s3://s3domain.com/logs

// 서버의 특정파일을 s3의 버킷에 복사 (이름지정해서 복사가능)
aws s3 cp ./storage/logs/mylog.log s3://s3domain.com/logs/mylog-cp.log

// 현재날짜 넣어서 복사
aws s3 cp ./storage/logs/mylog.log s3://s3domain.com/logs/mylog-`date +%Y%m%d`.log

// 현재날짜 넣어서 복사 (위와 동일함)
aws s3 cp ./storage/logs/mylog.log s3://s3domain.com/logs/mylog-`date +%F`.log

자신의 s3버킷에서 파일들이 잘 들어와있는지 확인해본다.

 

 

5. Elastic Beanstalk 에서의 추가옵션

Elastic Beanstalk 에서도 동일하게 aws cli 명령을 사용할 수 있다.

하지만 동일한 aws-cli 버전(aws-cli 1.18.107 / Python/2.7.18)인데도 위에서 말한 EC2와는 다르게 옵션을 설정해야 정상동작이 되었다.

aws s3 cp storage/logs s3://s3domain.com/logs --recursive

위와같이 폴더 내에 있는 모든 파일을 업로드시에는 --recursive 옵션을 주어야 정상동작한다.

위 옵션을 뺐을때는 [Errno 21] Is a directory: 에러가 난다.

파일을 지정해서 업로드 할때는 --recursive 옵션을 안적어도 무방함.

 

 

6. Elastic Beanstalk 에서 Load Balancer 사용할 때

로드밸런서를 사용할 때는 머신이 여러대로 운영되는 경우이기 때문에,

머신마다 같은 로그이름으로 저장되고 있을 것이다.

이럴 경우, 로그를 s3로 업로드를 하게되면 같은이름일 경우 덮어쓰기가 되기때문에

이전에 저장되어있던 로그들이 사라지게 된다.

그래서 s3로 로그 저장시 머신 고유의 hostname을 포함해서 저장하게 되면 이름 중복을 방지할 수 있다.

// hostname 포함해서 파일명을 저장
aws s3 cp ./storage/logs/mylog.log s3://s3domain.com/logs/mylog-$(hostname -s)-`date +%F`.log

 

 

 

 

 

반응형