কম্পিউটার

রুবিতে AWS Lambda ফাংশন লেখা

AWS Lambda আমাদের ওভারহেড মিনিমাইজ করার সময় স্কেলেবল ফাংশন সেট আপ করার অনুমতি দেয়। সম্পূর্ণ রুবি অন রেল অ্যাপ লেখা, হোস্টিং এবং রক্ষণাবেক্ষণের পরিবর্তে, আমরা স্বতন্ত্র ইভেন্টগুলিতে প্রতিক্রিয়া জানাতে Lambda ফাংশন ব্যবহার করতে পারি। এই নিবন্ধটি আপনাকে একজন AWS নবাগত থেকে আপনার নিজস্ব Lambda ফাংশনে রুবি লিখতে নিয়ে আসবে।

ল্যাম্বডা আপনাকে সার্ভার পরিচালনা না করে ইভেন্টের প্রতিক্রিয়া হিসাবে কোড চালানোর অনুমতি দেয়। এই ইভেন্ট-চালিত আর্কিটেকচার নিশ্চিত করে যে আপনি শুধুমাত্র আপনার কোডের জন্য অর্থ প্রদান করবেন যখন এটি আপনার জন্য কাজ করছে, এটি অলস থাকা অবস্থায় নয়। যদিও Lambda সাধারণত AWS ইকোসিস্টেমের মধ্যে ইভেন্টগুলিতে প্রতিক্রিয়া জানাতে ব্যবহৃত হয়, যেমন S3 বাকেটের একটি ফাইল মুছে ফেলা, এটি AWS API গেটওয়ের সাথে একত্রে একটি API হিসাবে কাজ করার জন্যও কনফিগার করা যেতে পারে।

ক্রন জবস বা ইভেন্টের প্রতিক্রিয়া হিসাবে সময়ের উপর ভিত্তি করে কাজগুলি স্বয়ংক্রিয় করতে কেউ ল্যাম্বডা ব্যবহার করতে পারে। এটি ডাটা প্রসেসিং-এ প্রসারিত হতে পারে, প্রায়শই অন্যান্য AWS পরিষেবাগুলির সাথে, যেমন DynamoDB, বা এমনকি একটি স্কেলযোগ্য API-তেও। উদাহরণস্বরূপ, আমাজনের ডকুমেন্টেশন থেকে নিম্নলিখিত চিত্রটি একটি সাধারণ আর্কিটেকচার দেখায় যেখানে একটি মোবাইল ক্লায়েন্ট একটি HTTP অনুরোধ করে, সম্ভবত ডাটাবেসে কিছু CRUD অ্যাকশন সম্পাদন করার জন্য। এপিআই গেটওয়ে অনুরোধটিকে সংশ্লিষ্ট ল্যাম্বডা ফাংশনে রুট করে (যেমন রেল রুট করে HTTP অনুরোধ একটি কন্ট্রোলারের কাছে), এবং এটি ব্যবসায়িক যুক্তি সম্পাদন করে এবং অনুরোধটি পূরণ করতে AWS DynamoDB এর সাথে যোগাযোগ করে।

রুবিতে AWS Lambda ফাংশন লেখা

যেহেতু আমাদের কোড একটি পাত্রে চালানো হয়, অ্যামাজনের অবকাঠামো স্বয়ংক্রিয়ভাবে ফাংশনটিকে এক ধরণের স্লিপ মোডে রাখে যখন এটি ব্যবহার করা হচ্ছে না। যখন একটি নতুন অনুরোধ আসে, কন্টেইনারটি অবশ্যই একটি ঠান্ডা অবস্থা থেকে শুরু করতে হবে, যা কার্যকর করার সময় 2000ms পর্যন্ত বাড়িয়ে দিতে পারে। এটি শুধুমাত্র প্রতিক্রিয়া সময়ের পরিপ্রেক্ষিতে আপনার পরিষেবার মানকে হ্রাস করতে পারে না কিন্তু আপনার অর্থও খরচ করতে পারে। এই কারণে, একটি সময়-সংবেদনশীল কাজের জন্য ল্যাম্বডা ব্যবহার করা, যেমন ব্যবহারকারীর ইমেল পাঠানো বা UI ইভেন্টগুলিতে প্রতিক্রিয়া জানানো, একটি বাধা তৈরি করতে পারে। আপনি ফাংশনটি 'উষ্ণ' রাখার জন্য পর্যায়ক্রমিক অনুরোধ করার জন্য AWS CloudWatch-এর সময়সূচী করে এই সমস্যাটি প্রশমিত করতে পারেন, কিন্তু এটি হোস্টিং খরচ বাড়িয়ে দেবে৷

