AWS lambda

이대현·2024년 6월 21일
0

aws

목록 보기
1/1

AWS Lambda는 Amazon Web Services(AWS)의 서버리스 컴퓨팅은 서버를 직접 관리하지 않고도 코드를 실행할 수 있게 해주는 서비리스 컴퓨팅 서비스이다.

사용사례

  • 데이터 처리: S3에 업로드된 파일을 처리하는 것과 같은 배치 작업.
  • 리얼타임 파일 분석: Kinesis 스트림의 데이터를 실시간으로 분석.
  • 웹 애플리케이션 백엔드: API Gateway와 연동하여 서버리스 RESTful API 백엔드 제공.
  • IoT 데이터 수집 및 처리: IoT 디바이스에서 보낸 데이터를 실시간으로 수집하고 처리.

예시:

  • 람다 함수 작성
const AWS = require("aws-sdk");
AWS.config.update({ 
  region: "ap-northeast-2"
});
const s3 = new AWS.S3();

const STORAGE_BUCKET_NAME = `upload-storage`; //저장될 버킷


exports.handler = async (event, context) => {
  try {
    const params = { Bucket: STORAGE_BUCKET_NAME, Key: event.fileKey };
    const signedUrl = await s3.getSignedUrlPromise("putObject", params); //put으로 해야함
    
    return signedUrl
  } catch (error) {
    console.error(error);
  }
};
  • 클라이언트단에서 사용
//환경변수
VITE_AWS_API_HOST=api주소 입력

//api set 정보
const set = [
  //aws file upload
  {
    name: 'getSignedUrl',
    method: 'post',
    url: '/develop/s3-signed-url',
  },
]

// api call header에 Accept 넣어줘야함
if (apiType === 'aws') headers.Accept = '/'

//signedUrl을 받아서 파일을 저장하는 함수
const { mutate, isLoading } = useMutation(async (params: any) => {
    const res = await api.call('getSignedUrl', params.name, 'aws') //signedUrl을 받음
    await axios.put(res.data, params.value) // 받아온 url로 파일을 저장
    const url = res.data.substring(0, res.data.indexOf(params.name.fileKey) + params.name.fileKey.length)
		// s3에 저장될 파일의 링크
		// 해당 링크를 서버에 저장하는 요청을 하면됨

    return url
  })

장점

  1. 서버 관리 필요 없음:

    • 서버 인프라를 관리할 필요가 없어 운영 및 유지보수 비용이 절감됩니다.
  2. 자동 확장 및 축소(Scalability):

    • 트래픽 양에 따라 자동으로 확장되며, 별도로 용량을 계획하거나 조정할 필요가 없습니다.
  3. 비용 효율적:

    • 실제 코드가 실행된 시간(초 단위)만큼 비용이 청구되며, 트래픽이 없는 시간에는 비용이 발생하지 않습니다.
    • 초기 비용이 없기 때문에 소규모 프로젝트나 스타트업에 특히 유리합니다.
  4. 빠른 배포:

    • 코드만 작성하면 되는 구조로, 빠르게 새로운 기능을 배포하고 테스트할 수 있습니다.
  5. 다양한 이벤트 소스:

    • S3, DynamoDB, Kinesis, SNS, API Gateway 등 다양한 AWS 서비스와의 연동이 가능합니다.
  6. 보안:

    • IAM(Identity and Access Management)을 통해 Lambda 함수의 액세스 권한을 세밀하게 제어할 수 있습니다.

단점

  1. 시작 지연(Cold Start):

    • 함수가 한동안 호출되지 않으면 컨테이너가 중지되며, 이후 호출 시 다시 시작하는 데 약간의 지연이 발생할 수 있습니다. 이 지연은 초기에 몇 백 밀리초에서 몇 초까지 걸릴 수 있습니다.
  2. 제한된 실행 시간:

    • 각 Lambda 함수는 최대 15분 동안만 실행될 수 있습니다. 장시간 실행이 필요한 작업에는 적합하지 않습니다.
  3. 종속성 관리:

    • Lambda 함수에 종속성을 추가할 때, 패키징과 배포를 관리해야 하며 이는 복잡할 수 있습니다.
  4. 로컬 개발, 테스트 어려움:

    • 로컬 환경에서 Lambda 함수와 동일한 조건을 재현하기 어려울 수 있습니다. AWS SAM(AWS Serverless Application Model)이나 로컬 테스트 도구를 사용하여 이를 극복할 수 있지만, 여전히 제약이 있을 수 있습니다.
  5. 함수 환경 제약:

    • Lambda 함수는 지정된 몇 가지 프로그래밍 언어 환경 내에서만 작동합니다. 특정 언어나 버전에 의존하는 경우 제약이 될 수 있습니다.
  6. 벤더 종속성:

    • AWS Lambda와 같은 서버리스 플랫폼을 사용하면 해당 플랫폼에 대한 종속성이 생기므로, 다른 클라우드 제공자로의 마이그레이션이 어려울 수 있습니다.

요약

AWS Lambda는 서버리스 아키텍처의 장점을 잘 살린 기능으로, 특히 작은 규모의 애플리케이션이나 특정 이벤트 기반 작업에 매우 유용합니다. 하지만 실행 시간 제한, 콜드 스타트 문제, 복잡한 종속성 관리 등 몇몇 단점도 존재합니다. 이를 잘 이해하고 적절히 활용한다면 효율적이고 비용 효과적인 시스템을 구축할 수 있을 것입니다.

profile
Frontend Developer

0개의 댓글