15.7
Step Functions আর Cognito
ধাপে ধাপে সাজানো workflow, user pool বনাম identity pool, আর অ্যাপের user-দের জন্য row-level security।
24 মিনিট পড়া + Animation
টিপস: ডটেড-আন্ডারলাইন করা যেকোনো শব্দে ট্যাপ বা Hover করলে তার অর্থ দেখবে।
এই লেসন শেষে তুমি পারবে
- বুঝিয়ে বলতে, কেন কয়েক ধাপের একটা কাজ (একটা order, একটা loan, একটা data job) Lambda function দিয়ে একটা আরেকটাকে ডাকানোর বদলে AWS Step Functions-এর state machine-এ রাখা উচিত।
- Task, Choice, Wait, Parallel, Map, Pass, Succeed আর Fail state, সাথে Retry আর Catch rule দিয়ে ছোট একটা Amazon States Language definition পড়তে আর লিখতে।
- Callback pattern (
.waitForTaskToken) দিয়ে একজন মানুষের জন্য workflow থামিয়ে রাখতে, আর তিনটা service integration pattern চিনতে। - সময়, execution-এর নিশ্চয়তা, history আর দাম দেখে Standard আর Express workflow-এর মধ্যে বেছে নিতে, আর দুটোরই মাসিক bill হিসাব করতে।
- Cognito user pool কী (sign-up, sign-in, MFA, federation, managed login, JWT, feature plan) সেটা বলতে, আর একে API Gateway আর ALB-র সাথে জুড়তে।
- Cognito identity pool দিয়ে app-এর user-দের অস্থায়ী AWS credential দিতে, guest access আর DynamoDB-তে row-level security (
dynamodb:LeadingKeys) সহ। - পরীক্ষার keyword দেখে user pool আর identity pool, আর Cognito আর IAM আলাদা করতে।
#কেন orchestration: function দিয়ে function ডাকার ঝামেলা
Lesson 15.1 থেকে 15.6 পর্যন্ত তুমি যন্ত্রাংশগুলো পেয়েছ: Lambda function, DynamoDB table, সামনে একটা API। কিন্তু বাস্তবের business process খুব কমই একটা function-এ শেষ হয়। এগুলো আসলে ধাপের পর ধাপ, মাঝে সিদ্ধান্ত, অপেক্ষা আর fail।
তুমি চাইলে Payment function থেকে সরাসরি Inventory function ডাকতে পারো, আর Inventory থেকে Shipping। প্রথম দিন কাজ চলবে, তারপর প্রতিদিন ভোগাবে:
- প্রতিটা function-কে পরেরটা চিনতে হয়। ধাপের ক্রম বদলালে তিনটা function আবার deploy করতে হয়।
- Error সামলানো তোমার code-এর ঘাড়ে। প্রতিটা function-এ নিজের retry loop, backoff আর “আমি যা করেছি তা উল্টাও” logic লাগে।
- অপেক্ষার জন্যও টাকা দাও। যে function আরেকটার জন্য synchronous ভাবে অপেক্ষা করে, পুরো অপেক্ষার সময়টার bill তার নামে ওঠে, আর সে Lambda-র ১৫ মিনিটের সীমার বেশি কখনো অপেক্ষা করতে পারে না (lesson 15.2)। Manager-এর জন্য দুই দিন অপেক্ষা? অসম্ভব।
- কোন order কোথায় আছে কেউ জানে না। অবস্থাটা কয়েকটা function-এর log-এ ছড়িয়ে-ছিটিয়ে থাকে।
Step Functions এই সবকিছু এক জায়গায় নিয়ে আসে: একটা state machine, যে প্রতিটা ধাপ ডাকে, data এগিয়ে দেয়, retry করে, error ধরে, অপেক্ষা করে, আর প্রতিটা execution-এর (workflow-এর একবারের run, যেমন একটা order) history লিখে রাখে।
#AWS Step Functions: state machine
#Amazon States Language আর Workflow Studio
State machine লেখা হয় Amazon States Language (ASL)-এ, এটা একটা JSON document, যেখানে state-গুলোর তালিকা আর কোনটার পর কোনটা, সেটা থাকে। হাতে টাইপ করতে হয় কমই: console-এর drag-and-drop designer Workflow Studio (AWS Toolkit দিয়ে Visual Studio Code-এও আছে) graph আঁকে আর তোমার হয়ে ASL লিখে দেয়। তারপর console-এ প্রতিটা execution তুমি সেই graph হিসেবেই দেখো: প্রতিটা state সবুজ, লাল বা চলছে, সাথে তার input আর output।
ছোট করে order workflow-টা:
{
"Comment": "Order workflow for the Dhaka shop",
"StartAt": "Charge payment",
"States": {
"Charge payment": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Arguments": { "FunctionName": "payment-example", "Payload": "{% $states.input %}" },
"Output": "{% $states.result.Payload %}",
"Next": "Paid?"
},
"Paid?": {
"Type": "Choice",
"Choices": [{ "Condition": "{% $states.input.payment = 'paid' %}", "Next": "Reserve stock" }],
"Default": "Payment declined"
},
"Reserve stock": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Arguments": { "FunctionName": "inventory-example", "Payload": "{% $states.input %}" },
"Retry": [{
"ErrorEquals": ["Lambda.TooManyRequestsException", "States.TaskFailed"],
"IntervalSeconds": 2, "BackoffRate": 2, "MaxAttempts": 3
}],
"Catch": [{ "ErrorEquals": ["States.ALL"], "Next": "Refund payment" }],
"Next": "Ship and notify"
},
"Ship and notify": { "Type": "Parallel", "Branches": ["…ship…", "…SNS publish…"], "Next": "Done" },
"Refund payment": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Arguments": { "FunctionName": "refund-example" }, "Next": "Order failed" },
"Payment declined": { "Type": "Fail", "Error": "PaymentDeclined", "Cause": "Card declined" },
"Order failed": { "Type": "Fail", "Error": "OrderFailed" },
"Done": { "Type": "Succeed" }
},
"QueryLanguage": "JSONata"
}
#আট রকমের state
| State | কী করে | রোজকার উদাহরণ |
|---|---|---|
| Task | একটা কাজ করে: Lambda function ডাকে, কোনো AWS service ডাকে, ECS task চালায়, HTTPS API ডাকে, বা activity worker-এর অপেক্ষা করে | Card থেকে টাকা কাটা |
| Choice | Data দেখে শাখা বাছে, if / switch-এর মতো; সবসময় একটা Default দিয়ো | Paid? Declined? |
| Wait | কয়েক সেকেন্ড বা একটা নির্দিষ্ট সময় পর্যন্ত থামে, কোনো compute খরচ ছাড়া | Delivery-র ৭ দিন পর review চাওয়া |
| Parallel | কয়েকটা branch একসাথে চালায়, সবগুলো শেষ হলে এগোয়; একটা branch fail করলে পুরো state fail | পাঠানো আর জানানো একসাথে |
| Map | একটা array-র প্রতিটা item-এর জন্য (inline), বা S3-এর বিশাল data-র জন্য (distributed) একই ধাপ চালায় | Order-এর প্রতিটা item আটকে রাখা |
| Pass | Input-কে output-এ পাঠিয়ে দেয়, চাইলে data যোগ করে বা নতুন আকারে সাজায়; default বসাতে আর test-এ কাজে লাগে | "currency": "BDT" যোগ করা |
| Succeed | Execution (বা একটা branch) সফলভাবে শেষ করে | Order সম্পূর্ণ |
| Fail | Execution-টা failed হিসেবে শেষ করে, error-এর নাম আর কারণ তুমিই দাও | Payment declined |
Slide-এর feature তালিকা এক লাইনে: sequence, parallel, condition (Choice), timeout, error handling, সবই configuration।
একটা order, একটা state machine: ধাপগুলো চালায় Step Functions
ঢাকার একটা e-commerce shop প্রতিটা order তিন ধাপে সামলায়: payment কাটো, stock আটকে রাখো, পাঠিয়ে দাও। প্রতিটা ধাপ একটা ছোট Lambda function। এরপর কোনটা চলবে সেটা ঠিক করে Step Functions, যেটা fail করে সেটা আবার চালায়, আর প্রতিটা order কোথায় আছে মনে রাখে।
পরিস্থিতি
Start → Task (payment) → Choice → Task (stock) → Parallel (পাঠানো + খবর দেওয়া) → Succeed।
Execution order-5501
state
Start
orderId
5501
amount
২,৪৫০ টাকা
status
চলছে
Checkout API প্রতিটা order-এর জন্য state machine-এর একটা execution চালু করে, আর order-টা JSON input হিসেবে দিয়ে দেয়। এখান থেকে API-র ছুটি: সে অপেক্ষা করে না, ধাপগুলো কী কী সেটাও তার জানার দরকার নেই।
#Retry আর Catch
যেকোনো Task, Parallel বা Map state-এ error সামলানোর দুটো অংশ থাকতে পারে।
- Retry: কয়েকটা rule-এর তালিকা, প্রতিটায়
ErrorEquals(কোন error),IntervalSeconds(প্রথম অপেক্ষা, default ১),BackoffRate(গুণক, default ২.০),MaxAttempts(default ৩; ০ মানে কখনো retry না), আর চাইলেMaxDelaySecondsআর retry ছড়িয়ে দিতেJitterStrategy: FULL। Interval ২ আর backoff ২ হলে অপেক্ষা হয় ২, ৪ আর ৮ সেকেন্ড। - Catch: Retry শেষ হয়ে গেলে (বা যে error-এর কোনো retry rule নেই তার জন্য), মিলে যাওয়া একটা catcher execution-কে একটা উদ্ধারের state-এ পাঠায়, error-টা data-র ভেতরে রেখে। কোনো catcher না মিললে পুরো execution fail করে।
যে error-এর নাম চিনে রাখা দরকার: States.ALL (সব error-এর সাথে মেলে), States.TaskFailed, States.Timeout (কোনো state তার TimeoutSeconds-এর বেশি চলেছে, বা execution সর্বোচ্চ সীমায় পৌঁছেছে), States.HeartbeatTimeout, States.Permissions, States.NoChoiceMatched, আর service-এর error যেমন Lambda.TooManyRequestsException বা Lambda.ServiceException, সাথে তোমার function-এর ছোড়া যেকোনো নিজস্ব error।
Order animation-এর “Catch আর refund” scenario-টা হলো saga pattern: পরের কোনো ধাপ fail করলে compensating action চালাও, যা আগের ধাপগুলো উল্টে দেয় (payment ফেরত, stock ছেড়ে দেওয়া)। AWS-এ saga বানানোর চেনা উপায় Step Functions, কারণ Catch rule উল্টানোর পথটা চোখের সামনে আর নির্ভরযোগ্য করে রাখে।
Fail করা একটা Standard execution ১৪ দিনের মধ্যে redrive করা যায়: কারণটা ঠিক করার পর এটা শুরু থেকে না, যে state-এ fail করেছিল সেখান থেকে আবার চলে, তাই customer-এর টাকা দ্বিতীয়বার কাটে না।
#মানুষের জন্য অপেক্ষা: callback pattern
Slide-এ আছে human approval feature, আর notes পরীক্ষার কৌশলটা দিয়ে দিয়েছে: কোনো process শেষ হতে কয়েক ঘণ্টা বা কয়েক দিন লাগতে পারলে, যেমন manual approval-এর অপেক্ষা, উত্তর হবে Standard workflow সহ Step Functions।
Service ডাকা প্রতিটা Task তিনটা service integration pattern-এর কোনো একটা ব্যবহার করে:
| Pattern | ARN-এর suffix | Step Functions… | উদাহরণ |
|---|---|---|---|
| Request Response | (নেই) | Service ডাকে, HTTP response পায়, সাথে সাথে এগিয়ে যায় | SNS-এ publish, DynamoDB-তে item রাখা |
| Run a job | .sync | Job চালু করে আর শেষ না হওয়া পর্যন্ত অপেক্ষা করে | ECS task, Glue job, Batch job, একটা child workflow চালাও, শেষ হলে এগোও |
| Wait for callback | .waitForTaskToken | কারও কাছে একটা task token পাঠায় আর token ফেরত না আসা পর্যন্ত থেমে থাকে | Manager-কে email, বাইরের কোনো system বা মানুষের জন্য অপেক্ষা |
Callback pattern-এ Step Functions যে message পাঠায় (একটা SNS email, একটা SQS message, একটা Lambda payload) তার ভেতরে একটা অনন্য task token রেখে দেয়। কাজ যে শেষ করে, সে token-টা ফেরত দিয়ে SendTaskSuccess (output সহ) বা SendTaskFailure (error সহ) ডাকে। লম্বা সময় চলা worker SendTaskHeartbeat-ও ডাকতে পারে; থেমে গেলে HeartbeatSeconds task-টাকে fail করায়। Callback Task-এ সবসময় TimeoutSeconds দিয়ো, নইলে সেটা এক বছরের সর্বোচ্চ সীমা পর্যন্ত অপেক্ষা করতে পারে।
মানুষের জন্য অপেক্ষা: task token দিয়ে callback
একটা microfinance প্রতিষ্ঠান ছোট loan নিজে থেকেই অনুমোদন করে, কিন্তু credit score সীমানায় থাকলে একজন loan officer-কে অনুমোদন দিতে হয়। Workflow কিছু না চালিয়ে দিনের পর দিন থেমে থাকে, তারপর officer click করা মাত্র আবার চলতে শুরু করে।
পরিস্থিতি
নারায়ণগঞ্জের এক দোকান মালিক ৫ লাখ টাকার loan চাইলেন। App আবেদনটা input হিসেবে দিয়ে একটা Standard workflow execution চালু করে।
#Step Functions কাকে কাকে ডাকতে পারে
Slide বলছে Step Functions EC2, ECS, on-premises server, API Gateway, SQS আর আরও অনেকের সাথে জোড়া লাগে। আজ এর তিনটা স্তর:
- Optimized integration, বিশেষ সুবিধা সহ (
.sync, callback, সহজ parameter): Lambda, ECS আর Fargate, AWS Batch, DynamoDB, SNS, SQS, Glue, SageMaker, EventBridge, API Gateway, Athena, EMR, Bedrock, আর অন্য Step Functions workflow (nested workflow)। - AWS SDK integration: একটা Task থেকেই ২২০-এর বেশি AWS service-এর প্রায় যেকোনো API সরাসরি ডাকো (
arn:aws:states:::aws-sdk:s3:copyObject), মাঝে কোনো Lambda function ছাড়া। পুরোনো material-এ লেখা “২০০+ service”; দুটোর মানেই “প্রায় সবকিছু”। - HTTP Task: যেকোনো public HTTPS API ডাকো (একটা payment gateway, Salesforce), credential রাখা থাকে একটা EventBridge connection-এ।
AWS-এর managed service-এর বাইরে চলা code-এর জন্য, যেমন একটা EC2 instance বা অফিসের server-এর program, ব্যবহার করো activity: worker GetActivityTask দিয়ে কাজ টেনে আনে, কাজ করে, আর task token দিয়ে ফল ফেরত দেয়। Activity শুধু Standard-এ চলে।
Execution চালু করা যায় console থেকে, SDK বা CLI দিয়ে (StartExecution), API Gateway থেকে, একটা EventBridge rule বা schedule থেকে (lesson 19.5), একটা Lambda function থেকে, বা আরেকটা state machine থেকে। Slide-এর use case: order fulfilment, data processing, web application, যেকোনো workflow।
“জোড়া লাগানোর” Lambda function-এর বদলে service সরাসরি ডাকলে খরচ কম, চলমান অংশও কম: একটা dynamodb:putItem Task-এর কোনো cold start নেই, patch করার code নেই, Lambda-র bill-ও নেই।
#Standard বনাম Express workflow
State machine বানানোর সময় তুমি এর type বেছে নাও, আর পরে আর বদলানো যায় না। মূল কথাটা notes-এ: Standard চলতে পারে ১ বছর পর্যন্ত (লম্বা process), Express সর্বোচ্চ ৫ মিনিট (বিপুল সংখ্যায়, দ্রুত কাজ)। বাকিগুলোও সমান জরুরি:
| Standard | Express | |
|---|---|---|
| সর্বোচ্চ সময় | ১ বছর | ৫ মিনিট |
| Execution-এর নিশ্চয়তা | Exactly-once: Retry না দিলে প্রতিটা state একবারই চলে | Asynchronous: at-least-once; synchronous: at-most-once |
| কোথায় মানায় | লম্বা, টেকসই, হিসাব রাখার মতো, non-idempotent ধাপ (payment, EMR cluster চালু করা) | ছোট, বিপুল সংখ্যায়, idempotent event processing (IoT ingestion, streaming transform, mobile আর API backend) |
| দাম | প্রতি state transition: প্রতি ১,০০০-এ ০.০২৫ USD (মাসে ৪,০০০টা ফ্রি, চিরকাল) | প্রতি execution + সময় × memory: প্রতি ১০ লাখে ১.০০ USD, সাথে প্রথম ১,০০০ GB-ঘণ্টা প্রতি GB-ঘণ্টায় ০.০৬ USD (ওপরে কম দাম) |
| Execution history | Step Functions ৯০ দিন রাখে, console-এ ছবি দেখে debug | রাখে না: CloudWatch Logs চালু করো |
Callback (.waitForTaskToken) আর .sync | আছে | নেই |
| Distributed Map, activity, redrive | আছে | নেই |
| চালুর হার (default) | বড় Region-গুলোতে সেকেন্ডে প্রায় ৩০০ (token bucket, বাড়ানো যায়) | সেকেন্ডে প্রায় ৬,০০০; state transition-এ কোনো সীমা নেই |
| কীভাবে চালু হয় | Asynchronous (StartExecution) | Asynchronous (StartExecution) বা synchronous (StartSyncExecution, ফল ফেরত দেয়, যেমন API Gateway-র পেছনে) |
দাম US East (N. Virginia)-এর list price, অক্টোবর ২০২৬-এ যাচাই করা। Workflow যে Lambda function বা অন্য service ডাকে, তার bill আলাদা।
একটা হিসাব করে দেখি: একটা API backend মাসে ১০ লাখ execution চালায়, প্রতিটায় ১০টা state transition, প্রতিটা চলে ২ সেকেন্ড, ৬৪ MB-তে।
- Standard: ১,০০,০০,০০০ transition − ৪,০০০ ফ্রি = ৯৯,৯৬,০০০ × ০.০০০০২৫ = প্রায় ২৪৯.৯০ USD।
- Express: request বাবদ ১০,০০,০০০ × ১.০০ / ১০,০০,০০০ = ১.০০ USD; সময় বাবদ ১০,০০,০০০ × ২ সেকেন্ড × ০.০৬২৫ GB = ১,২৫,০০০ GB-second = ৩৪.৭ GB-ঘণ্টা × ০.০৬ = ২.০৮ USD; মোট প্রায় ৩.০৮ USD।
একই workflow Express-এ ৮০ গুণ সস্তা, যদি সেটা ছোট আর idempotent হয়। উল্টোটাও দেখো: একটা loan approval মাসে ৩,০০০ বার চলে, প্রতিবার ১২টা transition, মোট ৩৬,০০০ transition, Standard-এ ০.৮০ USD, আর Express এটা পারেই না (কয়েক দিন অপেক্ষা করে, callback লাগে)।
Standard নাকি Express: একটা workflow-এর খরচ কত?
বেছে নাও workflow কত ঘনঘন চলে, প্রতিবার কয়টা state পেরোয়, একবার চলতে কত সময় লাগে আর কত memory লাগে। বলে দাও এটা কোনো মানুষ বা লম্বা কাজের জন্য অপেক্ষা করে কিনা, আর কোনো ধাপ দুবার চললে বিপদ কিনা। তারপর দুই ভাবেই এক মাসের হিসাব করো।
মাসে কয়টা execution
প্রতি execution-এ state transition
গড় সময়
Memory (৬৪ MB ধাপে bill)
কোনো মানুষ বা লম্বা কাজের অপেক্ষা?
কোনো ধাপ দুবার চলা চলবে না (payment)?
ফল দেখতে “হিসাব করো” চাপো।
#বড় মাপের Map: Distributed Map
Inline Map একটা execution-এর ভেতরেই iteration চালায় (একসাথে সর্বোচ্চ ৪০টা, আর প্রতিটা iteration-এর event ওই execution-এর ২৫,০০০ entry-র history-তেই জমা হয়), তাই পুরো array-টা একটা state-এর input আর output-এর ২৫৬ KiB সীমার মধ্যে আঁটতে হবে। Distributed Map (শুধু Standard) item-গুলো সরাসরি S3 থেকে পড়ে (একটা CSV, একটা JSON array, বা একটা prefix-এর নিচের সব object) আর একসাথে ১০,০০০ পর্যন্ত child workflow execution চালু করে, যেগুলোর প্রতিটা Express হতে পারে। “লাখ লাখ S3 object process করো”, retry আর fail-এর report সহ, নিজে fan-out না লিখে: উত্তর এটাই।
#Amazon Cognito: তোমার app-এর user-দের পরিচয়
IAM (chapter 2) তাদের জন্য, যে মানুষ আর workload AWS চালায়। তোমার দোকানের customer, তোমার app-এর যাত্রী, তোমার বিশ্ববিদ্যালয়ের student, এরা AWS user না, আর সংখ্যায় লাখো হতে পারে। Amazon Cognito তোমার web আর mobile app-এর user-দের একটা পরিচয় দেয়: sign-up, sign-in আর access control। Notes জোর দিয়ে বলেছে, এর দুটো অংশ, আর পরীক্ষার সবচেয়ে গোলমেলে প্রশ্নগুলো আসে এখান থেকেই:
| User pool (CUP) | Identity pool (CIP, “federated identities”) | |
|---|---|---|
| Notes-এর ছবি | পরিচয়পত্র বা ID card: তুমি কে, প্রমাণ করে | অফিসের access card: নির্দিষ্ট দরজা খোলে |
| কাজ | Authentication (“তুমি কে?”): sign-up, sign-in, password reset, MFA সহ একটা user directory | AWS-এ authorization (“AWS-এ তুমি কী করতে পারবে?”): অস্থায়ী AWS credential |
| App-কে দেয় | JWT (ID, access আর refresh token) | STS থেকে একটা access key, secret key আর session token |
| কার সাথে | তোমার API (API Gateway, ALB), তোমার backend | সরাসরি AWS service: S3, DynamoDB, IoT, Kinesis… |
| Guest | না (শুধু sign in করা user) | হ্যাঁ, চাইলে একটা unauthenticated role |
দুটো প্রায়ই একসাথে ব্যবহার হয়: user sign in করে user pool-এ, আর identity pool user pool-এর token বিশ্বাস করে সেটাকে AWS credential-এ বদলে দেয়।
#Cognito user pool
User pool হলো তোমার web আর mobile app-এর জন্য একটা serverless user directory। Slide-এর feature-গুলো, আজকের service-এর সাথে মিলিয়ে:
- Username বা email (বা phone) আর password দিয়ে sign-up আর sign-in, তোমার ঠিক করা password policy সহ।
- Code দিয়ে email আর phone number যাচাই, আর যাচাই করা ঠিকানা দিয়ে password reset (“forgot password”)।
- MFA: authenticator app (TOTP), SMS, আর email-এ one-time code; ঐচ্ছিক বা বাধ্যতামূলক। Passkey বা one-time code দিয়ে passwordless sign-in-ও আছে।
- Federation: user-রা Google, Facebook, Apple, Login with Amazon, বা company-র একটা SAML 2.0 বা OIDC identity provider দিয়ে sign in করুক, তবুও তোমার pool থেকে একই token পাবে।
- Managed login: Cognito তোমার domain-এ তৈরি sign-in, sign-up আর reset page host করে দেয় (পুরোনো version-এর নাম hosted UI)। এটা একটা OAuth 2.0 / OIDC authorization server-ও।
- প্রতিটা ধাপ নিজের মতো করতে Lambda trigger: pre sign-up (disposable email আটকাও), post confirmation (profile row বানাও, স্বাগত message পাঠাও), pre token generation (claim যোগ করো), custom auth challenge, পুরোনো database থেকে user migration।
- Group, চাইলে identity pool-এর জন্য IAM role সহ, আর CSV থেকে user import।
- Compromised-credential যাচাই আর adaptive authentication (Plus plan-এর threat protection): ফাঁস হওয়া password দিয়ে, বা অচেনা device বা জায়গা থেকে আসা sign-in আটকাও বা বাড়তি প্রমাণ চাও।
Sign in-এর পর pool তিনটা token ফেরত দেয়:
| Token | ধরন | কী বলে | Default মেয়াদ |
|---|---|---|---|
| ID token | JWT | User কে: sub, email, নাম, group | ১ ঘণ্টা (৫ মিনিট থেকে ১ দিন) |
| Access token | JWT | App কী ডাকতে পারবে: scope, group | ১ ঘণ্টা (৫ মিনিট থেকে ১ দিন) |
| Refresh token | Opaque | Password ছাড়াই নতুন ID আর access token আনে | ৩০ দিন (১ ঘণ্টা থেকে ১০ বছর) |
JWT-গুলো pool-এর private key দিয়ে sign করা। Pool-এর public key (JWKS URL) দিয়ে যে কেউ এগুলো যাচাই করতে পারে, Cognito-কে না ডেকেই, এ কারণেই API Gateway আর ALB পলকে এগুলো যাচাই করতে পারে।
#দুটো সামনের দরজা: API Gateway আর ALB
Slide দেখায়, user pool ঠিক দুটো AWS সামনের দরজার সাথে জোড়া লাগে:
- API Gateway: app sign in করে token পায়, আর
Authorizationheader-এ পাঠায়। একটা Cognito user pool authorizer (REST API) বা JWT authorizer (HTTP API) signature, মেয়াদ, issuer আর audience যাচাই করে claim-গুলো backend-কে দেয়; অচল token তোমার code ছোঁয়ার আগেই 401 পায় (lesson 15.6)। - Application Load Balancer: HTTPS listener rule-এ একটা
authenticate-cognitoaction, session ছাড়া browser-কে managed login page-এ পাঠায়, নিজেই code দিয়ে token আনে, session cookie বসায়, আরx-amzn-oidc-*header-এ user-এর পরিচয় দিয়ে request এগিয়ে দেয় (lesson 6.3)। পেছনের application-এ login-এর কোনো code-ই লাগে না।
Cognito user pool: sign-up, sign-in আর token
একটা ride-sharing app তার যাত্রীদের রাখে একটা Cognito user pool-এ। Pool user আর তাদের password জমা রাখে, sign-in-এর সময় যাচাই করে, আর JWT token দেয়, যেটা API Gateway বা ALB আবার Cognito-কে জিজ্ঞেস না করেই যাচাই করতে পারে।
পরিস্থিতি
রাফি app install করে email আর একটা password দিয়ে sign up করে। App সরাসরি user pool-কে ডাকে; তোমার নিজের code-এ কোনো user table বা password hashing নেই।
ছোট একটা যোগ: একটা ride-sharing app-এর মাসে ৬০,০০০ সক্রিয় যাত্রী, Essentials-এ খরচ (৬০,০০০ − ১০,০০০) × ০.০১৫ = মাসে ৭৫০ USD; Plus-এ ৬০,০০০ × ০.০২০ = ১,২০০ USD, এটাই নিজে থেকে breach আর ঝুঁকি যাচাইয়ের দাম।
#Cognito identity pool
Identity pool user-দের একটা পরিচয় দেয়, যাতে তারা অস্থায়ী AWS credential পায় আর AWS service সরাসরি ডাকতে পারে (বা IAM authorization সহ API Gateway দিয়ে)। এটা কোনো user বা password রাখে না; অন্য identity provider-দের বিশ্বাস করে:
- একটা Cognito user pool,
- social login (Google, Facebook, Apple, Login with Amazon),
- যেকোনো SAML বা OIDC provider,
- developer-authenticated identity (তোমার আগে থেকে চলা নিজের login system),
- আর তুমি অনুমতি দিলে, কোনো provider ছাড়াই: guest (unauthenticated) user।
কীভাবে চলে (slide-এর diagram): app provider থেকে login করে token পায় → identity pool-এ token বদলায় → pool token যাচাই করে, user-কে একটা স্থায়ী identity ID দেয়, একটা IAM role বাছে আর STS ডাকে (AssumeRoleWithWebIdentity, lesson 2.4-এর federation call) → app পায় অস্থায়ী credential (প্রায় এক ঘণ্টা; SDK নিজে নবায়ন করে) → private S3 bucket আর DynamoDB table-এ সরাসরি access।
কোন role? Default-এ sign in করা user-দের জন্য একটা role, guest-দের জন্য আরেকটা। চাইলে rule দিয়েও user-কে role-এ মেলাতে পারো (যেমন claim department = finance), বা token-এর ভেতরের user pool group থেকে role নিতে পারো। প্রতিটা role-এর trust policy-তে cognito-identity.amazonaws.com আর identity pool ID লেখা থাকে, তাই আর কেউ সেটা assume করতে পারে না।
#Policy variable দিয়ে row-level security
একটা role-ই সব user-কে সামলায়, অথচ প্রত্যেকে যেন শুধু নিজের data-তেই পৌঁছায়। কৌশলটা হলো policy variable ${cognito-identity.amazonaws.com:sub}, যার জায়গায় request-এর সময় IAM বসিয়ে দেয় caller-এর identity ID (lesson 2.1-এর ${aws:username}-এর মতো একই ভাবনা)।
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "OwnPhotosOnly",
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:::student-photos-example/${cognito-identity.amazonaws.com:sub}/*"
},
{
"Sid": "OwnGradesOnly",
"Effect": "Allow",
"Action": ["dynamodb:GetItem", "dynamodb:Query", "dynamodb:PutItem", "dynamodb:UpdateItem"],
"Resource": "arn:aws:dynamodb:ap-southeast-1:111122223333:table/grades-example",
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:LeadingKeys": ["${cognito-identity.amazonaws.com:sub}"]
}
}
}
]
}
dynamodb:LeadingKeys হলো একটা request যে item-গুলো ছোঁয়, তাদের partition key-এর মান (lesson 15.4)। Condition-টা বলছে “শুধু সেই item, যাদের partition key তোমার নিজের identity ID”। এটাই DynamoDB-তে row-level security (slide-এর শিরোনাম), authorization-এর এক লাইন code ছাড়াই। দুটো জিনিসে লোকে ভুল করে: table-এর partition key-তে রাখতে হবে identity pool-এর identity ID (যেমন ap-southeast-1:7c1e…), user pool-এর sub না; আর Scan-কে এভাবে সীমিত করা যায় না, তাই policy-তে ওটা রেখো না।
Cognito identity pool: app user-দের জন্য AWS credential
একটা বিশ্ববিদ্যালয়ের app প্রতিটা student-কে S3-এ profile photo upload করতে আর DynamoDB থেকে নিজের grade পড়তে দেয়, সরাসরি phone থেকে, মাঝে কোনো API ছাড়া। Identity pool একটা login-কে অস্থায়ী AWS credential-এ বদলে দেয়, যা শুধু ওই student-এর নিজের data পর্যন্ত পৌঁছায়।
পরিস্থিতি
User pool-এ login → identity pool-এ token বদল → STS-এর credential → student-এর নিজের S3 folder-এ সরাসরি PUT।
App-এর হাতে কী
ID token
user pool থেকে
AWS credential
এখনো নেই
নুসরাত বিশ্ববিদ্যালয়ের user pool-এ sign in করে একটা ID token পায়। Token প্রমাণ করে সে কে, কিন্তু S3 এটা নেয় না: S3-এর প্রতিটা request AWS credential দিয়ে sign করা থাকতে হয়।
#User pool নাকি identity pool: পরীক্ষার keyword
Notes-এর cheat sheet:
- “Sign-up”, “sign-in”, “JWT tokens”, “user directory”, “আমার app-এর social login”, “hosted login page”, “API Gateway / ALB-এর user authenticate করা” → Cognito user pool।
- “Temporary AWS credentials”, “give access to S3 / DynamoDB directly from a mobile app”, “unauthenticated / guest access”, “S3-এ user-প্রতি folder”, “DynamoDB item-এ সূক্ষ্ম access” → Cognito identity pool।
- দুটোই, যখন app user-দের sign in করায় আবার সরাসরি AWS-ও ডাকে।
Notes-এর মনে রাখার উপায়: User pool = authentication (তুমি কে?); identity pool = authorization (AWS-এ তুমি কী করতে পারবে?)।
#Cognito নাকি IAM?
IAM-এর বদলে Cognito বাছার জন্য slide-এর keyword: “hundreds of users” (বা হাজার, লাখ), “mobile users”, একটা application-এর জন্য “authenticate with SAML”। IAM user হলো অল্প কয়েকজন মানুষের জন্য, যারা AWS চালায়; AWS account-এ sign in করা একদল কর্মীর জন্য আজকের উত্তর IAM Identity Center (lesson 20.3)। App-এর প্রতিটা customer-এর জন্য একটা IAM user বানানো, বা mobile app-এর ভেতরে একটা IAM user-এর access key রেখে দেওয়া, সবসময়ই ভুল: key দীর্ঘমেয়াদি, আর app খুলে দেখলেই যে কেউ পেয়ে যায়।
#যা ভুল হতে পারে
| লক্ষণ | কারণ | সমাধান |
|---|---|---|
Execution States.NoChoiceMatched দিয়ে fail | Choice state-এ কোনো rule মেলেনি, Default-ও নেই | সবসময় Default দাও |
| Customer-এর টাকা কাটা, জিনিস নেই, execution “failed” | পরের একটা ধাপ fail করেছে, Catch ছিল না | Compensating ধাপ সহ Catch (saga), তারপর redrive |
| টাকা দুবার কাটা | Non-idempotent ধাপে retry, বা async Express (at-least-once) | Idempotency key; non-idempotent ধাপের জন্য Standard |
| Execution চিরকাল অপেক্ষা করছে | TimeoutSeconds ছাড়া callback Task; token হারিয়ে গেছে | Timeout আর States.Timeout-এর ওপর Catch; লম্বা worker-এ heartbeat |
| State machine বানানো যাচ্ছে না | Express workflow-এ .waitForTaskToken, .sync বা Distributed Map | Standard (বা Standard parent) ব্যবহার করো |
| ৫ মিনিটে Express run বন্ধ | কাজ Express-এর সীমার চেয়ে লম্বা | Standard, বা কাজটা ভাগ করো |
| “Execution history exceeded” দিয়ে fail | একটা Standard execution ২৫,০০০ history event-এ পৌঁছেছে (লম্বা loop) | Loop-টা child workflow বা Distributed Map-এ সরাও |
States.DataLimitExceeded | State-এর input বা output ২৫৬ KiB-এর বেশি | Data S3-এ রাখো, শুধু key পাঠাও |
| Express-এর fail চোখে পড়ে না | Express কোনো history রাখে না | CloudWatch Logs (আর X-Ray) চালু করো |
Task States.Permissions / AccessDenied দিয়ে fail | State machine-এর execution role-এ permission নেই | Role-এ action যোগ করো (যেমন lambda:InvokeFunction) |
| প্রতি সকালে API 401 দেয় | ১ ঘণ্টা পর access token-এর মেয়াদ শেষ | Refresh token ব্যবহার করো; SDK নিজেই করে |
| Sign in করা user-কে S3 403 দেয় | App user pool-এর JWT S3-এ পাঠিয়েছে | Identity pool, বা তোমার API / presigned URL |
| ঠিক user-কেও DynamoDB AccessDenied | Table-এর key user pool-এর sub, policy-তে identity ID | Item-এর key রাখো identity pool-এর identity ID দিয়ে |
| Guest-রা data লিখতে পারছে | Unauthenticated role খুব চওড়া | Guest role-কে শুধু public data পড়তে দাও |
| ফাঁস হওয়া password আটকাচ্ছে না | Lite বা Essentials plan | Plus plan-এর threat protection, বা MFA বাধ্যতামূলক |
#System design-এ Step Functions আর Cognito
- Order আর payment pipeline: Standard workflow, compensation সহ Catch (saga), idempotency key, SNS notification, ঠিক করার পর redrive।
- মাঝে মানুষ: loan approval, content moderation, customer-এর পরিচয় যাচাই: timeout আর escalation-এর পথ সহ
.waitForTaskToken। - Data processing: S3-এর ওপর Distributed Map,
.syncদিয়ে একটা Glue বা EMR job, SDK integration Task হিসেবে Athena query; প্রতিটা record-এর কাজের জন্য Express child। - বিপুল সংখ্যার event processing: Kinesis বা SQS → Lambda → asynchronous Express workflow, বা কয়েকটা service ডাকা একটা API-র জন্য API Gateway → synchronous Express workflow।
- App-এর পরিচয়: API-র জন্য user pool + API Gateway authorizer; সরাসরি S3 upload আর DynamoDB পড়ার জন্য identity pool; user pool আর API-র ওপর WAF (chapter 21); DAX আর caching সহ পুরো mobile app architecture আসছে lesson 15.8-এ।
Step Functions বনাম SQS: SQS buffer করে আর আলাদা করে রাখে (producer-এর মাথাব্যথা নেই message কে, কখন process করবে); Step Functions একটা জানা ক্রম সমন্বয় করে আর অবস্থার হিসাব রাখে। দুটো একসাথে ভালো চলে: একটা Task task token সহ SQS-এ message পাঠিয়ে consumer-এর উত্তরের অপেক্ষা করতে পারে।
কোনটা মানায়?
একটা scenario বেছে নাও, keyword-গুলো পড়ো, তারপর বেছে নাও: Standard নাকি Express workflow, Cognito user pool নাকি identity pool, নাকি সাধারণ IAM। তারপর কারণটা পড়ো।
১. একটা scenario বেছে নাও(প্রথমবারেই ঠিক: 0/10)
একটা microfinance প্রতিষ্ঠান প্রতিটা loan আবেদন নিজে থেকে score করে, কিন্তু সীমানায় থাকা আবেদনগুলোকে একজন loan officer-এর অনুমোদনের জন্য অপেক্ষা করতে হয়, যাতে তিন দিন পর্যন্ত লাগতে পারে।
Keyword:manual approvalকয়েক দিনcallback
২. তোমার উত্তর
#নিজে করে দেখো
Region ap-southeast-1, account 111122223333; output ছোট করে দেখানো। Function আর role আগে থেকেই থাকতে হবে।
# 1. ওপরের ASL file থেকে order state machine (Standard) বানাও
aws stepfunctions create-state-machine --name order-example --type STANDARD \
--definition file://order.asl.json \
--role-arn arn:aws:iam::111122223333:role/sfn-order-example
# { "stateMachineArn": "arn:aws:states:ap-southeast-1:111122223333:stateMachine:order-example",
# "creationDate": "2026-10-28T10:02:11.402000+06:00" }
# 2. প্রতিটা order-এ একটা execution; নাম দিলে start করাটা idempotent হয়
aws stepfunctions start-execution \
--state-machine-arn arn:aws:states:ap-southeast-1:111122223333:stateMachine:order-example \
--name order-5501 --input '{"orderId":"5501","amount":2450,"items":["T-shirt","Panjabi"]}'
# { "executionArn": "arn:aws:states:ap-southeast-1:111122223333:execution:order-example:order-5501",
# "startDate": "2026-10-28T10:03:40.118000+06:00" }
aws stepfunctions describe-execution \
--execution-arn arn:aws:states:ap-southeast-1:111122223333:execution:order-example:order-5501 \
--query '{status:status,output:output}'
# { "status": "SUCCEEDED", "output": "{\"orderId\":\"5501\",\"payment\":\"paid\",\"reservation\":\"R-77\"}" }
aws stepfunctions get-execution-history \
--execution-arn arn:aws:states:ap-southeast-1:111122223333:execution:order-example:order-5501 \
--query 'events[].type' --output text
# ExecutionStarted TaskStateEntered TaskScheduled TaskStarted TaskSucceeded TaskStateExited
# ChoiceStateEntered ChoiceStateExited … ParallelStateSucceeded SucceedStateEntered ExecutionSucceeded
# 3. অপেক্ষারত approval task-কে উত্তর দাও (token এসেছিল officer-এর email-এ)
aws stepfunctions send-task-success --task-token "$TASK_TOKEN" --task-output '{"approved":true}'
aws stepfunctions send-task-failure --task-token "$TASK_TOKEN" --error Rejected --cause "Trade licence expired"
# 4. Warehouse-এর database ঠিক করার পর fail করা order-টা fail করা state থেকে আবার চালাও
aws stepfunctions redrive-execution \
--execution-arn arn:aws:states:ap-southeast-1:111122223333:execution:order-example:order-5504
# { "redriveDate": "2026-10-28T11:20:05.771000+06:00" }
# 5. Synchronous ভাবে ডাকা একটা Express workflow (API Gateway-র pattern)
aws stepfunctions start-sync-execution \
--state-machine-arn arn:aws:states:ap-southeast-1:111122223333:stateMachine:quote-express-example \
--input '{"restaurant":"R-12","area":"Dhanmondi"}'
# { "status": "SUCCEEDED", "output": "{\"price\":540,\"etaMinutes\":32}",
# "billingDetails": { "billedMemoryUsedInMB": 64, "billedDurationInMilliseconds": 300 } }
# 6. Essentials plan-এ একটা user pool, email দিয়ে sign in
aws cognito-idp create-user-pool --pool-name riders-example --user-pool-tier ESSENTIALS \
--username-attributes email --auto-verified-attributes email --mfa-configuration OFF
# { "UserPool": { "Id": "ap-southeast-1_Ab12Cd34E", "UserPoolTier": "ESSENTIALS", … } }
aws cognito-idp create-user-pool-client --user-pool-id ap-southeast-1_Ab12Cd34E \
--client-name rider-app --no-generate-secret \
--explicit-auth-flows ALLOW_USER_SRP_AUTH ALLOW_USER_PASSWORD_AUTH ALLOW_REFRESH_TOKEN_AUTH
# { "UserPoolClient": { "ClientId": "4exampleclientid0000000000", … } }
aws cognito-idp sign-up --client-id 4exampleclientid0000000000 \
--username rafi@example.com --password 'Long-Passphrase-2026!'
# { "UserConfirmed": false, "CodeDeliveryDetails": { "Destination": "r***@e***", "DeliveryMedium": "EMAIL" },
# "UserSub": "d1b2c3d4-5678-90ab-cdef-EXAMPLE11111" }
aws cognito-idp confirm-sign-up --client-id 4exampleclientid0000000000 \
--username rafi@example.com --confirmation-code 482913
# Password flow শুধু এই CLI test-এর জন্য; app ব্যবহার করে SRP বা managed login
aws cognito-idp initiate-auth --client-id 4exampleclientid0000000000 --auth-flow USER_PASSWORD_AUTH \
--auth-parameters USERNAME=rafi@example.com,PASSWORD='Long-Passphrase-2026!'
# { "AuthenticationResult": { "AccessToken": "eyJraWQiOi…", "ExpiresIn": 3600, "TokenType": "Bearer",
# "RefreshToken": "eyJjdHkiOi…", "IdToken": "eyJraWQiOi…" } }
# 7. User pool-কে বিশ্বাস করা একটা identity pool, guest access ছাড়া
aws cognito-identity create-identity-pool --identity-pool-name students_example \
--no-allow-unauthenticated-identities \
--cognito-identity-providers ProviderName=cognito-idp.ap-southeast-1.amazonaws.com/ap-southeast-1_Ab12Cd34E,ClientId=4exampleclientid0000000000
# { "IdentityPoolId": "ap-southeast-1:0a1b2c3d-1111-2222-3333-EXAMPLE44444", … }
aws cognito-identity set-identity-pool-roles \
--identity-pool-id ap-southeast-1:0a1b2c3d-1111-2222-3333-EXAMPLE44444 \
--roles authenticated=arn:aws:iam::111122223333:role/student-auth-example
# 8. ID token দিয়ে identity ID নাও, তারপর AWS credential
aws cognito-identity get-id --identity-pool-id ap-southeast-1:0a1b2c3d-1111-2222-3333-EXAMPLE44444 \
--logins cognito-idp.ap-southeast-1.amazonaws.com/ap-southeast-1_Ab12Cd34E=$ID_TOKEN
# { "IdentityId": "ap-southeast-1:7c1e5f2a-aaaa-bbbb-cccc-EXAMPLE55555" }
aws cognito-identity get-credentials-for-identity \
--identity-id ap-southeast-1:7c1e5f2a-aaaa-bbbb-cccc-EXAMPLE55555 \
--logins cognito-idp.ap-southeast-1.amazonaws.com/ap-southeast-1_Ab12Cd34E=$ID_TOKEN
# { "IdentityId": "ap-southeast-1:7c1e5f2a-…",
# "Credentials": { "AccessKeyId": "ASIAEXAMPLE7Q2K", "SecretKey": "…", "SessionToken": "…",
# "Expiration": "2026-10-28T12:15:02+06:00" } }
তিনটা মান AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY আর AWS_SESSION_TOKEN-এ বসাও, তারপর চালাও aws s3 cp avatar.jpg s3://student-photos-example/ap-southeast-1:7c1e5f2a-aaaa-bbbb-cccc-EXAMPLE55555/avatar.jpg (অনুমতি আছে), আর একই command অন্য এক student-এর folder দিয়ে (AccessDenied)।
#সারসংক্ষেপ
মূল কথা
- Step Functions ধাপগুলোকে একটা state machine হিসেবে সাজায়, যা লেখা Amazon States Language (ASL)-এ, আর ছবি এঁকে বানানো যায় Workflow Studio-তে। পরীক্ষার বাক্য: “orchestrate multiple Lambda functions”, “coordinate microservices”, “state machine”।
- State: Task, Choice (সবসময় Default), Wait, Parallel, Map (inline, বা S3-এর ওপর Distributed), Pass, Succeed, Fail। Retry (interval, backoff, max attempts) আর Catch (উদ্ধারের state-এ) configuration, code না; compensation মিলে হয় saga; fail করা Standard execution ১৪ দিনের মধ্যে redrive করা যায়।
- Integration pattern: Request Response, Run a job (
.sync), human approval-এর জন্য Wait for callback (.waitForTaskToken), সাথেSendTaskSuccess/SendTaskFailure, timeout আর heartbeat। Optimized integration (Lambda, ECS, Batch, DynamoDB, SNS, SQS, Glue, SageMaker…), ২২০-এর বেশি service-এর সাথে SDK integration, HTTP Task, EC2 আর অফিসের worker-এর জন্য activity। - Standard: ১ বছর পর্যন্ত, exactly-once, ৯০ দিনের history, callback আর
.sync, দাম প্রতি state transition (প্রতি ১,০০০-এ ০.০২৫ USD)। Express: ৫ মিনিট পর্যন্ত, at-least-once (async) বা at-most-once (sync), শুধু CloudWatch Logs, দাম প্রতি execution + GB-second; ছোট, বিপুল সংখ্যার কাজে অনেক সস্তা। কয়েক ঘণ্টা বা কয়েক দিন, বা manual approval → Standard। - Cognito user pool = authentication: user directory, sign-up / sign-in, যাচাই, password reset, MFA, social / SAML / OIDC federation, managed login, Lambda trigger, JWT (ID আর access ১ ঘণ্টা, refresh ৩০ দিন)। জোড়া লাগে API Gateway-র authorizer আর ALB-র
authenticate-cognitoaction-এর সাথে। Feature plan Lite / Essentials (default) / Plus (threat protection, compromised credential)। - Cognito identity pool = STS দিয়ে অস্থায়ী AWS credential, সরাসরি S3 / DynamoDB access-এর জন্য; উৎস: user pool, social, SAML, OIDC, developer identity; authenticated আর guest role;
${cognito-identity.amazonaws.com:sub}আরdynamodb:LeadingKeysদেয় user-প্রতি folder আর row-level security। - Cognito বনাম IAM: একটা app-এর জন্য “hundreds of users”, “mobile users”, “authenticate with SAML” → Cognito। IAM (Identity Center) তাদের জন্য, যারা AWS চালায়; app-এর ভেতরে কখনো IAM key রেখো না।
আগে নিজে উত্তর দাও, তারপর ব্যাখ্যাটা পড়ো। ঠিক হলেও পড়ো, কারণ ভুল Option-গুলো কেন ভুল, সেটাও ওখানে আছে।
নিজেকে যাচাই করোপ্রশ্ন
একটা team পাঁচটা Lambda function শিকলের মতো জুড়েছে: প্রতিটা পরেরটাকে ডাকে আর তার ফলের জন্য অপেক্ষা করে। এখানে Step Functions মূলত কোন সমস্যার সমাধান করে?
নিজেকে যাচাই করোপ্রশ্ন
Step Functions-এর state machine কোন ভাষায় লেখা হয়?
নিজেকে যাচাই করোপ্রশ্ন
কোন state type data-র একটা মান দেখে workflow-কে শাখায় ভাগ করে, if statement-এর মতো?
নিজেকে যাচাই করোপ্রশ্ন
একটা Task state-এর Retry-তে IntervalSeconds ৩, BackoffRate ২ আর MaxAttempts ৩। Task প্রতিবারই fail করে। হাল ছাড়ার আগে চেষ্টাগুলোর মাঝে Step Functions মোট কতক্ষণ অপেক্ষা করে?
নিজেকে যাচাই করোপ্রশ্ন
একটা order workflow card থেকে টাকা কাটে, তারপর সব retry-র পরেও Reserve stock task fail করে। Customer-এর টাকা খোয়া যাওয়া চলবে না। State machine-এ কী থাকা উচিত?
নিজেকে যাচাই করোপ্রশ্ন
একটা loan workflow-কে একজন loan officer-কে email করতে হবে, আর officer Approve বা Reject-এ click করলে তবেই এগোতে হবে, যাতে কয়েক দিন লাগতে পারে। কোন নকশাটা ঠিক?
নিজেকে যাচাই করোপ্রশ্ন
একটা Standard workflow-এর callback Task-এ কোনো TimeoutSeconds নেই, আর token সহ email-টা spam folder-এ চলে গেছে। কী হবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা workflow-কে একটা AWS Glue job চালু করতে হবে, আর polling code না লিখে job শেষ হলে তবেই এগোতে হবে। Task কোন integration pattern ব্যবহার করবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা বীমা company মাসে ৫০ লাখ claim-photo event process করে। প্রতিটা workflow-এ ৩টা ধাপ, চলে প্রায় ৪০০ ms, idempotent, আর খরচ যত কম সম্ভব হতে হবে। কোন workflow type মানায়?
নিজেকে যাচাই করোপ্রশ্ন
হিসাব করো: একটা Standard workflow মাসে ২,০০,০০০ বার চলে, প্রতিবার ১২টা state transition। US East-এ (প্রতি ১,০০০ transition-এ ০.০২৫ USD, ৪,০০০টা ফ্রি) মাসিক Step Functions bill কত?
নিজেকে যাচাই করোপ্রশ্ন
হিসাব করো: একটা asynchronous Express workflow মাসে ২০ লাখ বার চলে, প্রতিবার ১ সেকেন্ড, ৬৪ MB-তে। প্রতি ১০ লাখ request-এ ১.০০ USD আর প্রতি GB-ঘণ্টায় ০.০৬ USD ধরলে bill কত?
নিজেকে যাচাই করোপ্রশ্ন
একটা bank-এর transfer workflow প্রায় ৯০ সেকেন্ড চলে আর এমন একটা partner API ডাকে যার কোনো idempotency key নেই: debit দুবার চললে টাকাও দুবার কাটে। কোন type ব্যবহার করা উচিত?
নিজেকে যাচাই করোপ্রশ্ন
এক developer এমন একটা Express workflow বানানোর চেষ্টা করছেন, যার একটা Task-এ arn:aws:states:::sns:publish.waitForTaskToken। কী হবে?
নিজেকে যাচাই করোপ্রশ্ন
গতকাল fail করা একটা Express workflow execution-এর ভেতরে কী হয়েছিল, কোথায় দেখবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা online shop-কে প্রতি রাতে S3-এর ২০ লাখ product photo যাচাই করতে হয়, প্রতিটা ছবির জন্য একটা Lambda function, retry আর fail-এর report সহ। Step Functions-এর কোন feature সবচেয়ে মানানসই?
নিজেকে যাচাই করোপ্রশ্ন
Standard workflow নিয়ে কোন দুটো কথা সত্যি?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
কোন দুটো উপায়ে একটা state machine মাঝে কোনো Lambda function ছাড়াই server বা service-এ কাজ করাতে পারে?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
Amazon Cognito-র কোন অংশটা একটা user directory, যা sign-up, sign-in, password reset আর MFA সামলায় আর JWT দেয়?
নিজেকে যাচাই করোপ্রশ্ন
একটা mobile app-কে প্রতিটা sign in করা user-কে সরাসরি S3-এ photo upload করতে দিতে হবে, কোনো backend server ছাড়া, app-এ কোনো দীর্ঘমেয়াদি key না রেখে। Architect কী ব্যবহার করবেন?
নিজেকে যাচাই করোপ্রশ্ন
একটা বিশ্ববিদ্যালয় DynamoDB-তে grade রাখে, partition key হলো identity pool-এর identity ID। একটা ভাগাভাগি করা IAM role দিয়ে প্রতিটা student কীভাবে শুধু নিজের item পড়বে?
নিজেকে যাচাই করোপ্রশ্ন
একটা app guest mode দেয়, যেখানে account না খোলা দর্শনার্থীরা S3 থেকে একটা public catalogue পড়তে পারে। Cognito-র কোন feature এটা দেয়?
নিজেকে যাচাই করোপ্রশ্ন
এক developer শুধু একটা Cognito user pool বানিয়েছেন, আর ID token header-এ দিয়ে S3-এ PutObject পাঠাচ্ছেন। Request 403 দিয়ে fail করছে। কারণ কী?
নিজেকে যাচাই করোপ্রশ্ন
একটা ভেতরের dashboard EC2-তে, একটা Application Load Balancer-এর পেছনে চলে, আর তাতে login-এর কোনো code নেই। Company চায় instance-এ কোনো request পৌঁছানোর আগে কর্মীরা একটা Cognito user pool দিয়ে sign in করুক, সবচেয়ে কম development-এ। কী করবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা app-এর যাত্রীরা API Gateway-র একটা REST API ডাকে। Company চায়, authorizer-এর code না লিখেই API Gateway বৈধ user pool token ছাড়া request ফিরিয়ে দিক। কী configure করবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা logistics portal partner company-গুলোর কয়েকশো কর্মী ব্যবহার করবে, প্রতিটা partner নিজের company-র SAML identity provider দিয়ে sign in করবে। কোনটা সবচেয়ে মানানসই?
নিজেকে যাচাই করোপ্রশ্ন
হিসাব করো: একটা app-এর ৪০,০০০ monthly active user সরাসরি Essentials plan-এর একটা user pool-এ sign in করে (১০,০০০ MAU ফ্রি, তারপর প্রতি MAU ০.০১৫ USD)। মাসিক user pool bill কত?
নিজেকে যাচাই করোপ্রশ্ন
একটা fintech চায় তাদের user pool এমন sign-in ধরুক, যেখানে public breach-এ ফাঁস হওয়া password ব্যবহার হচ্ছে, আর ঝুঁকিপূর্ণ sign-in-এ বাড়তি যাচাই চাক। কী লাগবে?
নিজেকে যাচাই করোপ্রশ্ন
Cognito identity pool নিয়ে কোন দুটো কথা সত্যি?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
Default setting-এ Cognito user pool-এর token নিয়ে কোন দুটো কথা ঠিক?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
কোন দুটো scenario-তে পরীক্ষা শুধু user pool না, বরং (বা সাথে) একটা Cognito identity pool আশা করে?
বেছে নাও ২