কেন AWS Lambda ব্যবহার করবেন

Amazon Web Services (AWS) হল বিশ্বের সবচেয়ে জনপ্রিয় ক্লাউড কম্পিউটিং পরিষেবা। স্বাধীন ডেভেলপারদের জন্য এটি ব্যবহার করা যথেষ্ট সহজ কিন্তু বিশ্বের বৃহত্তম কোম্পানিগুলির জন্য পরিকাঠামো হিসাবে পরিবেশন করার জন্য যথেষ্ট শক্তিশালী এবং মাপযোগ্য৷

AWS Lambda হল Amazon থেকে এমন একটি অফার যা একটি 'সার্ভারলেস কম্পিউট সার্ভিস' হিসেবে কাজ করে, যা আমাদের শুধুমাত্র ইভেন্টের প্রতিক্রিয়ায় কোড চালানোর অনুমতি দেয়। এটি ওভারহেড হ্রাস করে এবং আমাদেরকে একটি সম্পূর্ণ সার্ভার হোস্ট না করে বা একটি সম্পূর্ণ অ্যাপ তৈরি না করে একটি API কলের মতো প্রোগ্রামেটিকভাবে প্রতিক্রিয়া জানাতে দেয়৷

সঠিক ব্যবহারের ক্ষেত্রে, এই সার্ভারহীন স্থাপত্য খরচে একটি ভাগ্য বাঁচাতে পারে। মূল্য নির্ধারণ করা হয় অনুরোধ প্রতি খরচ এবং গণনার সময়কাল প্রতি খরচ. একটি প্রদত্ত মাসে প্রথম এক মিলিয়ন অনুরোধের পরে, মূল্য হল প্রতি এক মিলিয়ন অনুরোধের জন্য $0.20 প্লাস $0.0000166667 প্রতি GB-সেকেন্ডের গণনা সময়ের জন্য ফাংশনটি ব্যবহার করে৷ আপনি যেমন কল্পনা করতে পারেন, এই রেট-ভিত্তিক মূল্য ল্যাম্বডাতে একটি ছোট পরিষেবা চালানোর জন্য এটিকে উল্লেখযোগ্যভাবে সস্তা করে তোলে এবং একই হারে অসীমভাবে স্কেলিং করার বিকল্পটি বজায় রাখে।

রুবি ডেভেলপাররা API কল বা এমনকি অন্যান্য AWS ইভেন্টগুলিতে প্রতিক্রিয়া জানাতে একটি রাষ্ট্রহীন উপায় হিসাবে ব্যবহার করে এই ক্লাউড পরিষেবা থেকে উপকৃত হতে পারেন৷

একটি ট্রায়াল AWS অ্যাকাউন্ট সেট আপ করা

AWS একটি উদার বিনামূল্যের স্তর প্রদান করে যার মধ্যে রয়েছে এক মিলিয়ন বিনামূল্যের অনুরোধ এবং AWS Lambda এর সাথে প্রতি মাসে 3.2 মিলিয়ন সেকেন্ড পর্যন্ত গণনা সময়! আপনার যদি ইতিমধ্যে একটি অ্যাকাউন্ট থাকে তবে আপনি এই পদক্ষেপটি এড়িয়ে যেতে পারেন, তবে একটি সেট আপ করা খুবই সহজ৷

এখানে সাইন আপ করতে এগিয়ে যান এবং শুরু করতে আপনার তথ্য পূরণ করুন! রুবিতে AWS Lambda ফাংশন লেখা

