إنتقل إلى المحتوى الرئيسي

نشر AWS في Cursor: دليل شامل

نشر AWS في Cursor

أمازون ويب سيرفس (AWS) هي منصة الحوسبة السحابية الأكثر اعتمادًا، وتقدم الحوسبة والتخزين وقواعد البيانات وعشرات الخدمات المُدارة عالية المستوى. يتضمن نشر التطبيقات على AWS كتابة كود البنية التحتية وتجميع الدوال وإدارة التخزين وتنسيق سير عمل الإصدار. Cursor، بمساعده الذكي ونظام الإضافات الغني، هو بيئة قوية لتطوير AWS — يمكنه إنشاء معالجات Lambda وقوالب CloudFormation وسكريبتات النشر من مطالبات اللغة الطبيعية.

يأخذك هذا الدليل عبر سير عمل نشر AWS الكامل في Cursor: تكامل AWS SDK، وبناء ونشر دوال Lambda، والعمل مع S3 للتخزين، وكتابة بنية CloudFormation التحتية ككود، واستخدام الذكاء الاصطناعي لتسريع كل خطوة.

إعداد سلسلة أدوات AWS في Cursor​

تثبيت إضافة AWS Toolkit​

إضافة AWS Toolkit تجلب تصفح موارد AWS وتنفيذ Lambda المحلي وعرض CloudWatch Logs ودعم SAM (نموذج التطبيق بلا خادم) مباشرة إلى Cursor.

  1. افتح عرض الإضافات (Ctrl+Shift+X).
  2. ابحث عن "AWS Toolkit".
  3. انقر على Install.

بعد التثبيت، يظهر أيقونة AWS في شريط النشاط. توفر الإضافة:

  • متصفح موارد لـ Lambda وS3 وCloudFormation وDynamoDB.
  • استدعاء Lambda محلي باستخدام SAM CLI.
  • أداة تصور Step Functions.
  • بث CloudWatch Logs.
  • إنشاء مشاريع CDK وSAM.
تلميح

يتطلب AWS Toolkit تكوين بيانات اعتماد AWS على جهازك. يقرأ Cursor نفس ملف بيانات الاعتماد (~/.aws/credentials) مثل AWS CLI، لذا أي ملفات تعريف موجودة تعمل فورًا.

تكوين بيانات اعتماد AWS​

أنشئ ملف تعريف بيانات اعتماد باستخدام AWS CLI:

npm install -g aws-cli
aws configure

تجمع المطالبة التفاعلية:

AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-east-1
Default output format [None]: json

لإعدادات متعددة الحسابات، أنشئ ملفات تعريف مسماة:

# ~/.aws/credentials
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[production]
aws_access_key_id = AKIAPRODUCTIONKEY
aws_secret_access_key = productionsecretkeyexample
# ~/.aws/config
[profile production]
region = us-west-2
output = json
warning

لا تقم أبدًا بإيداع بيانات اعتماد AWS في التحكم بالإصدارات. أضف .aws/ إلى .gitignore، وفضّل أدوار IAM أو رموز STS قصيرة العمر على مفاتيح الوصول طويلة العمر. للإنتاج، استخدم aws-vault لإدارة بيانات الاعتماد مع MFA.

تثبيت AWS SAM CLI​

يتيح لك SAM CLI (نموذج التطبيق بلا خادم) البناء والاختبار محليًا ونشر التطبيقات القائمة على Lambda:

# Windows (باستخدام winget)
winget install AWS.SAM-CLI

# macOS (باستخدام Homebrew)
brew install aws-sam-cli

# التحقق
sam --version

تكامل AWS SDK​

تثبيت SDK لـ JavaScript​

لتطبيقات Node.js، ثبّت AWS SDK v3 المعياري:

npm install @aws-sdk/client-s3 @aws-sdk/client-lambda @aws-sdk/client-dynamodb
تلميح

AWS SDK v3 معياري — تقوم بتثبيت العملاء التي تحتاجها فقط، مما يقلل حجم الحزمة بشكل كبير مقارنة بـ SDK v2 الأحادي. كل خدمة هي حزمة منفصلة تحت @aws-sdk/client-*.

تكوين عميل SDK​

// lib/aws/clients.ts
import { S3Client } from '@aws-sdk/client-s3';
import { LambdaClient } from '@aws-sdk/client-lambda';
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';

const region = process.env.AWS_REGION ?? 'us-east-1';

export const s3Client = new S3Client({ region });
export const lambdaClient = new LambdaClient({ region });
export const dynamoClient = new DynamoDBClient({ region });

لبيانات اعتماد خاصة بالبيئة (مفيدة في CI):

import { fromIni } from '@aws-sdk/credential-providers';

export const s3Client = new S3Client({
region,
credentials: fromIni({ profile: 'production' }),
});

بناء ونشر دوال Lambda​

إنشاء معالج Lambda​

استخدم ذكاء Cursor لإنشاء معالج Lambda. افتح Ctrl+K وأدخل المطالبة:

Create an AWS Lambda handler in TypeScript using the @types/aws-lambda
package. It should accept an API Gateway proxy event, validate the JSON body
against a Zod schema, and return a 200 response with the processed result.
Include structured logging and error handling.

المعالج المُنشأ:

// src/handlers/createUser.ts
import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
import { z } from 'zod';

const userSchema = z.object({
name: z.string().min(1),
email: z.string().email(),
age: z.number().int().min(0).optional(),
});

export const handler = async (
event: APIGatewayProxyEvent
): Promise<APIGatewayProxyResult> => {
console.log('Received event:', JSON.stringify(event, null, 2));

try {
const body = JSON.parse(event.body ?? '{}');
const parsed = userSchema.parse(body);

const user = {
id: crypto.randomUUID(),
...parsed,
createdAt: new Date().toISOString(),
};

return {
statusCode: 201,
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(user),
};
} catch (error) {
console.error('Error processing request:', error);

if (error instanceof z.ZodError) {
return {
statusCode: 400,
body: JSON.stringify({ message: 'Validation failed', errors: error.errors }),
};
}

return {
statusCode: 500,
body: JSON.stringify({ message: 'Internal server error' }),
};
}
};

الاختبار المحلي مع SAM​

أنشئ template.yaml لـ SAM:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: User service Lambda

Resources:
CreateUserFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: dist/handlers
Handler: createUser.handler
Runtime: nodejs20.x
MemorySize: 256
Timeout: 30
Events:
CreateUser:
Type: Api
Properties:
Path: /users
Method: POST
Environment:
Variables:
TABLE_NAME: !Ref UsersTable

UsersTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: users
BillingMode: PAY_PER_REQUEST
AttributeDefinitions:
- AttributeName: id
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH

Outputs:
ApiUrl:
Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/users'

استدعِ الدالة محليًا بحدث نموذجي:

sam build
sam local invoke CreateUserFunction --event events/createUser.json

ملف حدث نموذجي:

{
"httpMethod": "POST",
"body": "{\"name\":\"Ada Lovelace\",\"email\":\"[email protected]\",\"age\":36}",
"headers": { "Content-Type": "application/json" }
}
تلميح

إضافة AWS Toolkit في Cursor تضيف أمر "Run Locally" لدوال Lambda. انقر بزر الماوس الأيمن على دالة في لوحة AWS Explorer واختر Invoke on AWS أو Run Locally للاختبار دون مغادرة المحرر.

النشر باستخدام SAM​

# النشر الأول (موجه)
sam deploy --guided

# عمليات النشر اللاحقة
sam deploy --stack-name user-service --capabilities CAPABILITY_IAM

تجمع المطالبة الموجهة:

Stack Name [sam-app]: user-service
AWS Region [us-east-1]: us-east-1
Confirm changes before deploy [Y/n]: Y
Allow SAM CLI IAM role creation [Y/n]: Y
Disable rollback [Y/n]: n
Save arguments to configuration file [Y/n]: Y
warning

عمليات نشر SAM تنشئ أدوار IAM تلقائيًا. راجع ملخص مجموعة التغييرات بعناية قبل التأكيد — الدور الذي تم تكوينه بشكل خاطئ قد يمنح أذونات واسعة جدًا تنتهك مبدأ الامتياز الأقل في الإنتاج.

