일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- VUE
- 이슈
- react
- 솔리디티
- 프론트엔드
- HTML
- 타입스크립트
- 백준
- docker
- next.js
- 백엔드
- 블록체인
- 쿠버네티스
- TypeScript
- 알고리즘
- JavaScript
- 웹
- CSS
- 이더리움
- kubernetes
- 가상화
- 클라우드
- k8s
- BFS
- 파이썬
- 컴퓨터공학
- 리액트
- 자바스크립트
- AWS
- es6
- Today
- Total
즐겁게, 코드
서버리스 프레임워크 알아보기 본문
바쁘다는 핑계로 지식을 정리하는 일에 너무 소홀했던 것 같아요 😅
퇴사 후 여유가 생기면서 서버리스 이제는 AWS Lambda로 간다 라는 책을 1/3 정도 읽을 수 있었는데요,
이번 글에서는 새로 배운 내용과 느낀 점을 간단히 적어보고, 새로운 람다 함수를 함께 배포해보도록 하겠습니다.
서버리스 프레임워크
혹시 IaC (Infrastructure as a code) 에 대해 들어 보셨나요?
요즘은 퍼블릭 클라우드 인프라를 Ansible, CloudFormation, Terraform 등의 IaC 툴을 통해 관리하는 것 같은데요,
IaC를 활용하면 개발자가 GUI나 CLI 콘솔을 매번 입력할 필요 없이 코드나 설정 파일을 통해 인프라를 관리할 수 있게 됩니다.
- 예시 : 주어진 조건대로 EC2 인스턴스를 생성해주는 코드
- 이 코드와 함께
terraform apply
를 입력하면, AWS 콘솔에 접속해 수동 설정을 거치지 않고도 인스턴스를 전개할 수 있습니다.
- 이 코드와 함께
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_instance" "example" {
ami = "사용할 ami ID"
instance_type = "t2.micro"
key_name = "키 페어 조합"
tags = {
Name = "ExampleInstance"
}
}
이처럼 인프라를 코드나 설정 파일로 관리하게 되면 자연스럽게 재사용성이 높아지면서 버전 관리가 가능해지고 이를 사내 구성원들과 손쉽게 공유하는 것도 가능한데요,
서버리스 프레임워크는 Google Cloud function, AWS Lambda, Azure Function 등의 서버리스 함수를 쉽게 작성할 수 있게 해주면서, 서버리스 함수 호출에 필요한 게이트웨이나 접근 제어를 위한 ACL 설정 등 주변 인프라를 관리하는 것에 초점을 맞춘 *IaC 도구입니다.
(* 서버리스 프레임워크가 인프라를 관리할 때도 내부적으로는 AWS의 CloudFormation, Azure의 Resource Manager 등 각 벤더가 제공하는 IaC 도구를 사용합니다. 즉, CloudFormation, Resource Manager 등 여러 벤더의 IaC 도구를 Serverless Framework라는 하나의 API로 통합시킨 것이죠! 정말 대단하지 않나요?)
Hands-On 🤟🏻
서버리스 프레임워크를 사용해 node.js 환경에서 동작하는 AWS 람다 함수를 배포해 보겠습니다.
※ 실행하기 전, aws-cli 설치 및 설정을 마쳐 주세요!
- 먼저, 서버리스 프레임워크 CLI를 전역으로 설치합니다.
// yarn 유저라면
yarn global add serverless
// npm 유저라면
npm i -g serverless
- 서버리스 프레임워크를 통해 hello 라는 이름으로 함수를 작성합니다.
mkdir hello
cd hello
sls create --template aws-nodejs --name hello
이후 약간의 시간이 지나면 serverless.yml
파일과 함께 람다 함수의 템플릿이 제공됩니다.
'use strict';
module.exports.hello = async (event) => {
return {
statusCode: 200,
body: JSON.stringify(
{
message: 'Go Serverless v1.0! Your function executed successfully!',
input: event,
},
null,
2
),
};
// Use this code if you don't use the http event with the LAMBDA-PROXY integration
// return { message: 'Go Serverless v1.0! Your function executed successfully!', event };
};
serverless.yml
파일을 다음과 같이 수정해줍니다.
service: hello
frameworkVersion: "3"
provider:
name: aws
runtime: nodejs18.x
region: ap-northeast-2
functions:
hello:
handler: handler.hello
events:
- http:
path: /
method: get
cors: true
- 이제
sls deploy
를 입력하면 함수 배포가 완료되고 엔드포인트가 생성됩니다.
이제 위 화면에서 '함수 배포는 어디서 하더라...' / '아, API 게이트웨이 서비스로 가야 하지...' 등을 헤멜 필요 없이 코드로 서버리스 함수를 관리할 수 있게 되었습니다.
다음 글에서는 조금 더 복잡한 예시를 활용해보도록 하겠습니다.
곧 두 번째 글에서 뵈어요!