למה AWS SAM, ולא Serverless Framework?
העברנו חמישה פרויקטים מ-Serverless Framework ל-AWS SAM וראינו יתרונות בכל פעם: פחות עקיפות, מחסנית CloudFormation שקופה, אינטגרציה טבעית עם CDK. SAM הוא לא סתם שכבת הפשטה נוספת — הוא הכלי הרשמי של AWS, תואם לחלוטין ל-CloudFormation: הפלט הוא מחסנית מלאה שניתן לבצע לה versioning ולבצע rollback. במקום 50 שורות של CloudFormation עבור Lambda + API Gateway + IAM Role, כותבים 10 שורות של SAM. זה מקצר את זמן הפיתוח של ה-backend ב-40% ומפחית את הסיכון לשגיאות תצורה. פרויקט SAM טיפוסי עולה 30–50% פחות מהמקבילה ב-Serverless Framework, בזכות פחות קוד וללא תוספים.
למהנדסים שלנו עם הסמכת AWS יש 5 שנות ניסיון בארכיטקטורות serverless והם סיפקו מעל 30 פרויקטי SAM. אנו מבטיחים תאימות למחסנית שלך ואופטימיזציית עלויות — לדוגמה, שימוש ב-Graviton2 חוסך עד 20% על Lambda, ועלויות התשתית יורדות ב-40% בעת מעבר מ-EC2 ל-Lambda. כפי ש-AWS מציינת: "SAM היא הדרך הקלה ביותר לבנות יישומי serverless".
למה Graviton2?
מעבדי AWS Graviton2 המבוססים על ארכיטקטורת ARM64 מספקים עד 20% ביצועים טובים יותר למחיר בהשוואה ל-x86. SAM מאפשר לבחור את הארכיטקטורה בתבנית עם שורה אחת.השוואה: SAM לעומת Serverless Framework
| קריטריון | AWS SAM | Serverless Framework |
|---|---|---|
| הפשטה | הרחבה ישירה של CloudFormation | תחביר מותאם אישית עם ספקים |
| גודל תבנית | 10 שורות לפונקציה פשוטה | 15–20 שורות עם תוספים |
| אינטגרציית AWS | טבעית, תמיכה מלאה בשירותים | נדרשים תוספים לחלק מהשירותים |
| פיתוח מקומי | SAM CLI + Docker | serverless-offline |
| Versioning של מחסנית | CloudFormation Change Sets | כלים נפרדים |
איך להקים CI/CD עבור SAM?
אינטגרציה ואספקה רציפות הן חובה בכל ארכיטקטורת production. SAM משתלב בצורה חלקה עם pipelines פופולריים: GitHub Actions, GitLab CI, AWS CodePipeline. תרחיש טיפוסי: ב-push לענף main, הוא מריץ sam build ומבצע deploy לסביבת # .github/workflows/deploy.yml (фрагмент) - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: arn:aws:iam::123456789012:role/GitHubActions aws-region: eu-west-1 - name: SAM build and deploy run: | sam build sam deploy --no-confirm-changeset --no-fail-on-empty-changeset עם אישור אוטומטי של Change Sets.
# .github/workflows/deploy.yml (фрагмент)
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::123456789012:role/GitHubActions
aws-region: eu-west-1
- name: SAM build and deploy
run: |
sam build
sam deploy --no-confirm-changeset --no-fail-on-empty-changeset
לתצורה מרובת סביבות, השתמש ב-samconfig.toml עם פרופילים שונים. Rollback מתבצע באמצעות פקודת rollback-stack הסטנדרטית של CloudFormation — ללא זמן השבתה.
מה כלול בהקמת Backend עם SAM?
העבודה שלנו מכסה את כל המחזור: מבדיקת הארכיטקטורה הנוכחית שלך ועד מסירת תיעוד.
- מסמך ארכיטקטורה: דיאגרמת שירותים, בחירת זמן ריצה של Lambda, חישובי זיכרון וזמן קצוב.
- template.yaml: כל המשאבים (Lambda, API Gateway, DynamoDB, SQS, S3) עם מדיניות ומשתני סביבה.
- קוד מקור של Lambda: handlers ב-TypeScript/Node.js 20, JWT authorizer, middlewares, בדיקות.
- תצורת סביבות: dev/staging/prod עם שלבים שונים, פרמטרי SSM לסודות.
- Pipeline של CI/CD: workflow מוכן לשימוש עבור GitHub Actions או GitLab CI.
- תיעוד והדרכה: README עם דוגמאות קריאות, תיאורי משתנים, הוראות למפתחים.
- אחריות: שבוע של תמיכה לאחר הפריסה לתיקון כל תקלה.
התחלה מהירה: התקנה ומבנה
brew tap aws/tap
brew install aws-sam-cli
# или: pip install aws-sam-cli
sam --version
# SAM CLI, version 1.x
sam init --runtime nodejs20.x --dependency-manager npm --app-template hello-world --name my-backendמבנה הפרויקט:
-
brew tap aws/tap brew install aws-sam-cli # или: pip install aws-sam-cli sam --version # SAM CLI, version 1.x sam init --runtime nodejs20.x --dependency-manager npm --app-template hello-world --name my-backend— תבנית SAM -
template.yaml— תצורת פריסה -
samconfig.toml— handlers (api.ts, auth.ts, worker.ts) -
src/handlers/— קוד משותף (db.ts, response.ts) -
src/shared/— אירועי בדיקה -
events/— בדיקות
תצורת תבנית ו-Handler
אלמנטים מרכזיים של template.yaml:
---
AWSTemplateFormatVersion: '2010-09-31'
Transform: AWS::Serverless-2016-10-31
Description: My Web Backend
Globals:
Function:
Runtime: nodejs20.x
Architectures: [arm64]
MemorySize: 512
Timeout: 10
Api:
Cors:
AllowMethods: "'*'"
Resources:
ApiGateway:
Type: AWS::Serverless::HttpApi
Properties:
StageName: !Ref Stage
Auth:
DefaultAuthorizer: LambdaAuthorizer
Authorizers:
LambdaAuthorizer:
FunctionArn: !GetAtt AuthFunction.Arn
ApiFunction:
Type: AWS::Serverless::Function
Properties:
Handler: src/handlers/api.handler
Events:
AnyRoute:
Type: HttpApi
Properties:
ApiId: !Ref ApiGateway
Method: ANY
Path: /api/{proxy+}
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref MainTable
Metadata:
BuildMethod: esbuild
BuildProperties:
Minify: true
Target: es2022
---
דוגמה ל-Lambda Authorizer:
import { verify } from 'jsonwebtoken';
export const handler = async (event) => {
const token = event.headers?.authorization?.replace('Bearer ', '');
if (!token) return { isAuthorized: false };
try {
const payload = verify(token, process.env.JWT_SECRET!);
return { isAuthorized: true, context: { userId: String(payload.sub) } };
} catch {
return { isAuthorized: false };
}
}; איך לייעל עלויות SAM?
- השתמש ב-Graviton2 (arm64) — חיסכון של עד 20% על Lambda.
- הגדר Provisioned Concurrency רק לפונקציות קריטיות.
- הגדר CloudWatch Lambda Insights לניטור וזיהוי בקשות לא יעילות.
- העבר נכסים סטטיים ל-S3 + CloudFront, אל תעמיס על API Gateway.
- ייעל את גודל חבילת הפריסה: מיניפיקציית esbuild, tree-shaking.
פיתוח מקומי ו-CI/CD
להרצה מקומית, אנו משתמשים ב-__tests__/ עם DynamoDB מדומה דרך Docker. תצורת הסביבה מוגדרת ב-AWSTemplateFormatVersion: '2010-09-31' Transform: AWS::Serverless-2016-10-31 Description: My Web Backend Globals: Function: Runtime: nodejs20.x Architectures: [arm64] MemorySize: 512 Timeout: 10 Api: Cors: AllowMethods: "'*'" Resources: ApiGateway: Type: AWS::Serverless::HttpApi Properties: StageName: !Ref Stage Auth: DefaultAuthorizer: LambdaAuthorizer Authorizers: LambdaAuthorizer: FunctionArn: !GetAtt AuthFunction.Arn ApiFunction: Type: AWS::Serverless::Function Properties: Handler: src/handlers/api.handler Events: AnyRoute: Type: HttpApi Properties: ApiId: !Ref ApiGateway Method: ANY Path: /api/{proxy+} Policies: - DynamoDBCrudPolicy: TableName: !Ref MainTable Metadata: BuildMethod: esbuild BuildProperties: Minify: true Target: es2022 :
[default.deploy.parameters]
stack_name = "my-backend-dev"
s3_bucket = "artifacts-bucket"
region = "eu-west-1"
parameter_overrides = "Stage=dev"הפריסה מתבצעת עם:
sam build && sam deploy --config-env dev # или для prod sam build && sam deploy --config-env prod התהליך כולל בנייה (מיניפיקציית esbuild), יצירת Change Set, ויישום. Rollback משתמש בפקודת import { verify } from 'jsonwebtoken'; export const handler = async (event) => { const token = event.headers?.authorization?.replace('Bearer ', ''); if (!token) return { isAuthorized: false }; try { const payload = verify(token, process.env.JWT_SECRET!); return { isAuthorized: true, context: { userId: String(payload.sub) } }; } catch { return { isAuthorized: false }; } }; הסטנדרטית של CloudFormation.
תהליך ולוחות זמנים
| שלב | משך | תוצאה |
|---|---|---|
| ניתוח ארכיטקטורה | 0.5–1 יום | מסמך עם המלצות |
| עיצוב תבנית SAM | 1–2 ימים | template.yaml, samconfig.toml |
| מימוש פונקציות Lambda | 2–3 ימים | handlers, שכבת משותפת, בדיקות |
| אינטגרציה עם שירותים | 1–2 ימים | DynamoDB, SQS, S3, API Gateway |
| בדיקות וניפוי שגיאות | 1–2 ימים | בדיקות יחידה ואינטגרציה |
| פריסה ו-CI/CD | יום אחד | Pipeline (GitHub Actions / GitLab CI) |
| תיעוד והדרכה | 0.5 יום | README, דוגמאות קריאות |
Backend בסיסי של SAM עם Lambda אחת ו-DynamoDB — 1–2 ימים. ארכיטקטורה מלאה עם authorizer, עובדי רקע וסביבות מרובות — 4–5 ימים. התאמת קוד Express/Fastify קיים — 3–5 ימים.
צור קשר כדי להעריך את הפרויקט שלך — המהנדסים שלנו ינתחו את הארכיטקטורה הנוכחית שלך ויכינו הצעה מסחרית. הזמן הקמת AWS SAM turnkey — אנו נטפל בכל התשתית, מתבניות ועד CI/CD.







