এডাব্লুএস ল্যাম্বডায় এনপিএম মডিউলগুলি কীভাবে লোড করবেন?


147

আমি ওয়েব ভিত্তিক সম্পাদক ব্যবহার করে বেশ কয়েকটি ল্যাম্বদা ফাংশন তৈরি করেছি। এ পর্যন্ত সব ঠিকই. আমি এখন মডিউলগুলির সাথে প্রসারিত করা শুরু করতে চাই (যেমন প্রতিশ্রুতির জন্য কিউ)। ল্যাম্বডায় মডিউলগুলি কীভাবে পাবেন তা আমি বুঝতে পারি না যাতে সেগুলি আমার ক্রিয়াকলাপ দ্বারা গ্রাস করা যায়।

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

আমার ল্যাম্বদা ফাংশনগুলিতে ব্যবহারের জন্য কীভাবে আমি কিছু মডিউল সহজেই স্থাপন করতে পারি?


উত্তর:


196

আপনি কোনও .zipফাইল আপলোড না করে এনপিএম মডিউলগুলি লোড করতে পারবেন না তবে আপনি দুটি দ্রুত কমান্ড লাইনে এই প্রক্রিয়াটি পেতে পারেন।

এখানে কীভাবে:

  1. আপনার লাম্বদা ফাংশন ফাইল (গুলি) একটি পৃথক ডিরেক্টরিতে রাখুন। এর কারণ এটি আপনি npmল্যাম্বদার জন্য স্থানীয়ভাবে প্যাকেজগুলি ইনস্টল করেন এবং আপনি লাম্বডায় কী আপলোড করবেন তা বিচ্ছিন্ন করে পরীক্ষা করতে সক্ষম হতে চান।

  2. npm install packageNameআপনি পদক্ষেপ # 1-এ তৈরি আপনার পৃথক লাম্বদা ডিরেক্টরিতে থাকাকালীন আপনার এনপিএম প্যাকেজগুলি স্থানীয়ভাবে ইনস্টল করুন ।

  3. স্থানীয়ভাবে চলার সময় আপনার ফাংশনটি কাজ করে তা নিশ্চিত করুন: node lambdaFunc.js( export.handlerস্থানীয়ভাবে নোডের সাথে চালানোর জন্য আপনার কোডটি অভিযোজিত করতে আপনি কেবল আপনার কোডের দুটি লাইনই মন্তব্য করতে পারেন )।

  4. লাম্বদার ডিরেক্টরিতে যান এবং বিষয়বস্তুগুলি সংকুচিত করুন , ডিরেক্টরিটি নিজেই অন্তর্ভুক্ত না করার বিষয়টি নিশ্চিত করুন ।

    zip -r lambdaFunc.zip .
    
  5. আপনি যদি আপনার aws-cliইনস্টলড থাকে, যা আপনার জীবনকে আরও সহজ করতে চাইলে রাখার পরামর্শ দিই, আপনি এখন এই আদেশটি প্রবেশ করতে পারেন:

    aws lambda update-function-code --function-name lambdaFunc \
    --zip-file fileb://~/path/to/your/lambdaFunc.zip
    

    (ল্যাম্বডা ফাঙ্ক অংশের উপরের কোনও উদ্ধৃতি নেই যদি আপনি যেমন করেন তেমন ভাবছেন তবে)

  6. এখন আপনি ল্যাম্বদা কনসোলে পরীক্ষা ক্লিক করতে পারেন ।

  7. আমি উপরের দুটি কমান্ডের জন্য একটি সংক্ষিপ্ত নাম যুক্ত করার পরামর্শ দিই। লম্বা আপডেট কমান্ডটির জন্য আমার কাছে যা আছে তা এখানে:

    alias up="aws lambda update-function-code --function-name lambdaFunc \
    --zip-file fileb://~/path/to/your/lambdaFunc.zip"
    