العمل مع S3 للتخزين​

تحميل الملفات إلى S3​

// src/storage/upload.ts
import { s3Client } from '../aws/clients';
import { PutObjectCommand, GetObjectCommand } from '@aws-sdk/client-s3';
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';

const BUCKET = process.env.UPLOAD_BUCKET ?? 'my-app-uploads';

export async function uploadFile(
key: string,
body: Buffer,
contentType: string
): Promise<string> {
const command = new PutObjectCommand({
Bucket: BUCKET,
Key: key,
Body: body,
ContentType: contentType,
});

await s3Client.send(command);
return `s3://${BUCKET}/${key}`;
}

export async function getDownloadUrl(key: string, expiresIn = 3600): Promise<string> {
const command = new GetObjectCommand({ Bucket: BUCKET, Key: key });
return getSignedUrl(s3Client, command, { expiresIn });
}

بث الملفات الكبيرة​

للتحميلات الكبيرة، استخدم التحميد متعدد الأجزاء:

// src/storage/multipart.ts
import { s3Client } from '../aws/clients';
import {
CreateMultipartUploadCommand,
UploadPartCommand,
CompleteMultipartUploadCommand,
} from '@aws-sdk/client-s3';
import { createReadStream } from 'fs';

const BUCKET = process.env.UPLOAD_BUCKET ?? 'my-app-uploads';

export async function uploadLargeFile(key: string, filePath: string): Promise<void> {
const create = await s3Client.send(
new CreateMultipartUploadCommand({ Bucket: BUCKET, Key: key })
);
const uploadId = create.UploadId!;

const partSize = 5 * 1024 * 1024; // 5 MB minimum
const stream = createReadStream(filePath, { highWaterMark: partSize });
const parts: { ETag: string; PartNumber: number }[] = [];
let partNumber = 1;

for await (const chunk of stream) {
const upload = await s3Client.send(
new UploadPartCommand({
Bucket: BUCKET,
Key: key,
UploadId: uploadId,
PartNumber: partNumber,
Body: chunk,
})
);
parts.push({ ETag: upload.ETag!, PartNumber: partNumber });
partNumber++;
}

await s3Client.send(
new CompleteMultipartUploadCommand({
Bucket: BUCKET,
Key: key,
UploadId: uploadId,
MultipartUpload: { Parts: parts },
})
);
}
تلميح

استخدم ذكاء Cursor لإنشاء تدفقات URL المُوقّعة مسبقًا. المطالبة: "أنشئ دالة Lambda تنشئ URL تحميل S3 مُوقّعًا مسبقًا، وتتحقق من امتداد الملف، وتخزن البيانات الوصفية في DynamoDB."

CloudFormation كبنية تحتية ككود​

كتابة قوالب CloudFormation​

يتيح لك CloudFormation تعريف بنيتك التحتية بالكامل في YAML أو JSON تعريفي. ذكاء Cursor ممتاز في إنشاء القوالب من الأوصاف.

قالب نموذجي لمجموعة تطبيق ويب:

# templates/webapp.yaml
AWSTemplateFormatVersion: '2010-09-09'
Description: Production web application stack

Parameters:
Environment:
Type: String
Default: production
AllowedValues: [staging, production]

DomainName:
Type: String
Description: Custom domain name

Resources:
ApplicationBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub '${AWS::StackName}-app-${Environment}'
VersioningConfiguration:
Status: Enabled
LifecycleConfiguration:
Rules:
- Id: ExpireOldVersions
Status: Enabled
NoncurrentVersionExpirationInDays: 90
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
IgnorePublicAcls: true
RestrictPublicBuckets: true

CloudFrontDistribution:
Type: AWS::CloudFront::Distribution
Properties:
DistributionConfig:
Enabled: true
DefaultRootObject: index.html
Origins:
- DomainName: !GetAtt ApplicationBucket.RegionalDomainName
Id: S3Origin
S3OriginConfig: {}
DefaultCacheBehavior:
TargetOriginId: S3Origin
ViewerProtocolPolicy: redirect-to-https
AllowedMethods: [GET, HEAD]
CachedMethods: [GET, HEAD]
ForwardedValues:
QueryString: false
PriceClass: PriceClass_100
ViewerCertificate:
CloudFrontDefaultCertificate: true