আপনাকে অ্যাকাউন্টের ধরন এবং যোগাযোগের তথ্য সহ আরও তথ্য পূরণ করার জন্য অনুরোধ করা হবে, এবং বিনামূল্যে স্তরের বাইরে যেকোনো ব্যবহার কভার করার জন্য আপনাকে ক্রেডিট/ডেবিট কার্ডের তথ্য লিখতে হবে। Lambda-এর আমাদের সহজ ব্যবহার বিনামূল্যের স্তরে অন্তর্ভুক্ত করা হয়েছে, কিন্তু আপনি যদি দুর্ঘটনাজনিত মাত্রাতিরিক্ত হওয়ার বিষয়ে উদ্বিগ্ন হন, তাহলে আপনি আপনার ব্যবহার নিয়ন্ত্রণ করতে এবং অপ্রত্যাশিত বিলিং রোধ করতে একটি বাজেট সেট আপ করতে পারেন৷

রুবি দিয়ে একটি ল্যাম্বডা ফাংশন তৈরি করা

একবার আপনি নিবন্ধিত হয়ে গেলে, পণ্যের উপর হোভার করুন , তারপর গণনা করুন , এবং Lambda নির্বাচন করুন .

রুবিতে AWS Lambda ফাংশন লেখা

আপনি একবার Lambda কনসোলে (আপনাকে 'শুরু করুন' মারতে হতে পারে), আপনি "ফাংশন তৈরি করুন" এর জন্য একটি কমলা বোতাম সহ ফাংশনের একটি খালি তালিকা দেখতে পাবেন। আপনি হয়তো অনুমান করেছেন, আমরা সেই কমলা "ফাংশন তৈরি করুন" বোতাম টিপব৷

রুবিতে AWS Lambda ফাংশন লেখা

তারপর, আমরা "স্ক্র্যাচ থেকে লেখক" বেছে নেব, কারণ রুবির জন্য এখনও কোনও টেমপ্লেট ফাংশন নেই, এবং স্ক্র্যাচ থেকে কাজ করা শেখার সেরা উপায়৷

আপনি আপনার ফাংশনটিকে যথাযথভাবে নাম দিতে হবে এবং রুবি সংস্করণটি নির্বাচন করুন যার সাথে আপনি কাজ করতে চান। বিখ্যাত প্রোগ্রামিং সমস্যার পরে আমি আমার FizzBuzz বলেছিলাম।

আপনাকে lambda_function.rb-এ ডাবল-ক্লিক করতে হতে পারে ন্যাভিগেশন প্যানে ফাইলটি সোর্স কোড প্রদর্শিত করতে।

ফাংশনটি পূর্ব লিখিত এবং শিরোনাম lambda_handler . এটি দাঁড়িয়েছে, যখন এটি চালু করা হয় তখন ফাংশনটি "হ্যালো ফ্রম ল্যাম্বডা!" পাঠ্য সহ একটি 200 প্রতিক্রিয়া প্রদান করবে, আপনি নীচে দেখতে পাচ্ছেন। রুবিতে AWS Lambda ফাংশন লেখা

ল্যাম্বডা ফাংশনের জন্য টেস্ট ট্রিগার ব্যবহার করা

ভূমিকায় যেমন আলোচনা করা হয়েছে, ল্যাম্বডা ফাংশনগুলি বিভিন্ন উপায়ে ট্রিগার করা যেতে পারে। সবচেয়ে সাধারণ একটি API কল মাধ্যমে হয়. তবে এটির জন্য AWS API গেটওয়ে সেট আপ করতে হবে, যা এই নিবন্ধের সুযোগের বাইরে। API গেটওয়ে খুব কম কনফিগারেশন এবং অসীম স্কেলেবিলিটি সহ API তৈরি করতে Lambda-এর সাথে চমৎকারভাবে কাজ করে।

সৌভাগ্যবশত আমাদের জন্য, ফাংশন কনসোলের মাধ্যমে একটি API কল অনুকরণ করা খুব কঠিন নয়, এবং একটি পরীক্ষামূলক ইভেন্ট ইতিমধ্যেই আমাদের জন্য সারিবদ্ধ রয়েছে .