10
আপনি যে অঞ্চলটিকে টার্গেট করছেন তা আপনাকে স্পষ্ট করে বলতে হবে: aws lambda update-function-code --function-name lambdaFunc --region eu-west-1 --zip-file fileb://~/path/to/your/lambdaFunc.zip
গ্রিনস্টার রক্স

2
যদিও এটি আরও অনেক কাজের মতো মনে হচ্ছে, এটি পেরিয়ে যাওয়ার জন্য, এই ল্যাম্বডা এক্সপ্রেশনগুলি তৈরি করার পক্ষে এটি আরও অনেক ভাল উপায় ... অনেক অনেক ধন্যবাদ!
মাইক পেরেনউড

9
এই পদক্ষেপগুলি ব্যবহার করার সময় আমাকে --zip-file fileb://বনাম --zip-file file://ব্যবহার করতে হয়েছিল
ম্যাকলোভিন

2
নিশ্চিত করুন যে আপনি কেবল ডিরেক্টরিটির বিষয়বস্তুগুলি জিপ করেছেন এবং আপনি এটি সিএলআই থেকে করেছেন (ম্যাকের অনুসন্ধানকারীর 'কমপ্রেস' কমান্ডটি ব্যবহার করে কাজ করবে না )।
ইয়ারিন

2
এটি অত্যন্ত কার্যকর ছিল .. আমার পক্ষে এই কাজটি করার জন্য কমপক্ষে দুটি জিনিস অনুপস্থিত ছিল ... 1) এটি আমার --zip-file fileb:পরিবর্তে ছিল file। 2) ম্যাকোজে এটি 3 টি স্ল্যাশ সহ যেমন মনে হচ্ছেfileb:///Users/wio/Documents
টবি

30

লাম্বডায় এনপিএম মডিউলগুলি .zipঅন্তর্ভুক্ত করার জন্য একটি ফাইল প্রয়োজন । এবং আপনার সত্যিই ল্যাম্বডা ওয়েব সম্পাদককে কোনও কিছুর জন্য ব্যবহার করা উচিত নয় - যেমন কোনও উত্পাদন কোডের মতো আপনার স্থানীয়ভাবে বিকাশ ঘটানো উচিত, গিটকে প্রতিশ্রুতিবদ্ধ করা ইত্যাদি should

আমার ফ্লাই:

1) আমার লাম্বদা ফাংশনগুলি সাধারণত কোনও বৃহত প্রকল্পের জন্য সহায়ক উপযোগী হয়, তাই আমি তাদের বাড়ির জন্য একটি / আওস / ল্যাম্বডাস ডিরেক্টরি তৈরি করি।

2) প্রতিটি স্বতন্ত্র ল্যাম্বদা ডিরেক্টরিতে ফাংশন কোড, একটি প্যাকেজ.জসন ফাইল নির্ভরতা নির্ভর করে এবং একটি / নোড_মডিউলগুলি উপ- ডিরেক্টরি অন্তর্ভুক্ত করে একটি index.js ফাইল থাকে । (প্যাকেজ.জেসন ফাইলটি ল্যাম্বদা ব্যবহার করে না, এটি কেবলমাত্র আমরা স্থানীয়ভাবে npm installকমান্ডটি চালাতে পারি ))

package.json:

{
  "name": "my_lambda",
  "dependencies": {
    "svg2png": "^4.1.1"
  }
}

3) আমি সমস্ত নোড_মডিউল ডিরেক্টরি এবং জিপ ফাইলগুলিকে গিগাইনগোর করি যাতে এনপিএম ইনস্টল এবং জিপিং থেকে উত্পন্ন ফাইলগুলি আমাদের রেপোকে বিশৃঙ্খলা না করে।

.gitignore:

# Ignore node_modules
**/node_modules

# Ignore any zip files
*.zip

4) আমি npm installমডিউল ইনস্টল করার জন্য ডিরেক্টরি থেকে চালানো , এবং স্থানীয়ভাবে ফাংশন বিকাশ / পরীক্ষা।