ApiGateway:
Type: AWS::ApiGateway::RestApi
Properties:
Name: !Sub '${AWS::StackName}-api'
EndpointConfiguration:
Types: [REGIONAL]

Outputs:
WebsiteUrl:
Value: !Sub 'https://${CloudFrontDistribution.DomainName}'
Description: URL of the deployed website

نشر مجموعات CloudFormation​

# التحقق من القالب
aws cloudformation validate-template --template-body file://templates/webapp.yaml

# إنشاء المجموعة
aws cloudformation create-stack \
--stack-name webapp-production \
--template-body file://templates/webapp.yaml \
--parameters ParameterKey=Environment,ParameterValue=production \
ParameterKey=DomainName,ParameterValue=app.example.com \
--capabilities CAPABILITY_NAMED_IAM

# مراقبة النشر
aws cloudformation describe-stacks --stack-name webapp-production

# تحديث المجموعة
aws cloudformation update-stack \
--stack-name webapp-production \
--template-body file://templates/webapp.yaml \
--parameters ParameterKey=Environment,ParameterValue=production \
ParameterKey=DomainName,ParameterValue=app.example.com \
--capabilities CAPABILITY_NAMED_IAM
warning

قد تحل تحديثات CloudFormation محل الموارد. الموارد التي تحتوي على UpdateReplacePolicy: Retain تنجو من الاستبدال، لكن أي مورد بدونها يُحذف عند حذف المجموعة. راجع دائمًا مجموعة التغييرات قبل التطبيق:

aws cloudformation create-change-set --stack-name webapp-production --change-set-name my-change --template-body file://templates/webapp.yaml
aws cloudformation describe-change-set --stack-name webapp-production --change-set-name my-change

استخدام CDM كبديل​

يتيح لك AWS Cloud Development Kit (CDK) كتابة البنية التحتية بـ TypeScript. ينشئ ذكاء Cursor بنى CDK بشكل طبيعي.

// lib/webapp-stack.ts
import * as cdk from 'aws-cdk-lib';
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as apigateway from 'aws-cdk-lib/aws-apigateway';
import { Construct } from 'constructs';

export class WebappStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);

const bucket = new s3.Bucket(this, 'AppBucket', {
versioned: true,
encryption: s3.BucketEncryption.S3_MANAGED,
blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
lifecycleRules: [
{ id: 'ExpireOldVersions', noncurrentVersionExpiration: cdk.Duration.days(90) },
],
});

const distribution = new cloudfront.CloudFrontWebDistribution(this, 'Distribution', {
originConfigs: {
s3: {
s3OriginSource: { s3BucketSource: bucket },
behaviors: [{ isDefaultBehavior: true }],
},
},
});

const api = new apigateway.LambdaRestApi(this, 'Api', {
handler: new lambda.Function(this, 'Handler', {
runtime: lambda.Runtime.NODEJS_20_X,
code: lambda.Code.fromAsset('dist/handlers'),
handler: 'index.handler',
}),
});

new cdk.CfnOutput(this, 'WebsiteUrl', {
value: `https://${distribution.distributionDomainName}`,
});
}
}

النشر باستخدام CDK:

cdk synth
cdk deploy

إنشاء البنية التحتية بمساعدة الذكاء الاصطناعي​

إنشاء القوالب من المطالبات​

يتفوق Cursor في تحويل أوصاف اللغة الطبيعية إلى كود بنية تحتية. افتح محادثة (Ctrl+Shift+P → "Cursor: New Chat") وصف ما تحتاجه:

Generate a CloudFormation template for a serverless blog API. It should
include: an API Gateway with /posts and /posts/{id} routes, Lambda
functions for CRUD operations, a DynamoDB table with a GSI on the
authorId attribute, and an S3 bucket for media uploads with CORS
configured. Use least-privilege IAM roles.

ينشئ Cursor قالب YAML كامل. راجع سياسات IAM بعناية، ثم حسّن بطلب أذونات أكثر صرامة أو موارد إضافية.

تلميح