ফাংশন ওভারভিউর নীচে একটি টুলবার রয়েছে যা বর্তমানে "কোড" নির্বাচন করেছে। শেষ স্ক্রিনশটে দেখানো হয়েছে, "কোড" এর ঠিক পাশেই রয়েছে "পরীক্ষা শিরোনামের একটি ট্যাব "। এগিয়ে যান এবং "পরীক্ষা" নির্বাচন করুন এবং আপনি কোড উৎসের জায়গায় টেস্ট কনসোলটি উপস্থিত দেখতে পাবেন।

রুবিতে AWS Lambda ফাংশন লেখা

পূর্ব-কনফিগার করা পরীক্ষা ইভেন্ট হল একটি JSON অবজেক্ট যা ল্যাম্বডা ফাংশনে event হিসাবে পাঠানো হয় বস্তু, যা ফাংশন একটি প্যারামিটার হিসাবে নেয়। আপনি যদি এপিআই গেটওয়ের মাধ্যমে কোনো এন্ডপয়েন্টে কল করেন, তাহলে এটি হবে অনুরোধের মূল অংশ।

যেহেতু স্থানধারক Lambda ফাংশনটি ইভেন্টটি পড়ে না, তাই আমরা বডি হিসাবে কী পাঠাই তা খুব একটা ব্যাপার নয়। যেমন, আমরা কমলা "আমন্ত্রণ করুন ট্যাপ করে লিখিতভাবে এগিয়ে যেতে পারি " বোতাম৷

আপনি যদি ফাংশনটি সঠিকভাবে সেট আপ করে থাকেন, তাহলে আপনি "Execution Succeeded" শিরোনামের একটি সবুজ বাক্স দেখতে পাবেন, যা আপনি আপনার ফাংশন থেকে JSON প্রতিক্রিয়া দেখতে প্রসারিত করতে পারেন৷

FizzBuzz লেখা

এখন যেহেতু আমরা নিশ্চিত করেছি যে আমাদের Lambda ফাংশন সঠিকভাবে কাজ করছে, আমরা এটিকে আমাদের নিজস্ব কাস্টম রুবি কোড দিয়ে কাস্টমাইজ করতে পারি। এই উদাহরণে, আমাদের Lambda ফাংশনটি বিখ্যাত FizzBuzz সমস্যার প্রতিক্রিয়া জানাতে হবে। FizzBuzz একটি ইন্টারভিউ প্রিয়, এবং প্রম্পটটি এরকম কিছু হয়

একটি প্রোগ্রাম লিখুন যা 1 থেকে 50 পর্যন্ত সংখ্যাগুলিকে প্রিন্ট করে৷ কিন্তু, তিনটির গুণিতকের জন্য, তারপরের সংখ্যার পরিবর্তে "Fizz" প্রিন্ট করুন এবং পাঁচটির গুণকের জন্য "Buzz" প্রিন্ট করুন। যে সংখ্যাগুলি তিনটি এবং পাঁচ প্রিন্ট উভয়ের গুণিতক "FizzBuzz"৷

আপনার Lambda ফাংশনে কোডটি আমার FizzBuzz সমাধান -

দিয়ে প্রতিস্থাপন করুন
require 'json'

def lambda_handler(event:, context:)
    max_val = event['max_val']
    textResponse = ''
    1.upto(max_val) do |i|
      if i % 5 == 0 and i % 3 == 0
        textResponse += "FizzBuzz"
      elsif i % 5 == 0
        textResponse += "Buzz"
      elsif i % 3 == 0
        textResponse += "Fizz"
      else
        textResponse += i.to_s
      end
    end
    { statusCode: 200, body: JSON.generate(textResponse) }
end

এটি স্বাভাবিক FizzBuzz একটি স্পিন একটি সামান্য বিট. শুধুমাত্র 50 এর মাধ্যমে লুপ করার পরিবর্তে, আমরা ইভেন্টের সাথে পাঠানো সংখ্যার মাধ্যমে লুপ করছি। ইভেন্ট অবজেক্টটি একটি অভিধানের মতো পাস করা হয়েছে, তাই event[max_val] জিজ্ঞাসা করা হচ্ছে max_val-এ মান প্রদান করে চাবি. অবশেষে, FizzBuzz সমাধান প্রিন্ট করার পরিবর্তে, আমরা এটিকে একটি স্ট্রিং-এ যুক্ত করি যা আমরা একটি JSON অবজেক্ট হিসাবে ফিরে আসি।