5) আমি লাম্বদা ডিরেক্টরিটি জিপ করি এবং কনসোলের মাধ্যমে এটি আপলোড করি।

( গুরুত্বপূর্ণ: ফাইলটি জিপ করতে ফাইন্ডারের কাছ থেকে ম্যাকের 'কমপ্রেস' ইউটিলিটিটি ব্যবহার করবেন না! আপনাকে অবশ্যই ডিরেক্টরিটির মূল থেকে সিএলআই থেকে জিপ চালাতে হবে - এখানে দেখুন )

zip -r ../yourfilename.zip * 

বিঃদ্রঃ:

আপনি যদি ম্যাক এ স্থানীয়ভাবে নোড মডিউলগুলি ইনস্টল করেন তবে আপনি সমস্যার মধ্যে পড়তে পারেন, যেমন ল্যাম্বডা-লিনাক্স-ভিত্তিক পরিবেশে স্থাপনের সময় কিছু প্ল্যাটফর্ম-নির্দিষ্ট মডিউল ব্যর্থ হতে পারে। ( Https://stackoverflow.com/a/29994851/165673 দেখুন )

সমাধানটি হ'ল এএমআই থেকে চালু হওয়া ইসি 2 ইনস্ট্যান্সের মডিউলগুলি সংকলন করা যা আপনি ব্যবহার করছেন ল্যাম্বদা নোড.জেএস রানটাইমের সাথে সামঞ্জস্য করে ( ল্যাম্বদা রানটাইম এবং তাদের সম্পর্কিত এএমআইয়ের এই তালিকাটি দেখুন )।


নোড.জেএস-এডাব্লুএস ল্যাম্বদা এডাব্লুএস ল্যাম্বদা ডিপ্লোয়মেন্ট প্যাকেজটিও দেখুন


16

আপনি এখন এই বিষয়গুলির জন্য ল্যাম্বদা স্তরগুলি ব্যবহার করতে পারেন। আপনার প্রয়োজনীয় প্যাকেজটি সম্বলিত একটি স্তর যুক্ত করুন এবং এটি পুরোপুরি চলবে।

এই পোস্টটি অনুসরণ করুন: https://medium.com/@anjanava.biswas/nodejs-runtime-en पर्यावरण-ws-lambda-layers-f3914613e20e


9

আশা করি এটি সার্ভারলেস ফ্রেমওয়ার্কের সাহায্যে আপনি এর মতো কিছু করতে পারেন:

  1. আপনার সার্ভারলেস.আইএমএল ফাইলে এই জিনিসগুলি যুক্ত করুন:

plugins: - serverless-webpack custom: webpackIncludeModules: forceInclude: - <your package name> (for example: node-fetch) 2. তারপরে আপনার ল্যাম্বদা ফাংশনটি তৈরি করুন, এটি দ্বারা স্থাপন করুন serverless deploy, সার্ভারলেস.আইএমএল অন্তর্ভুক্ত থাকা প্যাকেজটি আপনার জন্য থাকবে।

সার্ভারলেস সম্পর্কে আরও তথ্যের জন্য: https://serverless.com/framework/docs/providers/aws/guide/quick-start/


এটি ইনস্টল করার জন্য আপনাকে প্রথমে প্রয়োজনserverless plugin install --name pluginName
লিড লিভনাত

1

এনপিএম মডিউলটি আপনার নোডেজ প্যাকেজের অভ্যন্তরে বান্ডিল করতে হবে এবং এডাব্লুএস ল্যাম্বদা স্তরগুলিকে জিপ হিসাবে আপলোড করতে হবে, তারপরে আপনাকে নীচের মতো আপনার মডিউল / জেএস উল্লেখ করতে হবে এবং সেগুলি থেকে উপলভ্য পদ্ধতিগুলি ব্যবহার করতে হবে। কনস্ট মায়োমডিউল = প্রয়োজনীয় ('/ opt / nodejs / MyLogger');

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.