কম্পিউটার

AWS Lamba-তে রুবি ব্যবহার করা

গতকাল যখন AWS Lambda-এ রুবি সমর্থন ঘোষণা করা হয়েছিল, তখন আমি এটি নিয়ে খুব উত্তেজিত ছিলাম যে আমাকে এখনই এটি চেষ্টা করতে হয়েছিল। আমরা হানিব্যাজারে কিছুক্ষণের জন্য ল্যাম্বদা ব্যবহার করছি, এবং আমি রুবিতে আমাদের ফাংশনগুলি লিখতে সক্ষম হতে চাই। কয়েক ঘন্টার জন্য নতুন রুবি সমর্থনের সাথে খেলে, আমি আত্মবিশ্বাসী বোধ করছি যে আমরা নোড, গো এবং পাইথনের সাথে কম সময় ব্যয় করব। :)

একটি দ্রুত উদাহরণ

যদিও AWS-এর থেকে ঘোষণার ব্লগ পোস্ট আপনাকে রুবি অন ল্যাম্বডা-এর সাথে দ্রুত কাজ করতে পারে, আমি আপনার রুবি ল্যাম্বডা ফাংশনগুলি স্থাপন করতে সার্ভারলেস ফ্রেমওয়ার্ক ব্যবহার করার একটি উদাহরণ শেয়ার করতে চেয়েছিলাম। আমি খুঁজে পেয়েছি এই কাঠামোটি ল্যাম্বডা ফাংশনগুলির সাথে কাজ করার বিরক্তিগুলি দূর করার জন্য একটি দুর্দান্ত কাজ করে। যদিও ফ্রেমওয়ার্কের বর্তমান সংস্করণে (1.34) রুবি প্রকল্পগুলির জন্য টেমপ্লেট জেনারেশন এখনও প্রস্তুত নেই (আমি এই পোস্টটি লেখা শুরু করার কয়েক ঘন্টা আগে PR মার্জ করা হয়েছিল), জেনারেটর ছাড়াই শুরু করা যথেষ্ট সহজ। এখানে একটি নমুনা কনফিগারেশন ফাইল রয়েছে যা আমি এই ওয়াকথ্রুতে ব্যবহার করব, এটি একটি সহজ ফাংশন যা S3 অবজেক্টের সাথে সম্পর্কিত মেটাডেটা সহ একটি DynamoDB টেবিল তৈরি করবে:

কনফিগারেশনের রিসোর্স সেকশনের ফলে একটি নতুন DynamoDB টেবিল স্বয়ংক্রিয়ভাবে তৈরি হয় এবং সদ্য তৈরি টেবিলের নামটি ফাংশনের জন্য একটি এনভায়রনমেন্ট ভেরিয়েবলের মধ্যে রাখা হয়, যা আমরা কোডে ব্যবহার করব। ফাংশনটি পূর্বে তৈরি করা একটি SNS বিষয়ের জন্য SNS ইভেন্ট দ্বারা ট্রিগার করা হয়। সেই SNS বিষয় S3 বালতিতে PUTevents-এর জন্য বিজ্ঞপ্তি পায়, যা নিজেও তৈরি করা হয়।

এখানে রুবি কোড:

কোডটি অনেক কিছু করে না -- এটি SNS ইভেন্টগুলি গ্রহণ করে, SNS বার্তাগুলির রেকর্ডগুলির মাধ্যমে লুপ করে তৈরি করা প্রতিটি S3 অবজেক্ট সম্পর্কে তথ্য পেতে, মেটাডেটা পেতে S3 অবজেক্টে একটি HEAD অনুরোধ করে, তারপর রাখে (তৈরি করে) বা আপডেট) ডায়নামোডিবি টেবিলের একটি আইটেম। এই ফাংশনের জন্য একমাত্র নির্ভরতা হল AWS SDK, যা রানটাইম পরিবেশে অন্তর্ভুক্ত, তাই আপনার এমনকি একটি Gemfile নিয়ে চিন্তা করার দরকার নেই। যাইহোক, যদি আপনার কাছে কিছু অতিরিক্ত রত্ন থাকে যা আপনি পার্টিতে আনতে চান তবে এটি করা সহজ। আসুন আমরা মোতায়েন সম্পর্কে কথা বলার সাথে সাথে কীভাবে অতিরিক্ত রত্নগুলি অন্তর্ভুক্ত করতে হয় তা দেখে নেওয়া যাক৷

