Amazon Lightsail
은 AWS에서 제공하는 VPS
(Virtual Private Server) 서비스입니다. EC2
와 같이 AWS에서 제공하는 컴퓨팅 서비스는 리전, VPC
, 네트워크, 스토리지 등 다양한 옵션을 동시에 고려해야 합니다. 반면, Amazon Lightsail
은 이름 그대로 가장 단순한 형태로 가상 머신을 제공하는 서비스입니다. 단순한 웹서버를 호스팅하는 환경에서 고려해볼 수 있는 선택지입니다.
AWS Batch
는 도커 컨테이너 이미지 형태로 정의된 배치 프로세스를 효율적으로 실행시켜주는 서비스입니다. 컨테이너 레지스트리로는 Docker hub
, Amazon ECR
, Private Registry
를 모두 지원합니다.
Serverless
환경에서 배치 작업을 처리한다는 점에서 AWS Lambda
나 Aws Fargate
와 유사하지만 일부 차이점을 보입니다. AWS Batch
는 기본적으로 도커 이미지를 기반으로 배치 작업을 처리합니다. 또한, AWS Batch
는 배치 작업 처리를 위해 EC2 인스턴스를 프로비저닝합니다. 따라서, AWS Lambda
와 달리 메모리, 스토리지, 실행시간 등의 리소스 제한이 없습니다. 사용자는 해당 배치작업을 실행하기 위해 프로비저닝된 최적의 EC2 인스턴스에 대한 비용만을 지불하면 됩니다. AWS Batch
와 Spot Instance
를 함께 활용하면 저렴한 비용으로 배치 작업을 처리할 수 있습니다.
AWS Lambda
는 EC2와 같은 물리적 컴퓨팅 인스턴스를 프로비저닝하지 않고 코드를 실행시켜주는 Serverless
컴퓨팅 서비스입니다. AWS Lambda
는 Python
, Java
, JavaScript
, Go
, Ruby
등 다양한 언어와 바이너리 프로그램의 실행을 지원합니다.
AWS Lambda
는 해당 코드를 실행하기 위해 사용된 컴퓨팅 시간에 대해서만 요금을 부과하는 정책을 갖고 있습니다. 단, AWS Batch
와 달리 실제 인스턴스를 생성하는 것이 아니기 때문에, 메모리, 스토리지 실행시간 등의 리소스 사용량에 대한 제약조건이 존재합니다. 따라서, 가벼운 어플리케이션이나 백엔드 서비스들을 요청 단위로 실행할 때 매우 유용합니다.
공식문서에 따르면, AWS Lambda
의 메모리
는 128MB ~ 10,240MB 범위 내에서 1MB 단위로 결정할 수 있습니다. CPU 용량이나 기타 리소스 또한 메모리 크기에 비례하여 성능이 증가됩니다. 공식 문서에서는 1,769MB 메모리를 설정할 경우, 1vCPU
의 성능을 제공받을 수 있다고 말합니다. 코드 실행 제한시간은 최대 900초까지 허용됩니다.
AWS Lambda
는 Event-Driven
방식으로 동작합니다. AWS Lambda
의 트리거로 사용할 수 있는 리소스는 다음과 같습니다.
EventBridge
)AWS Lambda
는 주로 API Gateway
나 Elastic 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
}
AWS Lambda
에서 코드는 격리된 런타임 환경에서 실행됩니다. AWS Lambda
는 언어별로 다양한 런타임 환경을 제공할 뿐만 아니라, 사용자가 직접 런타임 환경을 빌드할 수 있습니다. AWS Lambda
는 격리된 런타임 환경과 Runtime API
를 통해 통신합니다. 런타임 환경의 익스텐션은 Extension API
를 통해 Lambda
서비스와 통신하며, Logs API
를 사용하면 Lambda
에서 로그를 구독하는 방식으로 로그 메시지를 수신할 수도 있습니다.
AWS Elastic Beanstalk
(이하 빈스톡)은 어플리케이션을 편리하게 배포하고 운영할 수 있는 End-to-End
프로비저닝 플랫폼입니다. 빈스톡은 기본적으로 서버 환경과 어플리케이션 환경을 나눈 후, 이를 통합하여 관리합니다. 빈스톡이 제공하는 기능들은 다음과 같습니다.
빈스톡은 추가적인 과금이 발생하지 않기 때문에, 빠르게 배포 환경을 구성할 때에 유용하게 사용할 수 있습니다.