serverless-stack

Docs SST

서버리스 스택(SST)은 서버리스 앱을 쉽게 구축할 수 있는 프레임워크라고 소개되어 있다.

2021-10-24일 기준으로 현재 SST는 JavaScript, TypeScript, Python, Golang 및 C#을 지원하고 있다.

Language CDK Lambda
JavaScript
TypeScript
Go Coming soon
Python Coming soon
C# Coming soon
F# Coming soon

SST 프레임워크를 사용하면 앱에서 필요한 인프라스트럭쳐를 코드로(AWS CDK 사용) 정의하고, AWS Lambda 함수를 보다 간편하게 구성할 수 있다.

디자인 원리

SST는 몇가지 핵심 원리를 가지고 설계된 프레임워크이다.

  • 점진적 공개
  • 구조의 설정
  • 권한 부여
  • 제로베이스 구성

점진적 공개

서버리스 앱을 구축하기 위해 SST가 제공 하는 구성은 점진적 공개 라는 아이디어를 기반으로 한다.
기본 구성이 간단하고 이해하기 쉬우며 환경파악에 용이하며, 더 복잡한 사용 사례에 대해 점진적으로 사용자가 쉽게 지정할 수 있는 장점이 있다.

구조의 설정

Api Routes에 간단한 예시

1
2
3
4
5
6
new Api(this, "Api", {
routes: {
"GET /notes": "src/list.main",
"POST /notes": "src/create.main",
},
});

이러한 형태는 정의한것을 쉽게 이해할 수 있다. 만약 커스텀한 함수 속성이 필요하다면 아래와 같이 추가할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
new Api(this, "Api", {
defaultFunctionProps: {
srcPath: "src/",
environment: { tableName: table.tableName },
},
routes: {
"GET /notes": {
function: {
handler: "list.main",
srcPath: "services/functions/",
},
},
"POST /notes": "create.main",
},
});

권한 부여

SST는 attaching function을 통해 권한을 부여한다.

아래 cronjob 설정에 대한 예를 살펴보자

1
2
3
4
const cron = new Cron(this, "Cron", {
schedule: "rate(1 minute)",
job: "src/lambda.main",
});

cronjob에 대한 접근권한을 부여에 대한 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// cronjob 함수에 모든 접근권한 부여
cron.attachPermissions(PermissionType.ALL);

// 특정 리소스에만 접근권한 부여
cron.attachPermissions(["s3"]);

import { PolicyStatement, Effect } from "@aws-cdk/aws-iam";

// IAM 정책으로 권한부여
cron.attachPermissions([
new PolicyStatement({
actions: ["execute-api:Invoke"],
effect: Effect.ALLOW,
resources: [
`arn:aws:execute-api:${region}:${account}:${api.httpApiId}/*`,
],
}),
]);

제로베이스 구성

SST를 프레임워크가 탄생한 가장 큰 이유 중 하나는 서버리스 개발 환경이 항상 부족하다고 느꼈기 때문이라고 한다.

  • 부족한 점
    • Live Lambda Development 가 해결하려고 하는 긴밀한 피드백 루프가 부족
    • 여러 플러그인, Webpack, Babel, TypeScript, 테스트 프레임워크, 린터 등을 구성해야 함
    • 설정은 종종 깨지기 쉽고 최신 상태를 유지하기 위해 별도의 프로젝트 유지 관리자에 의존

위에 부족한 점들로 인해 Serverless 환경에 많은 경험이 있는 개인 개발자라면 괜찮겠지만 더 큰 팀의 일원이거나 이제 막 서버리스를 시작하는 경우 개발 환경을 시작하고 실행하는 것이 매우 어려운 점 발생한다.

SST의 설계 원칙 중 하나는 개발 환경이 기본적으로 작동하는지 확인하는 것이며, 구성이 거의 또는 전혀 필요하지 않는것이 핵심 원칙이다.

Quick Start

Node 환경에서 아래 명령어로 빠르게 SST 프로젝트를 생성할 수 있다.

1
2
3
4
5
6
7
8
9
# Create your app
npx create-serverless-stack@latest my-sst-app
cd my-sst-app

# Start Live Lambda Development
npx sst start

# Deploy to prod
npx sst deploy --stage prod