عند إنشاء سياسات IAM بالذكاء الاصطناعي، اطلب دائمًا سياسات "الامتياز الأقل" بشكل صريح. تميل المطالبات الغامضة إلى إنتاج سياسات مع Action: '*' على Resource: '*'، وهو خطر أمني خطير.

إنشاء بنى CDK​

للفرق التي تستخدم TypeScript أصليًا، اطلب من Cursor إنشاء كود CDK بدلاً من CloudFormation الخام:

Create a CDK construct called ServerlessApi that provisions an API
Gateway, three Lambda functions (get, create, delete), and a DynamoDB
table with on-demand billing. Expose the API URL as a construct property.

إعادة هيكلة البنية التحتية​

يمكن لـ Cursor إعادة هيكلة البنية التحتية الموجودة. التحولات الشائعة:

  • تحويل YAML CloudFormation الخام إلى CDK TypeScript.
  • تقسيم قالب أحادي إلى مجموعات متداخلة.
  • إضافة DeletionPolicy: Retain للموارد ذات الحالة لكشف الانحراف.
  • استبدال سياسات IAM المضمنة بسياسات مُدارة.

سير عمل النشر وتكامل CI​

النشر باستخدام GitHub Actions​

أنشئ .github/workflows/deploy.yml للنشر عند الدفع إلى main:

name: Deploy to AWS

on:
push:
branches: [main]

jobs:
deploy:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read

steps:
- uses: actions/checkout@v4

- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::123456789012:role/github-actions-deploy
aws-region: us-east-1

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm

- name: Install dependencies
run: npm ci

- name: Build
run: npm run build

- name: Run tests
run: npm test

- name: SAM build
run: sam build

- name: Deploy
run: sam deploy --stack-name ${{ vars.STACK_NAME }} --no-confirm-changeset --no-fail-on-empty-changeset --capabilities CAPABILITY_IAM
warning

لا تخزن أبدًا مفاتيح وصول AWS كأسرار GitHub Actions. استخدم اتحاد OIDC مع role-to-assume، كما هو موضح أعلاه. هذا يلغي بيانات الاعتماد طويلة العمر ويتوافق مع أفضل ممارسات أمان AWS.

عمليات النشر الأزرق-الأخضر باستخدام أسماء Lambda المستعارة​

تتيح الأسماء المستعارة لـ Lambda تحويل حركة المرور بين الإصدارات لعمليات النشر الأزرق-الأخضر:

# نشر إصدار جديد
aws lambda publish-version --function-name user-service

# تحديث الاسم المستعار لتوجيه 10% إلى الإصدار الجديد
aws lambda update-alias \
--function-name user-service \
--name production \
--routing-config AdditionalVersionWeights='{"2":0.1}'

# الترقية إلى 100% بعد التحقق
aws lambda update-alias \
--function-name user-service \
--name production \
--function-version 2 \
--routing-config AdditionalVersionWeights='{}'

المراقبة والتصحيح​

بث CloudWatch Logs​

يبث AWS Toolkit سجلات CloudWatch Logs إلى Cursor. في AWS Explorer:

  1. وسّع CloudWatch Logs.
  2. اختر مجموعة سجلات (مثل /aws/lambda/user-service).
  3. انقر بزر الماوس الأيمن واختر View Log Stream.

تظهر السجلات في علامة تبويب محرر للقراءة فقط مع تحديثات مباشرة.

تلميح

استخدم التسجيل المنظم في معالجات Lambda — السجلات بتنسيق JSON قابلة للاستعلام في CloudWatch Logs Insights:

console.log(JSON.stringify({
level: 'info',
message: 'User created',
userId: user.id,
timestamp: new Date().toISOString(),
}));

تتبع X-Ray​

فعّل تتبع X-Ray على Lambda لتصور تدفق الطلبات:

Resources:
CreateUserFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: dist/handlers
Handler: createUser.handler
Runtime: nodejs20.x
Tracing: Active

ثبّت SDK للتتبع:

npm install @aws-lambda-powertools/tracer
// src/handlers/createUser.ts
import { Tracer } from '@aws-lambda-powertools/tracer';
import { captureLambdaHandler } from '@aws-lambda-powertools/tracer/middleware';

