[AWS] Computing: Lightsail, Batch, Lambda and Elastic Beanstalk

bluewhale·2021년 6월 4일
0

AWS

목록 보기
4/19

Amazon Lightsail

Amazon Lightsail은 AWS에서 제공하는 VPS(Virtual Private Server) 서비스입니다. EC2와 같이 AWS에서 제공하는 컴퓨팅 서비스는 리전, VPC, 네트워크, 스토리지 등 다양한 옵션을 동시에 고려해야 합니다. 반면, Amazon Lightsail은 이름 그대로 가장 단순한 형태로 가상 머신을 제공하는 서비스입니다. 단순한 웹서버를 호스팅하는 환경에서 고려해볼 수 있는 선택지입니다.

AWS Batch

AWS Batch는 도커 컨테이너 이미지 형태로 정의된 배치 프로세스를 효율적으로 실행시켜주는 서비스입니다. 컨테이너 레지스트리로는 Docker hub, Amazon ECR, Private Registry를 모두 지원합니다.

Serverless 환경에서 배치 작업을 처리한다는 점에서 AWS LambdaAws Fargate와 유사하지만 일부 차이점을 보입니다. AWS Batch는 기본적으로 도커 이미지를 기반으로 배치 작업을 처리합니다. 또한, AWS Batch는 배치 작업 처리를 위해 EC2 인스턴스를 프로비저닝합니다. 따라서, AWS Lambda와 달리 메모리, 스토리지, 실행시간 등의 리소스 제한이 없습니다. 사용자는 해당 배치작업을 실행하기 위해 프로비저닝된 최적의 EC2 인스턴스에 대한 비용만을 지불하면 됩니다. AWS BatchSpot Instance를 함께 활용하면 저렴한 비용으로 배치 작업을 처리할 수 있습니다.

AWS Lambda

AWS Lambda는 EC2와 같은 물리적 컴퓨팅 인스턴스를 프로비저닝하지 않고 코드를 실행시켜주는 Serverless 컴퓨팅 서비스입니다. AWS LambdaPython, Java, JavaScript, Go, Ruby 등 다양한 언어와 바이너리 프로그램의 실행을 지원합니다.

Lambda 리소스

AWS Lambda는 해당 코드를 실행하기 위해 사용된 컴퓨팅 시간에 대해서만 요금을 부과하는 정책을 갖고 있습니다. 단, AWS Batch와 달리 실제 인스턴스를 생성하는 것이 아니기 때문에, 메모리, 스토리지 실행시간 등의 리소스 사용량에 대한 제약조건이 존재합니다. 따라서, 가벼운 어플리케이션이나 백엔드 서비스들을 요청 단위로 실행할 때 매우 유용합니다.

공식문서에 따르면, AWS Lambda메모리는 128MB ~ 10,240MB 범위 내에서 1MB 단위로 결정할 수 있습니다. CPU 용량이나 기타 리소스 또한 메모리 크기에 비례하여 성능이 증가됩니다. 공식 문서에서는 1,769MB 메모리를 설정할 경우, 1vCPU의 성능을 제공받을 수 있다고 말합니다. 코드 실행 제한시간은 최대 900초까지 허용됩니다.

Lambda 트리거

AWS LambdaEvent-Driven 방식으로 동작합니다. AWS Lambda의 트리거로 사용할 수 있는 리소스는 다음과 같습니다.

  • CloudWatch 이벤트
  • S3 객체 이벤트
  • 외부 이벤트(EventBridge)
  • API 게이트웨이
  • Elastic LB

AWS Lambda는 주로 API GatewayElastic LB를 통해 전달된 HTTP 요청을 처리하거나, S3, DynamoDB, Kinesis에서 발생한 이벤트를 트리거로 실행됩니다. AWS Lambda 런타임은 아래와 같은 이벤트 문서를 받아서, 이를 객체로 반환하고 함수 핸들러에게 전달합니다.

# HTTP 요청 예시
{
    "requestContext": {
        "elb": {
            "targetGroupArn": "arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/lambda-279XGJDqGZ5rsrHC2Fjr/49e9d65c45c6791a"
        }
    },
    "httpMethod": "GET",
    "path": "/lambda",
    "queryStringParameters": {
        "query": "1234ABCD"
    },
    "headers": {
        "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "accept-encoding": "gzip",
        "accept-language": "en-US,en;q=0.9",
        "connection": "keep-alive",
        "host": "lambda-alb-123578498.us-east-2.elb.amazonaws.com",
        "upgrade-insecure-requests": "1",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
        "x-amzn-trace-id": "Root=1-5c536348-3d683b8b04734faae651f476",
        "x-forwarded-for": "72.12.164.125",
        "x-forwarded-port": "80",
        "x-forwarded-proto": "http",
        "x-imforwards": "20"
    },
    "body": "",
    "isBase64Encoded": false
}

Lambda 런타임

AWS Lambda에서 코드는 격리된 런타임 환경에서 실행됩니다. AWS Lambda는 언어별로 다양한 런타임 환경을 제공할 뿐만 아니라, 사용자가 직접 런타임 환경을 빌드할 수 있습니다. AWS Lambda는 격리된 런타임 환경과 Runtime API를 통해 통신합니다. 런타임 환경의 익스텐션은 Extension API를 통해 Lambda 서비스와 통신하며, Logs API를 사용하면 Lambda에서 로그를 구독하는 방식으로 로그 메시지를 수신할 수도 있습니다.

AWS Elastic Beanstalk

AWS Elastic Beanstalk(이하 빈스톡)은 어플리케이션을 편리하게 배포하고 운영할 수 있는 End-to-End 프로비저닝 플랫폼입니다. 빈스톡은 기본적으로 서버 환경과 어플리케이션 환경을 나눈 후, 이를 통합하여 관리합니다. 빈스톡이 제공하는 기능들은 다음과 같습니다.

서버 환경 구성

  • EC2 인스턴스 생성 및 OS 설치
  • 로드 밸런싱
  • 오토 스케일링

런타임 환경 구성 및 배포

  • 어플리케이션 의존성 설치
  • 어플리케이션 배포(S3를 통한 소스 업로드)
  • 버전 관리
  • 환경변수 설정
  • 로그 기록 및 리소스 모니터링

빈스톡은 추가적인 과금이 발생하지 않기 때문에, 빠르게 배포 환경을 구성할 때에 유용하게 사용할 수 있습니다.

References

AWS 람다(AWS Lambda)란?

profile
안녕하세요

0개의 댓글