본문으로 바로가기

[AWS] node에서 aws-sdk 사용하기

category 공유/기타 2021. 10. 31. 13:12

[AWS] node에서 aws-sdk 사용하기

aws와 minio에서 object를 put, get, copy, delete 해야할 일이 있어 공부하고 구현한 다음 정리를 하였다. copy, delete를 한 이유는 rename을 하고 싶었는데 rename 하는 방법이 없는 것 같아 copy 후 delete 하는 방법을 사용하였다. 한번 간단하게 사용방법을 알아보자.

aws-sdk 사용하기

먼저 aws-sdk package를 설치해주자. 명령어 : yarn add aws-sdk or npm install aws-sdk . 해당 모듈을 설치하였다면 AWS.S3에 연결해주어야 한다. lambda 함수를 사용하는 경우 함수가 aws 위에서 실행되기 때문에 상세정보를 넘겨줄 필요가 없다.

■ AWS.S3 연결하기 - aws

const connectS3 = () => {
  return new AWS.S3({ apiVersion: "2006-03-01" });
}

■ AWS.S3 연결하기 - minio

const connectS3 = () => {
  return new AWS.S3({
    apiVersion: "2006-03-01",
    accessKeyId: process.env.ACCESS_KEY || "default id",
    secretAccessKey: process.env.SECRET_KEY || "default key",
    endpoint: process.env.ENDPOINT || "localhost:9000",
    s3ForcePathStyle: true,
    sslEnabled: false,
    signatureVersion: "v4"
  });
};

위 함수처럼 구현하면 aws, minio에 연결할 수 있다. 이후 connectS3에서 return 받은 AWS.S3 객체를 이용하여 put, get, copy, delete를 하면 된다. 특정 object를 업로드 해보자. 업로드 하는 함수는 내장함수 putObject를 사용하면 된다. 아래 코드를 확인해보자.

■ putObject

const putObject = async (s3, Bucket, Key, Body, ContentType) => {
  const params = {
    Bucket,
    Key,
    Body,
    ContentType,
  };

  return new Promise((resolve, reject) => {
    s3.putObject(params, err => {
      if (err) return reject(err);
      return resolve(Key);
    });
  });
};

위 함수는 object를 put 하고 성공하면 해당 key를 return 해주고 실패한 경우 error를 return 해준다. 상황에 따라 원하는 데이터를 resolve, reject 해주면 될 것 같다. put한 object를 get 할 수 있어야 한다. 이때 사용하는 함수가 getObject이다. 아래 코드를 확인해보자.

■ getObject

const getObject = async (s3, Bucket, Key) => {
  const params = {
    Bucket,
    Key
  }
  return new Promise((resolve, reject) => {
    s3.getObject(params, (err, data) => {
      if(err) return reject(err);
      return resolve(data)
    })
  })
}

위 함수는 object에 접근을 성공하면 return 받은 data를 return 해주고, 실패한 경우 error를 return 해준다. 이것도 상황에 따라 원하는 데이터를 resolve, reject 하면 된다. 이후 알아볼 함수는 copyObject와 deleteObject이다. 필자는 rename을 하고 싶었는데 renameObject가 없어 copyObject 후 이전 object를 delete 해주었다.

■ copyObject, deleteObject

const copyObject = async (s3, Bucket, CopySource, Key) => {
  const params = {
    Bucket,
    CopySource,
    Key
  };
  return new Promise((resolve, reject) => {
    s3.copyObject(params, (err, data) => {
      if (err) return reject(err);
      resolve(true);
    });
  });
};

const deleteObject = async (s3, bucket, key) => {
  return new Promise((resolve, reject) => {
    const params = {
      Bucket: bucket,
      Key: key
    };
    s3.deleteObject(params, (err, data) => {
      if (err) return reject(err);
      return resolve(true);
    });
  });
};

위 함수는 copyObjectdeleteObject이다. 이전에 봤던 함수들과 형태는 비슷하고 params만 맞게 변경해주면 된다. 처음에는 어려워 보일 수 있는데 계속 하다보면 어느 정도 이해가 된다. 꾸준히 해보자.

마지막

해당 내용은 틀릴 수도 있다는 것을 감안하여 봐주세요. 틀린 내용 및 오탈자 수정 요청 환영입니다.

반응형