এরপর, নিশ্চিত করুন যে আপনি নতুন কোডের সাথে আপনার Lambda ফাংশন আপডেট করতে অরেঞ্জ "ডিপ্লয়" বোতামটি চাপছেন .

আপনি সমাধানটি লেখার পরে এবং এটি স্থাপন করার পরে, টেস্ট কনসোলে ফিরে যান। শুধুমাত্র একটি max_val পাস করতে আপনার পরীক্ষার ইভেন্ট পরিবর্তন করুন কী/মান জোড়া। এটি এইরকম হওয়া উচিত:

রুবিতে AWS Lambda ফাংশন লেখা

JSON হল সহজভাবে

{
  "max_val": 70
}

অবশেষে, আপনার পরীক্ষা চালানোর জন্য "আমন্ত্রণ" টিপুন! আপনি ফলাফলটি প্রসারিত করতে পারেন দেখাতে যে ফাংশনটি ইনপুটটি পড়ে এবং FizzBuzz সমস্যার ফলাফল প্রদান করে৷

আরো সহজ বিকাশ

ওয়েব কনসোলে কাজ করার সময় শেখার উদ্দেশ্যে সুবিধাজনক হয়েছে, এটিতে সীমাবদ্ধ থাকা একটি দুঃস্বপ্ন হবে। AWS Lambda-এর সাথে বিকাশের সবচেয়ে জনপ্রিয় উপায়গুলির মধ্যে একটি হল CLI ব্যবহার করা, যার অর্থ কমান্ড লাইন ইন্টারফেস।

একবার আপনি IAM ভূমিকার মাধ্যমে সঠিক অনুমতি তৈরি করলে, আপনার মেশিনে CLI ইনস্টল করুন এবং আপনার শংসাপত্রের সাথে এটি কনফিগার করুন। তারপরে, আপনি স্থানীয়ভাবে (আপনার পছন্দের IDE-তে) বিকাশ করার সাথে সাথে আপনার ফাংশন পরীক্ষা করতে ল্যাম্বডা CLI ব্যবহার করতে পারেন এবং কমান্ড লাইনের মাধ্যমে আপনার পরিবর্তনগুলি স্থাপন করতে পারেন।

আরেকটি জনপ্রিয় উন্নয়ন পদ্ধতি হল ফ্রেমওয়ার্কের মাধ্যমে, যেমন সার্ভারলেস। সার্ভারলেস অনেক কষ্টকর কনফিগারেশন পরিচালনা করে যা AWS এর সাথে জর্জরিত, এপিআই গেটওয়ে সেট আপ সহ আপনার ফাংশনের জন্য এটির প্রয়োজন হলে। সার্ভারলেস লগিং বাড়ায়, রুবি জেম ব্যবস্থাপনাকে সহজ করে তোলে এবং CI/CD কনফিগারেশনের অনুমতি দেয়, যাতে আপনি পাইপলাইনের উপর ভিত্তি করে আপনার সংগ্রহস্থল থেকে স্বয়ংক্রিয়ভাবে স্থাপন করতে পারেন।

রুবি জেমস সহ সার্ভারলেস বা অনুরূপ ফ্রেমওয়ার্ক ব্যবহার না করে কিছু হুপ দিয়ে লাফ দেওয়া প্রয়োজন। একটি ফোল্ডার জড়িত করার জন্য আপনাকে আপনার ফাংশন প্রসারিত করতে হবে এবং তারপর একটি .bundle/config তৈরি করতে হবে আপনার রুট ডাইরেক্টরীতে যে ফাইলে নিচের ইনিশিয়ালাইজেশন কোড আছে তা বান্ডলারকে জানাতে আপনার ইন্সটল করা রত্নগুলো কোথায় রাখতে হবে:

