त्रुटियों पर ऑटो-रोलबैक के साथ एक नए Lambda संस्करण का क्रमिक रोलआउट।
भारित संस्करण रूटिंग (जैसे 90/10) के साथ उपनाम। CodeDeploy `LambdaCanary10Percent5Minutes` या `LambdaLinear*` ट्रैफिक को शिफ्ट करता है और CloudWatch अलार्म देखता है।
क्यों: बिल्ट-इन ट्रैफिक शिफ्टिंग + अलार्म-चालित रोलबैक हाथ से कोड किए गए कैनरी लॉजिक को हटा देता है।
जावा या पायथन Lambda भारी इनिशियलाइजेशन कोड के साथ; प्रोविजन्ड कंकरेंसी के लिए भुगतान किए बिना तेज़ कोल्ड स्टार्ट की आवश्यकता है।
प्रकाशित संस्करण पर SnapStart सक्षम करें। AWS आरंभ किए गए रनटाइम का स्नैपशॉट लेता है और उससे फिर से शुरू होता है।
क्यों: जावा के लिए मुफ्त; पायथन/.NET के लिए प्रति पुनर्स्थापना शुल्क लिया जाता है। निष्क्रिय लागत के बिना कोल्ड स्टार्ट को सेकंड से <1s तक कम कर देता है।
Lambda को एक Kinesis स्ट्रीम / DynamoDB स्ट्रीम / SQS कतार / MSK टॉपिक का उपभोग करने की आवश्यकता है।
इवेंट स्रोत मैपिंग (पुल-आधारित)। Lambda पोल करता है; बैच आकार + अधिकतम बैचिंग विंडो थ्रूपुट बनाम विलंबता को ट्यून करती है। विफलता → ऑन-फेल्योर डेस्टिनेशन के माध्यम से DLQ।
क्यों: पुल स्रोतों के लिए, सेवा सीधे Lambda को आह्वान नहीं कर सकती; मैपिंग Lambda का पोलिंग एडाप्टर है।
HTTP API: सस्ता, तेज़, JWT प्रमाणीकरण अंतर्निहित, सरल। REST API: पूर्ण सुविधाएँ (मैपिंग टेम्पलेट्स, रिक्वेस्ट वैलिडेटर्स, WAF, निजी एंडपॉइंट्स, X-Ray, API कैशिंग)।
क्यों: डिफ़ॉल्ट रूप से HTTP API का उपयोग करें जब तक कि आपको REST-ओनली सुविधा की आवश्यकता न हो। WebSocket APIs स्टेटफुल रीयल-टाइम के लिए एक अलग उत्पाद हैं।
रिक्वेस्ट को रूट करने से पहले एक कस्टम टोकन (Cognito नहीं, IAM नहीं) को मान्य करें।
Lambda authorizer। TOKEN प्रकार एक हेडर पढ़ता है; REQUEST प्रकार पूर्ण रिक्वेस्ट संदर्भ पढ़ता है। IAM नीति + principalId लौटाता है। TTL के लिए प्रति पहचान कैश किया जाता है।
प्राथमिक कुंजी के अलावा एक अतिरिक्त एक्सेस पैटर्न की आवश्यकता है।
GSI: वैकल्पिक विभाजन + सॉर्ट कुंजी, अंततः सुसंगत, अलग क्षमता, कभी भी जोड़ा जा सकता है। LSI: समान विभाजन कुंजी, वैकल्पिक सॉर्ट कुंजी, मजबूत-संगति विकल्प, तालिका निर्माण के समय बनाया जाना चाहिए।
SDK से एक बड़ी फ़ाइल (≫100 MB) को मज़बूती से अपलोड करें।
`CreateMultipartUpload` → समानांतर `UploadPart` → `CompleteMultipartUpload`। SDK उच्च-स्तरीय ट्रांसफर मैनेजर स्वचालित रूप से भाग के आकार को संभालता है।
क्यों: >5 GB आवश्यक; ≥100 MB अनुशंसित। असफल भागों को स्वतंत्र रूप से पुनः अपलोड करें। अपूर्ण मल्टीपार्ट्स को रद्द करने के लिए जीवनचक्र सेट करें ताकि संग्रहण पुनः प्राप्त हो सके।
सार्वजनिक मोबाइल/वेब क्लाइंट से पासवर्ड भेजे बिना उपयोगकर्ता को साइन इन करें।
`USER_SRP_AUTH` प्रवाह के साथ Cognito User Pool। क्लाइंट SRP प्रूफ की गणना करता है; बैकएंड कभी पासवर्ड नहीं देखता। ID + एक्सेस + रिफ्रेश टोकन लौटाता है।
Standard: लंबे समय तक चलने वाला (≤1 वर्ष), ठीक-एक-बार, $0.025/1k ट्रांज़िशन, पूर्ण इतिहास। Express: ≤5 मिनट, कम से कम-एक-बार या अधिक से अधिक-एक-बार, प्रति रिक्वेस्ट + अवधि बिल किया जाता है; उच्च-मात्रा ETL/स्ट्रीमिंग के लिए।
वर्कफ़्लो चरण विफल हो जाता है; बैकऑफ़ के साथ पुनः प्रयास करना चाहते हैं और रिकवरी स्थिति में रूट करना चाहते हैं।
`Retry` सरणी (प्रति-स्थिति, `BackoffRate` + `MaxAttempts` के साथ) और टर्मिनल विफलता रूटिंग के लिए `Catch`। `ErrorEquals` (जैसे `States.TaskFailed`, कस्टम त्रुटि नाम) द्वारा मिलान करें।
संदेशों को ग्राहक के अनुसार कड़ाई से क्रम में संसाधित करें, डुप्लीकेशन के साथ।
SQS FIFO कतार। `MessageGroupId` आदेश (प्रति समूह समानता) को विभाजित करता है; `MessageDeduplicationId` (या सामग्री-आधारित डेडुप) 5 मिनट के भीतर डुप्लिकेट हटाता है।
उपभोक्ता एक संदेश खींचता है लेकिन उसे हटाने से पहले क्रैश हो जाता है।
संदेश VisibilityTimeout सेकंड के लिए छिपा रहता है, फिर पुनः वितरण के लिए फिर से प्रकट होता है। सबसे लंबे अपेक्षित प्रसंस्करण समय + बफर के लिए ट्यून करें।
क्यों: बहुत कम → डुप्लिकेट प्रसंस्करण। बहुत लंबा → क्रैश पर धीमी रिकवरी। यदि आवश्यक हो तो ChangeMessageVisibility इन-फ़्लाइट को बढ़ाता है।
EC2 / ECS टास्क / Lambda पर कोड को AWS एक्सेस की आवश्यकता है - कोई एम्बेडेड कुंजी नहीं।
इंस्टेंस प्रोफ़ाइल (EC2) या टास्क/एक्ज़ीक्यूशन भूमिका (ECS/Lambda) के माध्यम से एक IAM भूमिका संलग्न करें। SDK मेटाडेटा सेवा से अस्थायी क्रेडेंशियल खींचता है; ऑटो-रोटेट होता है।
कॉलर प्रिंसिपल से `sts:AssumeRole`। लक्ष्य भूमिका की ट्रस्ट नीति कॉलर को `Principal` के रूप में सूचीबद्ध करती है। अस्थायी क्रेडेंशियल लौटाता है (अधिकतम 12 घंटे)।
क्रॉस-अकाउंट AssumeRole विफल हो रहा है - अनुमति सही प्रतीत होती है।
दोनों को सेट किया जाना चाहिए: लक्ष्य भूमिका पर ट्रस्ट नीति कॉलर को प्रिंसिपल के रूप में सूचीबद्ध करती है; कॉलर की पहचान नीति लक्ष्य भूमिका ARN पर `sts:AssumeRole` की अनुमति देती है।
क्यों: ट्रस्ट = कौन मान सकता है। अनुमति = एक बार माने जाने के बाद वे क्या कर सकते हैं। कोई भी गायब → AccessDenied।
एक टीम को IAM भूमिकाओं को स्वयं प्रबंधित करने दें, लेकिन वे क्या अनुमतियाँ दे सकते हैं, उस पर सीमा लगाएँ।
टीम की निर्माता भूमिका पर अनुमति सीमा नीति। वे जो भी भूमिका सीमा के साथ बनाते हैं, उसमें पहचान नीति + सीमा का प्रतिच्छेदन प्रभावी अनुमतियों के रूप में होता है।
SPA / मोबाइल क्लाइंट बनाम सर्वर-साइड सेवा जो Cognito को कॉल कर रही है।
सार्वजनिक क्लाइंट (SPA, मोबाइल) → बिना सीक्रेट के ऐप क्लाइंट। गोपनीय क्लाइंट (सर्वर) → सीक्रेट के साथ ऐप क्लाइंट; क्लाइंट को `SECRET_HASH` (उपयोगकर्ता नाम + क्लाइंट ID का HMAC) शामिल करना होगा।
Cognito ID टोकन बनाम एक्सेस टोकन बनाम रिफ्रेश टोकन को अलग करें।
ID = उपयोगकर्ता पहचान दावे (क्लाइंट पर उपभोग करें)। एक्सेस = APIs के लिए सीमित प्राधिकरण। रिफ्रेश = नए ID/एक्सेस टोकन प्राप्त करें। रिफ्रेश को छोड़कर सभी JWT।
एक छोटे रहस्य (≤4 KB) को सीधे KMS के साथ एन्क्रिप्ट करें।
`kms:Encrypt` कुंजी ARN युक्त सिफरटेक्स्ट ब्लब लौटाता है। यदि कॉलर के पास अनुमति है और (यदि निर्दिष्ट है) `EncryptionContext` मेल खाता है, तो `kms:Decrypt` प्लेनटेक्स्ट को पुनर्प्राप्त करता है।
4 KB की सीधी-एन्क्रिप्ट सीमा को हिट किए बिना KMS के साथ बड़े डेटा को एन्क्रिप्ट करें।
लिफाफा एन्क्रिप्शन। `GenerateDataKey` प्लेनटेक्स्ट + एन्क्रिप्टेड DEK लौटाता है; DEK के साथ स्थानीय रूप से डेटा एन्क्रिप्ट करें, एन्क्रिप्टेड DEK को साथ में स्टोर करें, प्लेनटेक्स्ट DEK को छोड़ दें।
क्यों: KMS छोटे DEK पर एक्सेस नियंत्रण लागू करता है; बल्क एन्क्रिप्शन स्थानीय रूप से लाइन की गति पर होता है।
एक KMS कुंजी को अप्रत्यक्ष रूप से संदर्भित करें ताकि अंतर्निहित CMK कोड परिवर्तनों के बिना घूम सके।
`alias/my-key` (या `arn:aws:kms:region:acct:alias/my-key`) का उपयोग करें। उपनाम को एक नए CMK की ओर इंगित करने के लिए अपडेट करें; उपभोक्ता काम करना जारी रखते हैं।
Aurora/RDS/DocumentDB/Redshift के लिए Secrets Manager नेटिव रोटेशन (प्रबंधित Lambda)। मास्टर/उपयोगकर्ता पैटर्न उपयोगकर्ता सीक्रेट को घुमाने के लिए एक अलग मास्टर सीक्रेट का उपयोग करता है।
KMS एन्क्रिप्शन के साथ एक कॉन्फ़िग मान को Parameter Store में बाकी पर स्टोर करें।
SecureString पैरामीटर प्रकार। एक कस्टम CMK के लिए `--key-id` निर्दिष्ट करें; अन्यथा `aws/ssm` का उपयोग करता है। डिक्रिप्ट के लिए CMK पर `kms:Decrypt` की आवश्यकता होती है।
क्लाउडफ्रंट एक्सेस को प्रमाणित उपयोगकर्ताओं तक सीमित करें।
हस्ताक्षरित URL (एकल संसाधन) या हस्ताक्षरित कुकीज़ (कई संसाधन, SPAs/स्ट्रीमिंग)। CloudFront कुंजी समूह में सार्वजनिक कुंजी के रूप में संग्रहीत CloudFront कुंजी जोड़ी के साथ हस्ताक्षर करें।
SSE-S3 (प्रबंधित AES-256, डिफ़ॉल्ट), SSE-KMS (CMK, CloudTrail के माध्यम से ऑडिट, कुंजी नीति), SSE-C (ग्राहक-आपूर्ति की गई कुंजी, आप प्रबंधित करते हैं), DSSE-KMS (उच्च-अनुपालन के लिए डबल-लेयर)।
Lambda डिफ़ॉल्ट रूप से KMS के साथ बाकी पर env vars को एन्क्रिप्ट करता है। इन-ट्रांज़िट/एट-डिक्रिप्ट नियंत्रण के लिए, एक कस्टम CMK कॉन्फ़िगर करें और पूर्व-एन्क्रिप्टेड सिफरटेक्स्ट भेजने के लिए इन-कंसोल एन्क्रिप्शन सहायकों का उपयोग करें।
ब्राउज़र → API Gateway के साथ `Authorization` हेडर प्रीफ़्लाइट द्वारा अवरुद्ध हो जाता है।
OPTIONS विधि (मॉक एकीकरण) जोड़ें। `Access-Control-Allow-Headers` में `Authorization` की अनुमति दें; `Access-Control-Allow-Origin` में कॉलर्स की अनुमति दें।
गैर-SDK कोड से एक AWS सेवा के लिए एक कस्टम HTTP रिक्वेस्ट पर हस्ताक्षर करें।
Sigv4: सीक्रेट + दिनांक + क्षेत्र + सेवा से हस्ताक्षर कुंजी प्राप्त करें; रिक्वेस्ट को कैननिकल करें; हस्ताक्षर करें; `Authorization`, `X-Amz-Date`, `X-Amz-Security-Token` हेडर जोड़ें।
एक ALB के पीछे एक ECS सेवा के लिए ब्लू/ग्रीन डिप्लॉयमेंट।
CodeDeploy कंप्यूट प्लेटफ़ॉर्म = ECS। ग्रीन टास्क सेट बनाता है; ALB लिसनर को ग्रीन टारगेट ग्रुप में शिफ्ट करता है; ट्रैफिक स्विच से पहले और ब्लू को समाप्त करने से पहले वैकल्पिक मैन्युअल अनुमोदन।
बिना पूर्ण-फ्लीट डाउनटाइम के एक EC2 फ्लीट को अपडेट करें।
`OneAtATime` / `HalfAtATime` / `AllAtOnce` कॉन्फ़िग के साथ इन-प्लेस डिप्लॉयमेंट। ऑटो स्केलिंग ग्रुप हुक डिप्लॉय के दौरान नए इंस्टेंस लॉन्च को रोकते हैं।
IAM-नियंत्रित एक्सेस के साथ AWS के भीतर Git रिपोज़ होस्ट करें।
CodeCommit। प्रमाणीकरण: प्रति IAM उपयोगकर्ता SSH कुंजी, प्रति IAM उपयोगकर्ता HTTPS Git क्रेडेंशियल, या AWS CLI क्रेडेंशियल हेल्पर। पुश पर SNS / Lambda के माध्यम से ट्रिगर।
CDK: प्रोग्रामिंग भाषाएँ (TS/Python/Java/Go/.NET), पूर्ण ऐप कंस्ट्रक्ट्स, मल्टी-रिसोर्स पैटर्न। SAM: CFN का YAML एक्सटेंशन, सर्वरलेस पर केंद्रित, सरल। दोनों CloudFormation में संकलित होते हैं।
`App` में एक या अधिक `Stack` होते हैं। प्रत्येक स्टैक में कंस्ट्रक्ट्स (L1/L2/L3) होते हैं। `cdk synth` → CFN टेम्पलेट। `cdk deploy` CFN के माध्यम से डिप्लॉय करता है।
L1 = रॉ CFN (`CfnXxx`)। L2 = सुरक्षित डिफ़ॉल्ट के साथ क्यूरेटेड रैपर्स (सबसे आम)। L3 = पूर्ण आर्किटेक्चर के लिए कई संसाधनों को संयोजित करने वाले पैटर्न (जैसे `LambdaRestApi`)।
CloudFormation स्टैक पर लागू करने से पहले परिवर्तनों का पूर्वावलोकन करें।
`create-change-set` → परिवर्धन/संशोधन/प्रतिस्थापन के JSON की समीक्षा करें → `execute-change-set`। प्रतिस्थापन क्रियाएँ संसाधन पुनर्निर्माण का कारण बनती हैं।
CloudFormation स्वचालित रूप से रोलबैक करता है जब तक कि `DisableRollback` सत्य न हो। `UPDATE_ROLLBACK_FAILED` में फंसा हुआ? `ResourcesToSkip` के साथ `ContinueUpdateRollback` का उपयोग करें।
स्टैक अपडेट के दौरान एक महत्वपूर्ण संसाधन (जैसे RDS DB) के आकस्मिक अपडेट को रोकें।
स्टैक नीति: संसाधन के तार्किक ID पर `Update:Replace` और `Update:Delete` को अस्वीकार करने वाला JSON। एक विशिष्ट अपडेट पर स्पष्ट ओवरराइड के साथ बाईपास करें।
एकल पैरेंट के स्वामित्व वाले पुन: उपयोग के लिए नेस्टेड स्टैक (`AWS::CloudFormation::Stack` के साथ `TemplateURL`)। अलग-अलग स्टैक के बीच अधिक कसकर युग्मन के लिए Outputs + `Fn::ImportValue` के माध्यम से क्रॉस-स्टैक।
एक पैरामीटर स्टोर मान या सीक्रेट्स मैनेजर सीक्रेट को CFN टेम्पलेट में इंजेक्ट करें।
`{{resolve:ssm:/path/to/param}}`, `{{resolve:ssm-secure:/path}}`, `{{resolve:secretsmanager:secret-id:SecretString:json-key}}`। डिप्लॉय के समय हल किया गया।
ऑल-एट-वंस (सबसे तेज़, डाउनटाइम), रोलिंग (कोई अतिरिक्त इंस्टेंस नहीं, आंशिक क्षमता), अतिरिक्त बैच के साथ रोलिंग (कोई क्षमता हानि नहीं, अतिरिक्त लागत), अपरिवर्तनीय (नया ASG, सबसे सुरक्षित), ब्लू/ग्रीन (अलग वातावरण, CNAMEs स्वैप करें)।
एक स्थिर, कभी-परिवर्तनशील Lambda आर्टिफैक्ट की आवश्यकता है।
एक संख्यात्मक संस्करण प्रकाशित करें। कोड + अधिकांश कॉन्फ़िग (मेमोरी, टाइमआउट, env vars, लेयर) जम जाते हैं। `$LATEST` परिवर्तनीय है; संख्यात्मक संस्करण नहीं हैं।
ECS / EKS / Lambda के लिए एक Docker इमेज को ECR पर पुश करें।
`aws ecr get-login-password | docker login` → `docker tag` → `docker push`। Lambda कंटेनर इमेज: डिप्लॉय के समय इमेज एक बार खींची जाती है; टैग की गई इमेज उसी क्षेत्र में होनी चाहिए।
ECS पर एक बार का बैच बनाम एक लंबी-चलने वाली वेब सेवा चलाएँ।
RunTask = एकल कार्य, पूरा होता है और बाहर निकलता है। सेवा = N वांछित कार्यों को बनाए रखती है, विफलताओं को पुनरारंभ करती है, ALB/NLB के साथ एकीकृत होती है।
एक X-Ray ट्रेस में खोज योग्य बनाम संदर्भ डेटा संलग्न करें।
एनोटेशन: इंडेक्स किए गए, कंसोल में फ़िल्टर करने योग्य (जैसे `customerId`, `tier`)। मेटाडेटा: इंडेक्स नहीं किए गए, फ्री-फॉर्म (रिक्वेस्ट बॉडी, डिबग के लिए प्रतिक्रिया बॉडी)।
Lambda कोल्ड स्टार्ट p99 विलंबता लक्ष्यों को हिट करते हैं।
पूर्वानुमेय लोड के लिए प्रोविजन्ड कंकरेंसी। Java/Python init-heavy कोड के लिए SnapStart। स्लिम डिप्स, ARM/Graviton का उपयोग करें, भारी init को हैंडलर के बाहर ले जाएँ।
सर्वोत्तम लागत/विलंबता के लिए Lambda मेमोरी चुनें।
मेमोरी CPU + नेटवर्क को भी स्केल करती है। अपने वर्कलोड के लिए स्वीट स्पॉट खोजने और मेमोरी को स्वीप करने के लिए AWS Lambda Power Tuning स्टेट मशीन का उपयोग करें।
Lambda से `TooManyRequestsException`; समवर्ती सीमा हिट हुई।
प्रति फ़ंक्शन आरक्षित समवर्ती (कैप्स + भंडार) या रिक्वेस्ट खाता-स्तर की सीमा वृद्धि। अतुल्यकालिक आह्वान कतारबद्ध होते हैं और पुनः प्रयास करते हैं; सिंक्रोनस आह्वान त्रुटि देते हैं।
DynamoDB `ProvisionedThroughputExceededException` लौटाता है।
CloudWatch `WriteThrottleEvents` / `ReadThrottleEvents`। ऑन-डिमांड मोड पर स्विच करें, प्रोविजन्ड क्षमता बढ़ाएँ, या बेहतर कुंजी डिज़ाइन के साथ एक हॉट पार्टीशन को ठीक करें।
एक पार्टीशन कुंजी को असंगत ट्रैफिक मिलता है; कम कुल लोड के तहत थ्रॉटलिंग।
उच्च कार्डिनैलिटी के साथ पार्टीशन कुंजी को फिर से डिज़ाइन करें। राइट्स के लिए: रैंडम शार्ड (जैसे `shard#user`) के साथ उपसर्ग; रीड्स के लिए: शार्ड्स में स्कैटर-गैदर।
लेज़ी लोडिंग (कैश मिस → DB → कैश पॉपुलेट करें): केवल अनुरोधित डेटा को कैश करें, लेकिन बासी होने की संभावना है। राइट-थ्रू (प्रत्येक राइट पर कैश + DB पर लिखें): हमेशा ताज़ा, लेकिन राइट्स की अतिरिक्त लागत होती है। TTL किसी भी तरह से बासीपन को सीमित करता है।
डिफ़ॉल्ट खाता-स्तर: 10,000 req/sec + 5,000 बर्स्ट। प्रति-स्टेज और प्रति-विधि ओवरराइड; पार्टनर-टियर नियंत्रण के लिए उपयोग योजनाओं के माध्यम से प्रति-कुंजी थ्रॉटल।
AWS SDK एक्सपोनेंशियल बैकऑफ़ + जिटर के साथ स्वचालित रूप से पुनः प्रयास करता है। `RetryMode = adaptive` या `standard` कॉन्फ़िगर करें; `maxAttempts` को ट्यून करें।
पथों को अमान्य करें (`/index.html`, `/*`) - 1000/माह मुफ्त से अधिक पथों पर बिल किया जाता है। बेहतर: संस्करणित फ़ाइल नाम (`app.abc123.js`) ताकि कैश स्वाभाविक रूप से बाईपास हो जाए।