[AWS] AWS S3 + CloudFront로 이미지 저장 및 비용 절감하는 법
안녕하세요! 그간 앱 출시를 한다고 업로드가 뜸했읍니다! 구글플레이콘솔 씨의 트롤링 덕에 3주를 뻘짓을 했었는데요? 우여곡절은 다 지나가고 IOS Android 동시 출시라는 보상을 얻었습니다만 출시하니까 이런저런 에러들 대응한다고 퇴근 이후 시간을 다 써버린🤯
암튼 근데 이제 좀 앱 안에 커뮤니티를 만들어보려고해요. 우선은 인증된 소수의 유저들에게 작성권한을 줘서 제 추구미는 인스타 거덩요? 인스타 느낌으로 사진이랑, 글.. 뭐 이런게 있는 커뮤니티 페이지를 만들어보려고 했는데요, 이미지를 얻따 저장하지에 대한 고민이 떠올랐고 찾아보다가 S3를 국룰적으로 많이 사용하더라고요?
그래서 S3 로 이미지 저장하고 거기서 가져오고 하는걸 해볼거고요? 근데 이거 매번 get 해오면 그게 다 비용이잖아요. 돈도 없는데. 그래서 CloudFront 를 쓰면 이미 가져온 이미지들에 대해선 캐싱이 되는거 가타효? 그래서 그걸로 한번 비용도 절약해보는걸 해보려고 합니다! 가보시죠
S3 버킷 생성
네 진행해주면 이름 작성해주고요!
퍼블릭 엑세스는 가능해야겠죵. 이정도 해주고 만들기를 눌러볼까용!
정책 추가하기
해당 버킷에 들어와서! 권한 > 버킷 정책 > 편집을 누르면
하나 추가해주시죠
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-app-images/*"
}
]
}
이런 느낌인거죠. {버킷명}/* 이렇게 해주겠습니다.
"Principal": {} → 빈 값이므로 AWS가 허용할 대상을 알 수 없음
"Principal" 필드에는 "* (모든 사용자)" 또는 특정 AWS 서비스 (CloudFront 등) 를 지정해야 함
라고 지피티가 알려주네요.
여기까지하면 S3 생성은 끝이구요, IAM에서 권한설정 잊지마셔야합니다. 저는 제 계정에 모든 권한 때려넣어서 별도 설정없이 갈게요!
CloudFront
배포 생성 > 원본 도메인에 방금 만든 S3를 설정해줄게요.
요거로 설정해주고요 바로 밑에 create new OAC 에서 그냥 디폴트 대로 생성해줍니다.
다시 버킷 > 권한에서
사진대로 저장해주고요
다시 cloudFont > 원본 > 생성한 원본 클릭 > 편집
복사해주시고 그래도 다시 버킷 정책 편집해줍니다.
이러고 이제 cloudFront에서 일반 > 배포 도메인 이름 확인하시고 그 주소 뒤에 이제 S3에서 객체에 폴더/이미지.png 하시면 가져와지더라고요. 근데 꼭 이미지 하나 넣고 하세요. 안하면 당연히 접근 거부 뜹니다~
끗!