---
BUNDLE_PATH: "vendor/bundle"

তারপর, আপনি bundle add করতে CLI ব্যবহার করতে পারেন আপনার প্রয়োজন এবং require রত্ন এগুলি সরাসরি আপনার কোডে৷

AWS Lambda-এর সীমাবদ্ধতা

অভিনন্দন, আপনি এইমাত্র রুবিতে আপনার প্রথম AWS Lambda ফাংশন লিখেছেন! পূর্বে, রুবির সাথে একটি API চালানোর একমাত্র সম্ভাব্য সমাধান ছিল প্রায়শই একটি সম্পূর্ণ রেল অ্যাপ তৈরি করা। এখন, আপনি সম্পূর্ণ অ্যাপ্লিকেশনের সাথে আসা সমস্ত ব্লোট এড়িয়ে গিয়ে একবারে একটি শেষ পয়েন্ট তৈরি করতে পারেন। Lambda মাইক্রোসেকেন্ডে ব্যবহারের জন্য বিল, তাই এটি দ্রুত সমাধানের জন্য উল্লেখযোগ্যভাবে সস্তা হতে পারে। তদুপরি, এই ক্লাউড অফারটির সুবিধা নেওয়া আমাদের কম খরচে কাজ করার অনুমতি দেয় তবে অবিশ্বাস্যভাবে দ্রুত স্কেল করতে পারে। AWS হল কারণ Netflix সর্বোচ্চ-ক্ষমতার সার্ভার ব্যান্ডউইথের জন্য ধ্রুবক অর্থ প্রদান না করেই পিক আওয়ারে কাজ করে।

সমস্ত জয় সত্ত্বেও, AWS Lambda একটি ক্যাচ-অল সমাধান নয়। এটি নিজে থেকে একটি API হিসাবে কাজ করবে না এবং এটির রাষ্ট্রীয় ক্ষমতার মধ্যে সীমাবদ্ধ। Lambda ফাংশন চালানোর জন্য 15 মিনিটের বেশি সময় নিতে পারে না, এবং মেমরি 6GB পর্যন্ত সীমাবদ্ধ। ল্যাম্বডা ফাংশনগুলি পরীক্ষা করাও কিছুটা চ্যালেঞ্জ, কারণ আপনাকে প্রায়শই একটি পৃথক পরিবেশে আপনার সম্পূর্ণ পরিকাঠামোর নকল করতে হবে৷

আপনার যদি এমন কোনো অ্যাপ বা বৈশিষ্ট্য থাকে যা 24/7 চালানোর প্রয়োজন নেই, তাহলে Lambda হয়ত একটি ভাল ফিট হতে. যদি আপনার ফাংশনকে AWS ইকোসিস্টেমের বাইরে কোনো ধরনের অবস্থা বজায় রাখতে বা এমনকি ডেটা আপডেট করতে হয়, তাহলে Lambda উপযুক্ত নয়। Lambda 1,000 সমবর্তী সংযোগগুলিতেও ডিফল্ট করে, তাই একটি অ্যাপ্লিকেশন যা ধারাবাহিকভাবে এর চেয়ে বেশি ব্যবহার দেখায় তা Lambda-তে খুব অবিশ্বস্ত হবে। মূলত, Lambda স্বল্প-স্থায়ী ইভেন্ট-চালিত অটোমেশন টাস্কগুলিতে সবচেয়ে ভাল ব্যবহার করা হয় যেগুলির জন্য স্থায়ী অবস্থার প্রয়োজন হয় না৷

Lambda ফাংশন একটি শক্তিশালী টুল হতে পারে, বিশেষ করে আপনার মত একজন রুবি ডেভেলপারের হাতে।


  1. AWS Lambda এ রেল স্থাপন করা হচ্ছে

  2. শেল স্ক্রিপ্টে ফাংশন বোঝা এবং লেখা - পার্ট VI

  3. রুবি ফাংশন এবং পদ্ধতি:আপনার নিজের সংজ্ঞায়িত কিভাবে

  4. রুবি 2.6-এ 9টি নতুন বৈশিষ্ট্য