[aws-s3] 최신 aws-sdk인 @aws-sdk/client-s3 사용해서 s3 이미지 불러오기 (feat. node.js)

Maria Kim·2024년 1월 20일
0
post-custom-banner

코드

import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3";

import { config } from "../config/index.js";

export const s3Client = new S3Client({
  region: config.aws.region,
  credentials: {
    accessKeyId: config.aws.accessKeyId,
    secretAccessKey: config.aws.secretAccessKey,
  },
});

const router = express.Router();

router.get("/:id", async (req, res, next) => {
  try {
    const { id } = req.params;

    if (!id) return res.status(400).send();

    const command = new GetObjectCommand({
      Bucket: config.aws.bucketName,
      Key: id,
    });
    const data = await s3Client.send(command);

    let contentType = "image/jpeg";
    if (id.endsWith(".webp")) contentType = "image/webp";
    else if (id.endsWith(".png")) contentType = "image/png";

    res.writeHead(200, {
      "Content-Type": contentType,
      "cache-control": "max-age=604800, public",
    });
    data.Body.pipe(res);
  } catch (error) {
    next(error);
  }
});

참고 사항

  • aws EC2에서 사용하더라도 Access key는 'Local code'를 사용하면 된다.
    => 나는 aws EC2 에서 백엔드를 실행하고 있다. 그래서 아래 사진에서 처럼 Access key를 만들 때, dev mode에 사용할 'Local code' 와 prod mode 인 EC2에서 사용할 'Application running on an AWS compute service' 2개를 생성했다. 하지만 EC2에 직접 사용해 보니 'Application running on an AWS compute service'의 key는 사용이 불가했고 'Local code'로 생성한 key가 정상적으로 작동했다.

    블로그 - aws Access Key 생성 방법

참고 사이트

aws 공식문서 - Amazon S3 examples using SDK for JavaScript (v3)
aws 공식문서 - AWS SDK를 사용하여 Amazon S3 버킷에서 객체 가져오기
@aws-sdk/client-s3 Github
블로그 - aws Access Key 생성 방법

profile
Frontend Developer, who has business in mind.
post-custom-banner

0개의 댓글