const tracer = new Tracer({ serviceName: 'user-service' });

export const handler = captureLambdaHandler(tracer)(
async (event) => {
// ... handler logic
}
);

أفضل الممارسات لتطوير AWS في Cursor​

هيكل المشروع​

project/
├── src/
│ ├── handlers/ # نقاط دخول Lambda
│ ├── lib/ # منطق الأعمال المشترك
│ ├── aws/ # تكوين عملاء SDK
│ └── storage/ # أدوات S3 والتخزين
├── templates/ # CloudFormation YAML
├── lib/ # بنى CDK (إذا تم استخدام CDK)
├── events/ # حمولات أحداث Lambda النموذجية
├── tests/
├── template.yaml # قالب SAM
└── samconfig.toml # تكوين SAM

إدارة البيئات​

استخدم حسابات AWS منفصلة للتطوير والتجهيز والإنتاج. أدِرها بالملفات التعريفية:

export AWS_PROFILE=production
sam deploy --stack-name webapp-production

تحسين التكاليف​

  • استخدم فوترة PAY_PER_REQUEST لجداول DynamoDB ذات حركة المرور غير المتوقعة.
  • عيّن قواعد دورة حياة S3 لنقل الكائنات نادرة الوصول إلى فئات تخزين أرخص.
  • فعّل Lambda Provisioned Concurrency فقط للدوال الحساسة للزمن.
تلميح

يمكن لذكاء Cursor تدقيق تكاليف قوالب CloudFormation الخاصة بك. المطالبة: "راجع هذا القالب واقترح تحسينات التكلفة. حدد أي موارد مُخصصة بشكل مفرط واقترح الحجم المناسب."

قائمة مراجعة الأمان​

  • فعّل S3 Block Public Access على جميع الحاويات.
  • استخدم تشفير KMS للبيانات الحساسة في حالة السكون.
  • طبّق سياسات IAM للامتياز الأقل — لا تستخدم أبدًا Action: '*'.
  • فعّل CloudTrail لتسجيل التدقيق.
  • بدّل مفاتيح الوصول كل 90 يومًا، أو أزلها بأدوار IAM.

الأخطاء الشائعة وكيفية تجنبها​

ترميز ARN والمناطق بشكل ثابت​

تجنب تضمين ARN مباشرة في الكود — فإنها تفشل عبر الحسابات والمناطق:

// خطأ
const tableArn = 'arn:aws:dynamodb:us-east-1:123456789012:table/users';

// صحيح — مرر عبر متغير بيئة
const tableName = process.env.TABLE_NAME!;

نسيان أذونات IAM​

فشل نشر شائع هو دالة Lambda تفتقر إلى إذن الوصول إلى مورد. تنجح الدالة في النشر لكنها تفشل في وقت التشغيل بخطأ AccessDenied. اختبر دائمًا محليًا باستخدام SAM وتحقق من CloudWatch Logs بعد النشر.

تجاهل Cold Starts​

قد تضيف Cold Starts لـ Lambda زمنًا للطلب الأول بعد الخمول. خففها عبر:

  • استخدام حزم نشر أصغر.
  • توفير التزامن للدوال الحساسة للزمن.
  • إبقاء كود التهيئة خارج دالة المعالج.
warning

التزامن المُخصص يتحمل رسومًا حتى عندما لا يتم تقديم أي طلبات. راقب الاستخدام بعناية وعطّله لبيئات التطوير.

الخلاصة​

يبسط Cursor نشر AWS من خلال الجمع بين AWS Toolkit لإدارة الموارد وSAM CLI للاختبار المحلي وCloudFormation وCDK للبنية التحتية ككود ومساعد الذكاء الاصطناعي لإنشاء المعالجات والقوالب وسير عمل النشر. ابدأ بتثبيت AWS Toolkit وSAM CLI، وأنشئ دالة Lambda، ودع ذكاء Cursor يسرّع كتابة بنيتك التحتية. راجع دائمًا سياسات IAM للامتياز الأقل، واستخدم OIDC لعمليات نشر CI، وراقب باستخدام CloudWatch Logs وX-Ray للحفاظ على تطبيقات AWS آمنة وقابلة للملاحظة.