barbe-serverless를 사용하여 서버리스 식사 구축
11384 단어 opensourceserverlessaws
꽤 초기 단계이지만 클래식 API 게이트웨이 + Lambda + DynamoDB 버거 콤보 식사를 생성하는 방법을 보여드릴 것이라고 생각했습니다.
바쁘거나(우리 모두가 그렇지 않습니까) 길을 잃으면(우리 모두가 그렇지 않습니까) 이 문서에서 파생된 예here를 확인할 수 있습니다.
식사를 만드는 첫 번째 단계는 barbe 구성 파일입니다. 꽤 맛있을 것이기 때문에
huuum.hcl
라고 부르겠습니다.barbe-serverless에 대한 링크가 포함된
template
블록으로 시작합니다.# huuum.hcl
template {
manifest = "https://raw.githubusercontent.com/Plenituz/barbe-serverless/main/manifest.json"
}
첫 번째 재료는 DynamoDB 테이블인 스테이크입니다. 고기는 식사의 가장 중요한 부분이므로 백엔드 서비스에 대한 데이터베이스도 마찬가지입니다.
# huuum.hcl
aws_dynamodb "steak" {
hash_key = "name"
}
아 그리고 잊지 마세요, 스테이크는 요리하기 전에 항상 적절하게 간을 맞춰야 합니다. Auto Scaling 없이는 프로덕션 환경에 데이터베이스를 넣지 않을 것입니다.
# huuum.hcl
aws_dynamodb "steak" {
hash_key = "name"
auto_scaling {
min = 1
max = 100
}
}
소스가 없는 좋은 스테이크는 정말 죽은 소일 뿐입니다. 그러니 람다 소스를 함께 섞어 봅시다.
람다 소스는 여러 가지 맛이 있습니다. 모두 좋아하지만 오늘은 한 가지 재료만 있으면 됩니다.
지난주에 남은 타이프 스크립트가 있다면 잘 될 것입니다. 그릇에 넣고 좋아하는 타이프 스크립트 블렌더를 가져와 미쳐 버릴 것입니다.
나는 개인적으로
esbuild
로 내 타이프 스크립트를 매싱하는 것을 좋아합니다. 방법은 다음과 같습니다.// src/bowl.ts
import { DynamoDB } from '@aws-sdk/client-dynamodb';
import { APIGatewayEvent, APIGatewayProxyResult, Context } from 'aws-lambda';
import { marshall } from "@aws-sdk/util-dynamodb";
export const createSteak = async (event: APIGatewayEvent, context: Context): Promise<APIGatewayProxyResult> => {
await new DynamoDB({ region: process.env.AWS_REGION }).putItem({
TableName: STEAK_TABLE,
Item: marshall(item),
})
return {
statusCode: 200,
body: JSON.stringify(user)
}
}
./node_modules/.bin/esbuild src/bowl.ts --bundle --target=node16 --platform=node --outfile=dist/bowl.js
람다 소스를 템플릿 파일에 펴서 후추와 향신료를 추가하여 마무리할 수 있습니다.
aws_function "create-steak" {
handler = "bowl.createSteak"
runtime = "nodejs16.x"
memory_size = 128
timeout = 30
environment {
STEAK_TABLE = aws_dynamodb.steak.name
}
package {
include = ["dist/bowl.js"]
file_map = {
"dist/bowl.js" = "bowl.js"
}
}
}
이제 당황하지 마세요. 이국적인 향신료처럼 보이지만 실제로는 화려하게 보이는 생강일 뿐입니다.
핸들러, 런타임, 메모리, 시간 초과 및 환경 변수와 같은 처음 몇 줄은 익숙할 것입니다.
그 이상한
package
향신료는 우리가 람다 함수 패키지에 포함된 람다 소스를 나타냅니다.include
는 패키징할 파일을 나타내고 file_map
는 생성된 zip 파일에서 패키징된 파일이 끝나는 위치를 나타냅니다.우리의 경우
dist/bowl.js
만 패키징하지만 Barbe에게 zip 파일의 루트로 이동하도록 지시합니다.이것은 다소 선택 사항입니다. 대신
file_map
를 제거하고 .dist/bowl.createSteak
를 handler
로 사용할 수 있지만 내 입에는 맛이 좋지 않습니다.횡설수설은 그만하고 햄버거로 돌아가자. 거의 다 됐다. 스테이크 위에 약간의 치즈를 추가합시다. 이것은 식사에 미각을 환영하는 것입니다. 매우 중요하고 매우 맛있습니다.
aws_http_api "steak-api" {
domain {
name = "tasty.huuumyeah.com"
}
route "POST /steak" {
aws_function = aws_function.create-steak
}
}
보시다시피 우리는
route
블록을 사용하여 람다 소스 위에 직접 치즈를 얹었습니다. Gordon Ramsay는 자랑스러워할 것입니다.취향에 따라 치즈와 소스를 완전히 섞어서 치즈 소스를 만들 수도 있습니다.
aws_function "create-steak" {
// ...
event_http_route "POST /steak" {
aws_http_api = aws_http_api.steak-api
}
}
우리는 이미 꽤 좋은 것을 얻었고 어떤 사람들은 그것을 그렇게 먹고 "해체된 버거"라고 부를 수도 있습니다.
저는 개인적으로
default
블록이라는 멋진 롤빵으로 마무리하는 것을 좋아합니다. 이 블록의 모든 것은 우리 프로젝트의 모든 구성 요소에 적용되므로 이름은 default
입니다.내 비법은 소스의 일부를 롤빵에 직접 넣는 것입니다. 이렇게 하면 프로젝트에 더 많은 재료(람다)를 추가하면 미리 구성된 상태로 제공됩니다.
default {
name_prefix = ["steak-co-production-"]
package {
include = ["dist/bowl.js"]
file_map = {
"dist/bowl.js" = "bowl.js"
}
}
environment {
STEAK_TABLE = aws_dynamodb.steak.name
}
runtime = "nodejs16.x"
memory_size = 128
timeout = 30
}
aws_function "create-steak" {
handler = "bowl.createSteak"
}
aws_function "delete-steak" {
handler = "bowl.deleteSteak"
}
그리고 그것이 우리가 필요한 모든 재료입니다. 얼마나 좋은지 이미 냄새를 맡을 수 있습니다.
봉사하자
barbe generate huuum.hcl --output dist
cd dist
terraform init
terraform apply
다음에 스파게티 코드 Inc.의 또 다른 레시피로 만나요.
Reference
이 문제에 관하여(barbe-serverless를 사용하여 서버리스 식사 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/plenituz/building-a-serverless-meal-using-barbe-serverless-58h1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)