[개인 프로젝트] AWS S3 도입 후 발생했던 오류 정리

Turtle·2024년 9월 10일
0

개인 프로젝트 기록

목록 보기
14/15

👉문제 상황

AWS S3 도입 후 발생했던 오류들

  1. Amazon S3 - 404 "NoSuchKey" 오류 문제
  2. Amazon S3 - 403 "AccessDenied" 오류 문제

캡처 이미지와 같이 설정을 해줬다.

정상적으로 S3에 이미지가 저장되는 것을 확인할 수 있다.

♻️Amazon S3 - 404 "NoSuchKey" 해결

  • 말 그대로 S3에 해당 이름으로 등록된 키가 없다는 오류를 말한다.
  • 해당 문제는 코드의 문제라기보다는 S3 버킷 내에서 지정한 파일 경로 혹은 파일 이름이 정확하지 않아 찾을 수 없는 경우가 거의 대부분이다.
cloud:
  aws:
    s3:
      bucket:
        url: [객체 제외한 URL]
      bucketName: [버킷명]
    credentials:
      access-key: [액세스 키]
      secret-key: [비밀 액세스 키]
    region:
      static: [리전]
    stack:
      auto: false
@Configuration
public class AwsS3Config {

	@Value("${cloud.aws.credentials.access-key}")
	private String accessKey;

	@Value("${cloud.aws.credentials.secret-key}")
	private String secretKey;

	@Value("${cloud.aws.region.static}")
	private String region;

	@Bean
	public AmazonS3Client amazonS3Client() {
		AWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
		return (AmazonS3Client) AmazonS3ClientBuilder
				.standard()
				.withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
				.withRegion(region)
				.build();
	}
}
@Slf4j
@RequiredArgsConstructor
@Service
public class AwsS3Uploader {

	private final AmazonS3Client amazonS3Client;

	@Value("${cloud.aws.s3.bucketName}")
	private String bucket;

	// S3 버킷에 파일 업로드하기
	public String uploadFile(MultipartFile multipartFile) throws IOException {
		String originalFilename = multipartFile.getOriginalFilename();
		ObjectMetadata objectMetadata = new ObjectMetadata();
		objectMetadata.setContentLength(multipartFile.getSize());
		objectMetadata.setContentType(multipartFile.getContentType());
		amazonS3Client.putObject(bucket, originalFilename, multipartFile.getInputStream(), objectMetadata);
		return amazonS3Client.getUrl(bucket, originalFilename).toString();
	}

	// S3 버킷에 있는 파일 삭제하기(DB와 데이터 정합성 유지를 위해, 리소스 낭비 방지)
	public void deleteFile(String fileName) {
		amazonS3Client.deleteObject(bucket, fileName);
	}
}

♻️Amazon S3 - 403 "AccessDenied" 해결

S3 버킷 정책을 설정해야 문제를 해결할 수 있다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN