সার্ভারলেস কম্পিউটিং একটি ক্লাউড প্রদানকারীর সার্ভার পরিচালনা এবং প্রভিশনিংয়ের কাজ অফলোড করতে সহায়তা করে এবং বেশিরভাগ প্রযুক্তি দলের জন্য দ্রুত একটি জিনিস হয়ে উঠছে। AWS Lambda হল এক ধরনের সার্ভারহীন প্রযুক্তি যা অনেক প্রযুক্তি দল ব্যবহার করে। AWS Lambda নোডজেএস, জাভা, পাইথন এবং রুবি সহ বেশিরভাগ মূল প্রোগ্রামিং ভাষা সমর্থন করে। যদিও মূল প্রোগ্রামিং ভাষা সমর্থিত, এমন সময় হতে পারে যখন আপনি সার্ভারহীন ফাংশনগুলি চালাতে চান এমন বৈশিষ্ট্যগুলির উপর নির্ভর করে যা এই ভাষাগুলির সাথে নির্মিত কাঠামোর অংশ। এই পোস্টে, আমরা কীভাবে AWS Lambda-এ একটি Rails অ্যাপ্লিকেশন চালাতে হয় তা অন্বেষণ করব। এই পোস্টটি অনুমান করে যে আপনি সার্ভারহীন কম্পিউটিং এবং AWS Lambda এর সাথে পরিচিত এবং আপনি কিভাবে AWS Lambda-এ Rails চালাবেন তা বের করতে চান। Lamby নামক একটি টুল AWS Lambda-এ চলমান রেলগুলিকে প্রায় অনায়াসে করে তোলে এবং আমরা কভার করব কিভাবে Lamby Lambda-এ রেলগুলি তৈরি এবং স্থাপন করতে ব্যবহার করা যেতে পারে৷ আমি এটাকে "Rails on Lambda" বলব।
ল্যাম্বি কি?
ল্যাম্বডা আপনাকে আপনার কোড স্থাপন করতে দেয় এবং আপনার সার্ভারগুলি বজায় না রেখেই যে কোনও স্কেলে এটি চালাতে দেয়। আপনি কেবল আপনার কোড AWS এ আপলোড করুন। এটি চালানো হবে যখনই এটি একটি ইভেন্ট দ্বারা ট্রিগার হবে, যেমন একজন ব্যবহারকারী একটি ওয়েব পৃষ্ঠার জন্য একটি কাজের সারিবদ্ধ হওয়ার অনুরোধ করছেন৷
Lambda আশা করে যে আপনার কোড একটি নির্দিষ্ট উপায়ে গঠন করা হবে। অতএব, আপনি যদি এটিকে একটি Rails অ্যাপের মতো কিছু হোস্ট করতে ব্যবহার করতে চান তবে আপনাকে ল্যাম্বির মতো একটি অ্যাডাপ্টার ব্যবহার করতে হবে।
ল্যাম্বি একটি সাধারণ র্যাক অ্যাডাপ্টার। এটি আপনার Rails অ্যাপ এবং AWS Lambda এর মধ্যে বসে এবং বিভিন্ন AWS উত্স থেকে Lambda আমন্ত্রণ ইভেন্টগুলিকে রূপান্তর করে, যেমন একটি API গেটওয়ে বা অ্যাপ্লিকেশন লোড ব্যালেন্সার, র্যাক ইভেন্টগুলিতে যা আপনার Rails অ্যাপ শুনতে পারে৷
Rails Lambda আর্কিটেকচার উৎস:Lamby Docs
ল্যাম্বি ল্যাম্বডাতে একটি রেল অ্যাপ তৈরি, প্যাকেজ এবং স্থাপন করতে ডকার এবং AWS SAM ব্যবহার করে।
AWS সার্ভারলেস অ্যাপ্লিকেশন মডেল (AWS SAM) হল একটি ওপেন-সোর্স ফ্রেমওয়ার্ক যা আপনি AWS-এ সার্ভারবিহীন অ্যাপ্লিকেশন তৈরি করতে ব্যবহার করতে পারেন৷ একটি সার্ভারবিহীন অ্যাপ্লিকেশন হল Lambda ফাংশন, ইভেন্ট উত্স এবং অন্যান্য সংস্থানগুলির সমন্বয় যা কাজগুলি সম্পাদন করতে একসাথে কাজ করে৷ মনে রাখবেন যে একটি সার্ভারবিহীন অ্যাপ্লিকেশন শুধুমাত্র একটি Lambda ফাংশন থেকে বেশি কিছু - এতে অতিরিক্ত সংস্থান অন্তর্ভুক্ত থাকতে পারে, যেমন API, ডেটাবেস এবং ইভেন্ট সোর্স ম্যাপিং।-- AWS SAM ডকুমেন্টেশন
ল্যাম্বির সাথে শুরু করার জন্য, আমাদের ডকার ইনস্টল করতে হবে, একটি AWS অ্যাকাউন্ট তৈরি করতে হবে এবং আপনার AWS অ্যাকাউন্টে প্রোগ্রাম্যাটিক অ্যাক্সেস কনফিগার করতে হবে।
ডকার ইনস্টল করা হচ্ছে
AWS SAM Lambda রানটাইম পরিবেশ অনুকরণ করতে ডকার ব্যবহার করে। ডকার AWS CLI এবং SAM CLI ইনস্টল করার জটিলতাও কমিয়ে দেয়, যা উভয়ই পাইথনের উপর নির্ভরশীল। আপনি যদি ইতিমধ্যে ডকার ইনস্টল না করে থাকেন তবে ডকার ইনস্টল করা খুব সহজ, কারণ আপনি অফিসিয়াল ওয়েবসাইট থেকে এটি ডাউনলোড এবং ইনস্টল করতে পারেন। ডকার ইনস্টল করা হয়েছে কিনা তা পরীক্ষা করতে, আপনার টার্মিনালে নীচের কমান্ডটি চালান। যদি ডকার ইনস্টল করা থাকে, আপনি একটি সংস্করণ নম্বর দেখতে পাবেন এবং নীচে দেখানো একটির অনুরূপ তৈরি করবেন:
$ docker --version
ডকার ইনস্টলেশন নিশ্চিতকরণ
একটি AWS অ্যাকাউন্ট সেট আপ করা
আপনার যদি ইতিমধ্যে একটি AWS অ্যাকাউন্ট না থাকে, তাহলে আপনাকে একটি সেট আপ করতে হবে। Amazon-এর একটি মুক্ত-স্তরের পরিকল্পনা রয়েছে, যা Lambda-এ Rails অ্যাপ তৈরি এবং পরীক্ষা করার পাশাপাশি একটি AWS অ্যাকাউন্ট কীভাবে তৈরি এবং সক্রিয় করতে হয় তার একটি নির্দেশিকা কভার করবে। আপনার অ্যাকাউন্ট সেট আপ করতে গাইড অনুসরণ করুন৷
৷AWS প্রোগ্রাম্যাটিক অ্যাক্সেস সেট করা
এখন আপনার একটি AWS অ্যাকাউন্ট আছে, আপনাকে আপনার অ্যাকাউন্টের AWS অ্যাক্সেস কী আইডি এবং AWS সিক্রেট অ্যাক্সেস কী ব্যবহার করে প্রোগ্রাম্যাটিক অ্যাক্সেস কনফিগার করতে হবে। যদি আপনার কাছে এগুলি ইতিমধ্যে না থাকে তবে আপনি নিম্নলিখিতগুলি করে সেগুলি তৈরি করতে পারেন৷
৷- আপনার AWS অ্যাকাউন্টে লগইন করুন।
- আপনার AWS ম্যানেজমেন্ট কনসোলে, টুলবারে "পরিষেবা" এ ক্লিক করুন।
- অনুসন্ধান করুন এবং "IAM" নির্বাচন করুন।
- বাম দিকের নেভিগেশন থেকে "ব্যবহারকারী" এ ক্লিক করুন।
- যদি "IAM" আগে থেকেই থাকে, তাহলে আপনার ব্যবহারকারীর নাম নির্বাচন করুন।
- "নিরাপত্তা শংসাপত্র" ট্যাবে ক্লিক করুন৷ ৷
- "এক্সেস কী তৈরি করুন" বোতামে ক্লিক করুন।
- কোন নিরাপদ স্থানে আপনার কী আইডি এবং গোপনীয়তা কপি করুন।
- যদি কোনো "IAM" ব্যবহারকারী না থাকে,
- "ব্যবহারকারী যোগ করুন"-এ ক্লিক করুন।
- একটি ব্যবহারকারীর নাম যোগ করুন এবং "প্রোগ্রাম্যাটিক অ্যাক্সেস" বিকল্পটি নির্বাচন করুন৷ ৷
- প্রক্রিয়াটি সম্পূর্ণ করতে প্রম্পটগুলি অনুসরণ করুন৷ ৷
CLI প্রোগ্রাম্যাটিক অ্যাক্সেস কনফিগার করতে ডকার ব্যবহার করা যাক। নিচের কোডটি আপনার টার্মিনালে কপি করুন। আপনাকে একটি AWS অ্যাক্সেস কী আইডি এবং AWS গোপন অ্যাক্সেস কীর জন্য অনুরোধ করা হবে; পূর্ববর্তী ধাপ থেকে কীগুলি প্রবেশ করান৷
৷$ docker run \
--interactive \
--tty \
--rm \
--volume "${HOME}/.aws:/root/.aws" \
"amazon/aws-cli" \
configure
একটি নতুন রেল অ্যাপ্লিকেশন তৈরি করা
আমরা আমাদের রেল প্রকল্প বুটস্ট্র্যাপ করতে SAM CLI ব্যবহার করব। AWS SAM CLI আপনাকে GitHub রিপোজিটরি টেমপ্লেট থেকে একটি নতুন প্রজেক্ট শুরু করতে দেয়, যাকে সাধারণত কুকিকাটার বলা হয়। একটি নতুন SAM প্রকল্প শুরু করতে, আমরা sam init
চালানোর জন্য একটি ডকার কন্টেইনার ব্যবহার করব , যা আপনার জন্য একটি নতুন প্রোজেক্ট ফোল্ডার কিকস্টার্ট করতে Lamby Cookiecutter প্রজেক্ট টেমপ্লেট ব্যবহার করে। আপনাকে একটি প্রকল্পের নাম দেওয়ার জন্য অনুরোধ করা হবে, কিন্তু আমি "rails_on_lambda" ব্যবহার করেছি।
$ docker run \
--rm \
--interactive \
--volume "${PWD}:/var/task:delegated" \
lambci/lambda:build-ruby2.7 \
sam init --location "gh:customink/lamby-cookiecutter"
আপনার নতুন SAM প্রোজেক্ট ফোল্ডারে আপনার নতুন Rails on Lambda প্রজেক্টের জন্য আপনার প্রয়োজনীয় সবকিছু রয়েছে। উচ্চ স্তর থেকে, আপনার নতুন প্রকল্পে যা তৈরি হয়েছে তা এখানে।
- ডকারফাইল এবং ডকার-কম্পোজ উভয় ব্যবহার করে ডকার সেটআপ।
- একটি লিব ডিরেক্টরি, বান্ডলার এবং পরীক্ষা সহ একটি কার্যকরী রুবি প্রকল্প৷
- একটি SAM
template.yaml
ফাইল।
সেট আপ এবং স্থাপন করুন
৷
এখন যেহেতু আমরা একটি নতুন রেল অ্যাপ তৈরি করেছি, আমাদের এটি ল্যাম্বদা স্থাপনার জন্য সেট আপ করতে হবে। নিচের দুটি কমান্ড স্ক্রিপ্ট চালায় যা একটি ডকার ডেভেলপমেন্ট ইমেজ তৈরি করে এবং রত্ন বান্ডিল করে। bootstrap
কমান্ড একটি এককালীন প্রক্রিয়া, যেখানে setup
প্রতিবার যখন আপনি একটি নতুন প্রকল্প নির্ভরতা যোগ করবেন তখন কমান্ড চালানো হবে৷
$ ./bin/bootstrap
$ ./bin/setup
পূর্ববর্তী কমান্ডগুলি সফলভাবে কার্যকর করার পরে, আপনার প্রকল্প SAM এর মাধ্যমে স্থাপনার জন্য প্রস্তুত। স্থাপনা একটি Lamby স্ক্রিপ্ট ব্যবহার করে করা হয় যা আপনার Rails অ্যাপ্লিকেশন তৈরি, প্যাকেজ এবং স্থাপন করে৷
./bin/deploy
deploy
কমান্ড একটি ল্যাম্বি বিল্ড স্ক্রিপ্ট চালায় যা আপনার বর্তমান প্রকল্প ডিরেক্টরিকে একটি স্থানীয় .lamby
-এ নকল করে ডিরেক্টরি এবং আপনার অ্যাপ্লিকেশন স্থাপনের জন্য প্রয়োজনীয় তিনটি SAM কমান্ড চালায়।
- স্যাম বিল্ড
- স্যাম প্যাকেজ
- স্যাম মোতায়েন
যদি স্ক্রিপ্টগুলি প্রত্যাশিত হিসাবে চালানো হয়, তাহলে আপনি SAM এর ক্লাউডফরমেশন স্থাপনার কাজগুলির জন্য আউটপুট দেখতে পাবেন যা এইরকম কিছু দিয়ে শেষ হবে:
আপনি টার্মিনাল আউটপুট অংশ হিসাবে একটি URL দেখতে হবে. URL হল একটি API গেটওয়ে HTTP API এন্ডপয়েন্ট যা র্যাক ব্যবহার করে আপনার রেল অ্যাপ্লিকেশনকে আহ্বান করে। আপনার ব্রাউজারে এটি খুলুন, এবং আপনি পরিচিত "রেইলসকে স্বাগতম" স্ক্রীন দেখতে পাবেন:
AWS কনসোল থেকে আপনার রেল অ্যাপের জন্য আহ্বান করা হচ্ছে
আমরা Lambda ড্যাশবোর্ড থেকে আমাদের অ্যাপ পরীক্ষা করতে পারি। AWS ম্যানেজমেন্ট কনসোলে লগ ইন করুন:
- টুলবারে "পরিষেবা" এ ক্লিক করুন।
- ফাইন্ড সার্ভিস ফিল্ডে "Lambda" লিখুন, নির্বাচন করুন।
এই পৃষ্ঠা থেকে, আপনি আপনার নতুন স্থাপন করা "RailsOnLambda" প্রকল্প দেখতে পাবেন৷
- "RailsOnLambda" ফাংশন খুলুন।
- উপরের ডানদিকে "পরীক্ষা" বোতামে ক্লিক করুন।
- "Amazon API Gateway Proxy" ইভেন্ট টেমপ্লেট ব্যবহার করুন (সংশ্লিষ্ট ক্ষেত্র আপডেট করতে নিচের JSON টেমপ্লেটটি ব্যবহার করুন)।
- এর নাম দিন "RailsOnLambdaTest"।
- "তৈরি করুন" বোতামে ক্লিক করুন।
- আপনার ল্যাম্বডা চালু করতে "পরীক্ষা" বোতামে ক্লিক করুন।
{
"body": "",
"path": "/",
"httpMethod": "GET",
"queryStringParameters": {},
"multiValueQueryStringParameters": {},
"pathParameters": {
"proxy": "/"
},
"stageVariables": {},
"requestContext": {
"path": "/",
"httpMethod": "GET"
}
}
ধরে নিচ্ছি যে সবকিছু মসৃণভাবে হয়েছে, আপনার আউটপুট নীচের মত দেখতে হবে।
অভিনন্দন! আপনার কাছে এখন ল্যাম্বডাতে রেল রয়েছে, যদিও ল্যাম্বডাতে একটি রেল অ্যাপ্লিকেশন এখনও একটি সাধারণ রেল অ্যাপ্লিকেশন। একমাত্র পার্থক্য হল Lamby রত্ন API Gateway HTTP API, API Gateway REST API, এবং অ্যাপ্লিকেশন লোড ব্যালেন্সার টার্গেট ইভেন্টকে র্যাক-সামঞ্জস্যপূর্ণ env
-এ রূপান্তরিত করে। বস্তু এবং তাদের রেল পাঠায়. রেল তারপর ইভেন্টের ফলাফল আপনার প্রজেক্টে সংজ্ঞায়িত ল্যাম্বডা হ্যান্ডলারের কাছে ফেরত দেয়।
def handler(event:, context:)
Lamby.handler $app, event, context
end
ল্যাম্বডায় রেলগুলি কতটা ভাল পারফর্ম করে?
Lambda উপর রেল স্থাপনের পরে প্রথম অনুরোধের জন্য একটি ধীর প্রতিক্রিয়া সময় অনুভব করবে। এই ঘটনাটিকে "কোল্ড স্টার্ট" বলা হয়। যাইহোক, প্রথম অনুরোধের পরে, পারফরম্যান্স চমৎকার এবং EC2 এর সাথে দেখা করতে বা হারাতে পারে। যদি প্রথম অনুরোধের পরে পরবর্তী কোনো অনুরোধ না থাকে, তাহলে Rails অ্যাপের সার্ভারের সংস্থানগুলি গতিশীলভাবে অন্যান্য Lambda ফাংশনে 5-7 মিনিট পরে বরাদ্দ করা হবে। এটি নতুন অনুরোধের জন্য একটি ঠান্ডা শুরু হবে। কোল্ড স্টার্ট এড়াতে এবং রেল অ্যাপটিকে উষ্ণ রাখার কয়েকটি উপায় রয়েছে।
ক্লাউডওয়াচ টাইমার
৷আপনি এটিকে উষ্ণ রাখতে প্রতি মিনিটে ল্যাম্বডা ফাংশনে আপনার রেলগুলিকে পিং করার জন্য একটি সময় সেট আপ করতে পারেন। AWS কনসোল খুলুন এবং CloudWatch অনুসন্ধান করুন। সেখান থেকে ইভেন্টে যান এবং নিয়ম তৈরি করুন এ ক্লিক করুন। ইভেন্টের ধরনটি সময়সূচীতে সেট করুন এবং আমরা প্রতি 1 মিনিটে এই ইভেন্টটি চালাব।
প্রোভিশনেড কনকারেন্সি
প্রভিশনড কনকারেন্সি হল একটি AWS বৈশিষ্ট্য যা আপনাকে টগল করতে এবং AWS একটি অব্যবহৃত কন্টেইনারকে সর্বদা চালু রাখার জন্য আরও অর্থ প্রদান করতে সম্মত করতে দেয়। Rails অ্যাপের জন্য নির্ধারিত মুদ্রা কনফিগার করতে, আপনার AWS কনসোল খুলুন এবং Lambda পরিষেবা পৃষ্ঠা খুলুন।
- একটি ফাংশন বেছে নিন (rails-on-lambda)।
- কনফিগারেশন নির্বাচন করুন এবং তারপরে একযোগে নির্বাচন করুন।
- প্রভিশনেড কনকারেন্সি কনফিগারেশনের অধীনে, অ্যাড কনফিগারেশনে ক্লিক করুন।
- উনাম বা সংস্করণ নির্বাচন করুন।
- বরাদ্দ করার জন্য প্রভিশন করা কনকারেন্সির পরিমাণ লিখুন (যেমন, 500)।
- আপনার পরিবর্তনগুলি সংরক্ষণ করুন৷ নিম্নোক্ত কমান্ডটি ব্যবহার করে AWS CLI-এর মাধ্যমেও প্রভিশন করা মুদ্রা কনফিগার করা যেতে পারে:
aws lambda put-provisioned-concurrency-config --function-name my-function \
--qualifier BLUE --provisioned-concurrent-executions 100
AWS-এ Lambda-এর খরচ কত?
AWS Lambda এর সাথে, আপনি যা ব্যবহার করেন তার জন্য আপনি শুধুমাত্র অর্থ প্রদান করেন। খরচ হল অনুরোধের সংখ্যা এবং কোড এক্সিকিউশনের সময়কালের সংমিশ্রণ। সময়কাল মূল্য আপনার ফাংশন বরাদ্দ মেমরি পরিমাণ উপর নির্ভর করে. মেমরির আকার 128 MB থেকে 10,240 MB পর্যন্ত, এবং আপনি আপনার প্রয়োজনের উপর নির্ভর করে আপনার ফাংশনে যেকোন পরিমাণ মেমরি বরাদ্দ করতে পারেন। নীচে একটি চার্ট রয়েছে যা বিভিন্ন সময়ে একটি Lambda ফাংশনের 100,000 আহ্বান চালানোর খরচ দেখায়৷
Lambda খরচ
যখন আপনার ল্যাম্বডায় রেল চালানো উচিত নয়
আমরা দেখেছি যে আমরা AWS Lambda তে একটি Rails অ্যাপ চালাতে পারি, কিন্তু প্রতিটি Rails অ্যাপ্লিকেশন কি Lambda তে চালানো উচিত? রেল অনুমান করে যে আপনার অ্যাপ্লিকেশনটি একটি প্রথাগত সার্ভারে চলছে এবং সার্ভারহীন নয়। প্রথাগত রেল সার্ভার অ্যাপে সহজে কাজ করে এমন কিছু ক্রিয়াকলাপ সার্ভারবিহীন কাজ নাও করতে পারে। উদাহরণস্বরূপ, ফাইল বা ছবি আপলোডগুলি Lambda অ্যাপে একটি রেলে কাজ করবে না কারণ অ্যাপটির একটি স্থায়ী ফাইল সিস্টেমে অ্যাক্সেস নেই। এছাড়াও, WebSocket যোগাযোগ Lambda-তে কাজ করবে না কারণ কোনো অনুরোধ না থাকলে আপনার সার্ভার বিদ্যমান থাকে না।
উপসংহার
আমরা শুধুমাত্র দেখিয়েছি কিভাবে একটি মৌলিক রেল অ্যাপ্লিকেশন স্থাপন করতে হয়, কিন্তু একই প্রক্রিয়া বড় অ্যাপ্লিকেশনের জন্য অনুসরণ করা হয়। কন্ট্রোলার এবং রুট যোগ করুন এবং কনসোল থেকে বা পোস্টম্যান এবং অন্য যেকোন HTTP ক্লায়েন্টের মাধ্যমে পরীক্ষা করুন৷