ডিপ্লয়মেন্ট

এই কোডটি বর্তমান অবস্থায় ল্যাম্বডায় পাওয়া খুবই সহজ, সার্ভারহীন ফ্রেমওয়ার্ককে ধন্যবাদ:

sls deploy

এই একটি আদেশ আপনার জন্য এই সব করবে:

  • আপনার কোড জিপ আপ করুন
  • জিপ ফাইলটি S3 এ রাখুন
  • ল্যাম্বডাতে ফাংশনটি স্থাপন করুন (এনভায়রনমেন্ট ভেরিয়েবল এবং এসএনএস ট্রিগার সহ সম্পূর্ণ)
  • আইএএম নীতিগুলি তৈরি করুন
  • DynamoDB টেবিল তৈরি করুন

একবার স্থাপন করা হয়ে গেলে, বালতিতে বস্তু তৈরি করার ফলে DynamoDB টেবিলে নতুন আইটেম যোগ করা হবে।

নির্ভরতা

আপনার নিয়োজিত ফাংশনের সাথে অতিরিক্ত রত্ন নির্ভরতাগুলি পাওয়া সহজ -- আপনাকে যা করতে হবে তা হল একটি জেমফাইল তৈরি করা, আপনি যে রত্নগুলি বান্ডিল করতে চান তা যোগ করুন এবং bundle install --path vendor/bundle চালান। . এটি স্থানীয় ডিরেক্টরিতে রত্নগুলিকে বান্ডেল করবে এবং সেগুলি জিপ করা হবে এবং আপনার বাকি কোডের সাথে ফাংশনে যুক্ত হবে৷

নির্ভরতার জন্য একটি সতর্কতা, যদিও, রত্ন যা কিছু ধরণের C এক্সটেনশন কম্পাইল করা প্রয়োজন। যেহেতু আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট সম্ভবত ল্যাম্বডা রানটাইম এনভায়রনমেন্ট থেকে ভিন্ন, তাই আপনাকে এই এক্সটেনশনগুলিকে AWS-এ কাজ করার জন্য কম্পাইল করার জন্য একটু বেশি কাজ করতে হবে। যদিও ল্যাম্বসি ডকার ইমেজগুলির জন্য ধন্যবাদ, এবং ডকার ইমেজটি তাদের রুবি ইমেজের উপরে তৈরি করা হয়েছে। , এটা করা কঠিন নয়। আপনার নির্ভরতা বান্ডিল করতে এবং সেগুলি সঠিকভাবে সংকলিত করতে, শুধু আমার ডকার চিত্রটি চালান, যেমন:

docker run --rm -v $(pwd):/var/task stympy/lambda-ruby2.5

এটি যা করে তা হল উপরে উল্লিখিত বান্ডলার কমান্ড লাইন চালানো, তাই রত্নগুলি vendor/bundle-এ স্থাপন করা হবে , জিপ ফাইলে অন্তর্ভুক্ত করার জন্য প্রস্তুত যা deploy দ্বারা তৈরি করা হয়েছে আদেশ।

যে সঙ্গে, আপনি ঘোড়দৌড় বন্ধ করছি. আমি আশা করি আপনি রুবিকে ল্যাম্বডায় চালানো আমার মতো উপভোগ করবেন। :)


  1. রুবিতে জটিল ব্যতিক্রম আচরণ অন্বেষণ করতে ট্রেসপয়েন্ট ব্যবহার করে

  2. রুবিতে AWS Lambda ফাংশন তৈরি করা, পরীক্ষা করা এবং স্থাপন করা

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

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