AWS Lambda में Rust पर Serverless फ़ंक्शन: पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: Rust Serverless के लिए आदर्श भाषा क्यों है

\n\n

Serverless-आर्किटेक्चर आधुनिक क्लाउड एप्लिकेशन के लिए मानक बन गया है। हालांकि, पारंपरिक भाषाएं (Python, Node.js) अक्सर धीमी कोल्ड स्टार्ट और उच्च मेमोरी खपत से ग्रस्त होती हैं। Rust इन समस्याओं को हल करता है: इसके कंपाइल किए गए बाइनरी मिलीसेकंड में शुरू होते हैं, और मेमोरी की खपत न्यूनतम होती है। इस लेख में, हम देखेंगे कि Rust पर AWS Lambda फ़ंक्शन कैसे बनाएं, डिप्लॉय करें और ऑप्टिमाइज़ करें — एनवायरनमेंट सेटअप से लेकर production-डिप्लॉय तक।

\n\n

1. एनवायरनमेंट और टूल्स का सेटअप

\n\n

Rust और Cargo Lambda की स्थापना

\n

AWS Lambda पर Rust के साथ काम करने के लिए आवश्यक:

\n
    \n
  • Rust (rustup के माध्यम से स्थापना)
  • \n
  • Cargo Lambda — बिल्ड और डिप्लॉय के लिए आधिकारिक टूल
  • \n
  • AWS CLI कॉन्फ़िगर किए गए credentials के साथ
  • \n
\n\n
# Rust की स्थापना\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\n# Cargo Lambda की स्थापना\ncargo install cargo-lambda\n\n# जांच\ncargo lambda --version
\n\n

नया प्रोजेक्ट बनाना

\n

Cargo Lambda स्वचालित रूप से Lambda Runtime API के समर्थन के साथ एक टेम्पलेट उत्पन्न करता है:

\n\n
cargo lambda new my-rust-lambda\ncd my-rust-lambda
\n\n

प्रोजेक्ट संरचना में lambda_runtime और serde निर्भरताओं के साथ Cargo.toml, साथ ही बेसिक हैंडलर फ़ंक्शन के साथ src/main.rs फ़ाइल शामिल है।

\n\n

2. Rust पर पहला Serverless फ़ंक्शन लिखना

\n\n

हैंडलर की बुनियादी संरचना

\n

एक सरल Lambda-फ़ंक्शन पर विचार करें जो नाम के साथ JSON लेता है और अभिवादन लौटाता है:

\n\n
use lambda_runtime::{service_fn, LambdaEvent, Error};\nuse serde::{Deserialize, Serialize};\n\n#[derive(Deserialize)]\nstruct Request {\n    name: String,\n}\n\n#[derive(Serialize)]\nstruct Response {\n    message: String,\n    request_id: String,\n}\n\nasync fn handler(event: LambdaEvent<Request>) -> Result<Response, Error> {\n    let req = event.payload;\n    let resp = Response {\n        message: format!("नमस्ते, {}! तुम Rust पर हो!", req.name),\n        request_id: event.context.request_id,\n    };\n    Ok(resp)\n}\n\n#[tokio::main]\nasync fn main() -> Result<(), Error> {\n    lambda_runtime::run(service_fn(handler)).await\n}
\n\n

मुख्य बिंदु:

\n
    \n
  • service_fn एसिंक्रोनस फ़ंक्शन को हैंडलर में लपेटता है
  • \n
  • LambdaEvent में payload और कॉन्टेक्स्ट (request_id, deadline आदि) होता है
  • \n
  • serde के माध्यम से सीरियलाइज़ेशन/डीसीरियलाइज़ेशन
  • \n
\n\n

लोकल टेस्टिंग

\n

डिप्लॉय से पहले फ़ंक्शन को लोकल रूप से टेस्ट करें:

\n\n
cargo lambda watch\n# दूसरे टर्मिनल में:\ncargo lambda invoke --data-ascii '{"name": "दुनिया"}'
\n\n

आपको उत्तर मिलना चाहिए: {"message":"नमस्ते, दुनिया! तुम Rust पर हो!","request_id":"..."}

\n\n

3. AWS सेवाओं (S3, DynamoDB) के साथ काम करना

\n\n

AWS SDK के माध्यम से S3 के साथ एकीकरण

\n

Cargo.toml में जोड़ें:

\n\n
[dependencies]\naws-sdk-s3 = "1.0"\naws-config = "1.0"
\n\n

S3 से ऑब्जेक्ट पढ़ने वाले फ़ंक्शन का उदाहरण:

\n\n
use aws_sdk_s3::Client;\n\nasync fn handler(event: LambdaEvent<Request>) -> Result<Response, Error> {\n    let config = aws_config::load_from_env().await;\n    let s3_client = Client::new(&config);\n\n    let bucket = "my-bucket";\n    let key = &event.payload.name;\n\n    let object = s3_client\n        .get_object()\n        .bucket(bucket)\n        .key(key)\n        .send()\n        .await?;\n\n    let body = object.body.collect().await?;\n    let content = String::from_utf8(body.to_vec())?;\n\n    Ok(Response {\n        message: format!("फ़ाइल की सामग्री: {}", content),\n        request_id: event.context.request_id,\n    })\n}
\n\n

में

ब्लॉग

पुस्तक अनुशंसाएँ