리눅스

AWS S3 : 이미지 파일 저장해보자!

류창 2022. 10. 20. 23:50
반응형

 

 

AWS EC2로 프로젝트 배포 와  AWS Rotue 53으로  도메인 설정을 완료했다.

 

 

그 다음으론  이미지 파일, 동영상 파일등등  일반 DB에서 저장할수없는 파일들을  따로 관리해주는 

AWS S3를 사용해보자

 

 

준비물: AWS CLI 설치

 

이유:  AWS s3와  AWS EC2 배포환경과  연결하려면  AccessKey와 SecretKey가 필요하기때문에, 

이 2개를 발급을 받야아한다!

 

 

그래서 2개의 키를 우선 받아보자

 

 

생성을하면 이렇게 키파일을 다운로드 받을수 있는데,

 

꼭 키 파일 다운로드 받으시고  절대 잘 관리를 하셔야한다  

 

이 키 파일이 노출되면은,  다른사람이 내 AWS S3를 멋대로 사용해서 요금폭탄을 맞을수가있다.

 

 

 

 

AWS EC2 에서  AWS CLI를 설치한다.

 

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html

 

최신 버전의 AWS CLI 설치 또는 업데이트 - AWS Command Line Interface

이전 버전에서 업데이트하는 경우 unzip 명령을 실행하면 기존 파일을 덮어쓸지 묻는 메시지가 표시됩니다. 스크립트 자동화와 같은 경우에 이러한 프롬프트를 건너뛰려면 unzip에 대한 -u 업데이

docs.aws.amazon.com

 

 

여기서 본인의 맞는 환경에서  AWS CLI를 설치하자. 

 

아 참고로,  AWS Linux 가상환경을 사용하시는분은 기본적으로 설치가 되어있어서 스킵해도 된다고 한다.

 

본인은 우분투를 설치하여 사용하기때문에, AWS CLI를 설치했다.

 

 

 

AWS CLI 설정

 

 

명령어  aws configure를  입력한다.

 

순서대로

1.  다운받은  AccessKey

2.  다운받은 SecretKey

3.  본인의 지역 : ap-northeast-2는 서울이다.

4.  데이터 타입:  거의 기본적으로 json 타입을 사용한다.

 

 

자신이 입력한 설정을 확인하려면  aws configure list 를 입력하자

 

 

 

AWS S3 생성하기

 

 

버킷 이름은 나만의 버킷 이름을 입력하고,

 

객체 소유권은  ACL 활성화됨을 클릭해주자. 

객체에 대한 액세스를  활성화를 해줘야,  사용자가 나의 버킷을통해 남이 올린 객체에 접근이 가능하다.  

 

The bucket does not allow ACLs (Service: Amazon S3; Status Code: 400; Error Code: AccessControlListNotSupported

<비활성화됨을 클릭하면 이런 오류가 뜰것이다.>

 

 

 

 남이 올린 이미지, 동영상파일의 액세스 차단 설정하는곳이다.

 

우선 S3를 테스트 사용이니 모든 퍼블릭 액세스를 허용을 하였다.

 

추후, 이 S3에 담긴 객체 파일들의 액세스 차단이 필요하다면  다시 여기와서 차단을 해줍시다.

 

 

 

버킷 권한 설정하기

 

 

버킷을 생성하고  권한을  설정해주셔야한다.

 

 

무슨 권한을 설정해주셔야하면...

 

 

버킷 정책에 들어와서  다음과같은 json 정책을 입력하자!

 

그래야지 , 버킷 권한이 제대로  Public으로 변경이된다.

 

{
    "Version": "2012-10-17",
    "Id": "Policy1577077078140",
    "Statement": [
        {
            "Sid": "Stmt1577076944244",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::{본인 버킷 이름}/*"
        }
    ]
}

 

 

 

----------------------------------------------------------------------------------------------------------

 

 

설정은 모두 끝났다. 

 

이제부터  Spring을 통하여,  AWS S3에 파일을 업로드하는 방법을 알아보겠다.

 

build.gradle 에서  다음과같은 코드를 추가한다.

 

AWS Cloud를 사용이 가능한 기능으로,  우리는 이걸 이용하여 AWS S3 버킷에 파일을 올릴것이다.

 

 

 

application.yml 설정이다.     accessKey 와  secretKey와  bucket이름,  region을 입력합시다.

 

Stack.auto : false 

  • Spring Cloud 실행 시, 서버 구성을 자동화하는 CloudFormation이 자동으로 실행되는데 이를 사용하지 않겠다는 설정입니다.
  • 이걸 설정해야 오류가 안뜹니다.

 

S3Service 설정하기

 

s3Client는 아마존S3를,

 

accessKey, secretKey, bucket, region은 전부 application.yml에서 가져온값이다.

 

setS3Client()를 통하여,  자격증명을 하고 사용합니다

 

upload():

s3Client.putObject()를 통하여  업로드를 진행한다.

.withCannedAcl()를 통하여 접근제어를 Public으로 설정했다.

 

return 값으로  s3Clent.getUrl()로,  AWS  S3에서 저장된 파일의 경로를 반환한다.

 

이 저장된 파일의 경로를   src경로로 html에 뿌려주면 그대로 사진이나온다~!

 

 

 

실제로,  upload() 기능을 사용하여 파일을 전송해보면 제대로 파일이 올라간다!

 

또한,  upload() 리턴값으로 받은  파일경로를   src 를통해 출력해보면 아주 잘 나온다

 

 

https://github.com/ajtwu1235/aws-s3

 

GitHub - ajtwu1235/aws-s3

Contribute to ajtwu1235/aws-s3 development by creating an account on GitHub.

github.com

전체코드는 여기서 확인 해보세요~!

 

코드중에  application.yml은 보안상 넣지않았습니다.  

반응형