কীভাবে AWS ল্যাম্বদা এবং এস 3 দিয়ে সার্ভারলেস ইউআরএল সংক্ষিপ্ততর তৈরি করবেন create

এসএপি সিন প্যাক থেকে গ্রাফিক্স ব্যবহার করুন

এই পোস্টে, আমরা অ্যামাজন ওয়েব সার্ভিসেস (এডাব্লুএস) ল্যাম্বদা এবং এস 3 ব্যবহার করে একটি সার্ভারলেস ইউআরএল শর্টনার তৈরি করব। যদিও আপনার এডাব্লুএসের কোনও পূর্বের জ্ঞানের প্রয়োজন নেই, আমি ধরে নিই যে আপনি ES6 জাভাস্ক্রিপ্ট এবং নোড.জে এর সাথে পরিচিত

হাস্যকর বিষয় হল, আমাদের ইউআরএল সংক্ষিপ্তকারী দ্বারা উত্পন্ন URL গুলি পুনঃনির্দেশিত URL গুলির চেয়ে প্রায় দীর্ঘ হয় are এটি কারণ আমরা ডিফল্ট এস 3 বালতি ওয়েবসাইট ঠিকানা ব্যবহার করছি। পোস্টের শেষের দিকে, আমি ব্যাখ্যা করব যে কীভাবে আপনি এই সীমাবদ্ধতাটি পেতে একটি কাস্টম ডোমেন যুক্ত করতে পারেন।

ডেমো দেখুন

গিথুবে কোডটি দেখুন

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

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

আর্কিটেকচার

আমরা বিকাশে ডুব দেওয়ার আগে আসুন প্রথমে আমরা আমাদের ইউআরএল সংক্ষিপ্তকারী তৈরি করতে যেসব ডাব্লুএস পরিষেবাগুলি ব্যবহার করি তা একবার দেখে নেওয়া যাক।

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

আমরা এস 3 এর একটি অল্প-পরিচিত বৈশিষ্ট্যও ব্যবহার করতে যা যা আপনাকে কেবল কোনও ওয়েবসাইটকে অবজেক্টের মেটাডেটাতে পুনঃনির্দেশের অবস্থানের মান যোগ করে এস 3 বাল্টিতে অবজেক্টগুলির জন্য পুনর্নির্দেশ সেট আপ করতে দেয়। এটি একটি URL এ সেট করা HTTP 301 প্রতিক্রিয়া এবং অবস্থান শিরোনামের মাধ্যমে ব্রাউজারগুলিকে পুনর্নির্দেশ করবে।

কোনও এস 3 অবজেক্টের ইউআরএল এস 3 বালতি ঠিকানা এবং অবজেক্টের নাম দিয়ে তৈরি।

http: // [বালতির নাম]। এস 3-ওয়েবসাইট-ইইউ-ওয়েস্ট-1.amazonaws.com / [বস্তুর নাম]

নিম্নলিখিত উদাহরণটি ইউরোপীয়-পশ্চিম -1 অঞ্চলের জন্য একটি এস 3 বালতি বস্তুর বিন্যাস দেখায় shows

http://serverless-url-shortener.s3-website-eu-west-1.amazonaws.com/6GpLcdl

উপরের উদাহরণে URL এর শেষে এই অবজেক্টের নাম "6GpLcdl" আমাদের সংক্ষিপ্ত URL গুলির শর্টকোড হয়ে যায়। এই বৈশিষ্ট্যটির সাহায্যে আমরা স্থানীয় ইউআরএল পুনঃনির্দেশের পাশাপাশি স্টোরেজ সক্ষমতা পাই। কোন স্পিড ডায়াল পয়েন্ট যে ইউআরএল হিসাবে সেই তথ্যটি পরিবর্তে সেই বস্তুটিতে সংরক্ষণ করা হয়েছে তার বিশদ সংরক্ষণ করার জন্য আমাদের কোনও ডাটাবেস দরকার নেই।

আমরা আমাদের এস 3 বালতিতে সংশ্লিষ্ট মেটাডেটা সহ এই এস 3 অবজেক্টগুলি সঞ্চয় করতে একটি ল্যাম্বডা ফাংশন তৈরি করব।

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

প্রস্তুত হও

সার্ভারলেস ফ্রেমওয়ার্ক ডকুমেন্টগুলি দেখুন এবং তাদের দ্রুত শুরু গাইড পড়ুন। ইনস্টলেশন প্রক্রিয়াটির অংশ হিসাবে আপনাকে অবশ্যই AWS CLI ইনস্টল করতে হবে এবং আপনার AWS শংসাপত্রগুলি কনফিগার করতে হবে।

প্রথমে প্রকল্পের মূল ডিরেক্টরিতে একটি প্যাকেজ.জসন ফাইল তৈরি করুন।

name "নাম": "সার্ভারলেস-url-shortener", "স্ক্রিপ্ট": {}, "নির্ভরতা": {}

আমরা জানি আমাদের এডাব্লুএস এসডিকে ব্যবহার করা দরকার। এখন নিম্নলিখিত কমান্ডটি টাইপ করে এটি এনপিএম থেকে ইনস্টল করুন।

এনপিএম অ্যাউস-এসডিকে ইনস্টল করুন - সেভ করুন

এখন প্রকল্পের রুটে একটি কনফিগারেশন জোনস ফাইল তৈরি করুন। এর মাধ্যমে আমরা JSON ফর্ম্যাটে কাস্টমাইজযোগ্য ব্যবহারকারী বিকল্পগুলি সংরক্ষণ করি।

আপনার সেটআপের সাথে মানগুলির সাথে নিম্নলিখিত কীগুলি যুক্ত করুন।

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

আপনার কনফিগারেশন.জসন ফাইলটি সম্পূর্ণ হওয়ার পরে এই জাতীয় কিছু দেখতে হবে।

B "বুকেট": "আপনার বালতির নাম", "অঞ্চল": "ইইউ-ওয়েস্ট -1", "স্টেজ": "দেব",}

এর পরে, সার্ভারলেস.আইএমএল, প্রকল্পের মূলটিতে অন্য একটি ফাইল তৈরি করুন। এতে আমাদের সার্ভারলেস ফ্রেমওয়ার্ক কনফিগারেশনটি YAML মার্কআপ ভাষায় ফর্ম্যাট থাকবে।

এই ফাইলটিতে আমরা প্রথমে আমাদের পরিবেশকে সংজ্ঞায়িত করি। খেয়াল করুন কীভাবে আমরা কনফিগারেশনে পূর্বে সংরক্ষিত ভেরিয়েবলগুলি উল্লেখ করতে পারি।

পরিষেবা: সার্ভারলেস-ইউআরএল-সংক্ষিপ্তকরণ সরবরাহকারী: নাম: আউজ রানটাইম: নোডজএস ..১০ পর্যায়: $ {ফাইল (কনফিগারেশন: জেসন): স্টেজ} অঞ্চল: $ {ফাইল (কনফিগারেশন: জেসন): অঞ্চল} আইআরোল স্টেটমেন্টস: - প্রভাব: কর্মের অনুমতি দিন : - এস 3: পুটবজেক্ট রিসোর্স: "আরএন: আউজ: এস3 ::: $ {ফাইল (কনফিগারেশন: জেসন): বুকেট} / *"

IamRoleStatements বিভাগটি পরিচয় এবং অ্যাক্সেস ম্যানেজমেন্টের সাথে সম্পর্কিত, যা লাম্বদা অনুমতি সেট আপ করতে ব্যবহৃত হয়। এখানে আমরা আমাদের এস 3 বালতিতে ল্যাম্বডাকে লেখার অ্যাক্সেস দিই।

বস্তুগুলি সংরক্ষণ করতে আমাদের ক্রিয়াকলাপ s3: PutObject কার্যকর করার অনুমোদন দরকার। আপনার প্রকল্পের প্রয়োজন হলে এখানে অন্যান্য অনুমতি যুক্ত করা যেতে পারে। অন্যান্য উপলব্ধ ক্রিয়াকলাপের জন্য এস 3 নথিগুলি দেখুন।

রিসোর্সটির মানটি এস 3 বাল্টির অ্যামাজন রিসোর্সের নামে সেট করা হয়েছে, যা কোনও নির্দিষ্ট এডাব্লুএস সংস্থানটি অনন্যভাবে চিহ্নিত করতে ব্যবহৃত হয়। এই সনাক্তকারীটির ফর্ম্যাট রেফারেন্সড এডাব্লুএস পরিষেবাটির উপর নির্ভর করে। তবে, তাদের সাধারণত নিম্নলিখিত ফর্ম্যাট থাকে।

আরএন: বিভাজন: পরিষেবা: অঞ্চল: অ্যাকাউন্ট-আইডি: সংস্থান

সরবরাহকারীর অধীনে আমাদের ফাংশন কনফিগারেশন সংযুক্ত করুন।

ফাংশন: ব্যবসায়: হ্যান্ডলার: এপিআই হ্যান্ডল ইভেন্ট: - HTTP: পাথ: / পদ্ধতি: পোস্ট কর্স: সত্য

এখানে আমরা API কনফিগারেশনটি সংজ্ঞায়িত করেছি এবং আমাদের ল্যাম্বডাকে একটি API এর বেস URL এর অধীনে একটি HTTP পোষ্ট ইভেন্টে নিয়োগ করি। "এপিআইহ্যান্ডল" মান সহ একটি হ্যান্ডলার "হ্যান্ডেল" নামক একটি ফাংশনকে বোঝায় যা "api.js" থেকে রফতানি হয়।

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

এরপরে, আমরা সার্ভারলেস.আইএমএল-তে অ্যাডাব্লুএস সংস্থানগুলি সংজ্ঞায়িত করি যা ক্লাউডফর্মেশন সহ স্থাপনের সময় আমাদের জন্য ইনস্ট্যান্ট করা উচিত। এটি লক্ষণীয় যে আপনার প্রয়োজনীয়ভাবে এইভাবে সংস্থান স্থাপন করতে হবে না, আপনি এডাব্লুএস ম্যানেজমেন্ট কনসোলগুলি তৈরি করতে ব্যবহার করতে পারেন। সঠিক অ্যাক্সেসের অনুমতি নিয়ে, কীভাবে সংস্থান তৈরি হয় তা বিবেচ্য নয়। যাইহোক, আপনি সার্ভারলেস.আইএমএল-এ প্রয়োজনীয় পরিষেবাগুলি সংজ্ঞায়িত করার সময় আপনি আপনার "কোড হিসাবে পরিকাঠামো" সংজ্ঞায়িত করেন এবং প্রক্রিয়াটিতে বেশ কয়েকটি সুবিধা পান।

“কোড হিসাবে ইনফ্রাস্ট্রাকচার হ'ল সোর্স কোডের মাধ্যমে কম্পিউটার এবং নেটওয়ার্ক অবকাঠামো সংজ্ঞায়িত করার পদ্ধতি, যা পরে কোনও সফ্টওয়্যার সিস্টেমের মতো বিবেচনা করা যেতে পারে। এই জাতীয় কোডটি নিরীক্ষণযোগ্যতা এবং পুনরুত্পাদনযোগ্য বিল্ডগুলির জন্য উত্স নিয়ন্ত্রণে রাখা যেতে পারে, তবে শর্ত থাকে যে এটি পরীক্ষার অনুশীলনের এবং কন্টিনিউসডেলিভারির সম্পূর্ণ শৃঙ্খলার সাপেক্ষে। "
- মার্টিন ফাউলার

এগিয়ে যান এবং সংস্থান কনফিগারেশন যোগ করুন।

সংস্থানসমূহ: সংস্থানসমূহ: সার্ভারলেসআরডাইরেক্টএস 3 বালতি: প্রকার: AWS :: S3 :: বালতির বৈশিষ্ট্য: বালতি নাম: {{ফাইল (কনফিগারেশন: জেসন): বুকেট} অ্যাক্সেস কন্ট্রোল: পাবলিক রিড ওয়েবসাইট কনফিগারেশন: সূচিপত্র: সূচী। Html সার্ভারলেসডাইরেক্টস3 বাল্কিট: নিম্নলিখিত প্রবেশ করান :: এস 3 :: বালতিপলিসি বৈশিষ্ট্য: বালতি: $ {ফাইল (কনফিগারেশন: জসন): বুকেট} নীতি নথি: বিবৃতি: - ক্রিয়া: - এস 3: গেটবজেক্টের প্রভাব: রিসোর্সকে অনুমতি দিন: - আরএন: আওস: এস :: ::: {ফাইল ( config.json): বুকেট} / * প্রধান শিক্ষক: "*"

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

বিল্ড এপিআই

আমাদের ল্যাম্বদা ফাংশন চারটি জিনিস করে।

  1. ব্যবহারকারীর ফর্মটি থেকে সংক্ষিপ্ত করতে URL পান।
  2. URL এর জন্য একটি অনন্য শর্টকোড তৈরি করুন।
  3. S3 এ সম্পর্কিত ডিটোর অবজেক্টটি সংরক্ষণ করুন।
  4. ক্লায়েন্টের কাছে বস্তুর পথ ফিরিয়ে দিন।

হ্যান্ডলারটি তৈরি করুন

Api.js নামে একটি নতুন ফাইল তৈরি করুন এবং হ্যান্ডেল নামে একটি তীর ফাংশন রফতানি করুন যা তিনটি আর্গুমেন্ট গ্রহণ করে: ইভেন্ট, প্রসঙ্গ এবং কলব্যাক। হ্যান্ডলারটি ডেকে এগুলি এডাব্লুএস দ্বারা সরবরাহ করা হয়। এই ফাইলটি একটি নোড.জেএস স্ক্রিপ্ট। তীর ফাংশনটি রফতানি করতে আপনার এটিকে মডিউল.এক্সপোর্টগুলিতে যুক্ত করতে হবে।

মডিউল.এক্সপোর্টস.হ্যান্ডল = (ইভেন্ট, প্রসঙ্গ, কলব্যাক) => {
}

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

স্থির প্রতিক্রিয়া = {স্থিতি কোড: 201, বডি: JSON.stringify ({"শর্টআর্ল": "http://example.com"})}
কলব্যাক (শূন্য, উত্তর)

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

অনুরোধটি বিশ্লেষণ করুন

নিম্নলিখিতটি কোনও এআইপি গেটওয়ে ইভেন্টের একটি উদাহরণ যা কোনও ব্যবহারকারী কোনও ফর্ম জমা দেওয়ার পরে আমাদের হ্যান্ডলারের কাছে প্রেরণ করা হয়। যেহেতু আমরা ওয়ান-ওয়ে অ্যাপ্লিকেশন হিসাবে আমাদের ইউআরএল শর্টনার তৈরি করছি, তাই আমরা জাভাস্ক্রিপ্ট ব্যবহার করে ফর্মটি জমা দেব। অতএব, সামগ্রীর প্রকারটি হ'ল অ্যাপ্লিকেশন / জসন এবং অ্যাপ্লিকেশন নয় / এক্স-www-ফর্ম-urlencoded।

Ource রিসোর্স: '/', পাথ: '/', httpMethod: 'পোস্ট', শিরোনাম: {স্বীকার: '* / *', 'স্বীকৃতি-এনকোডিং': 'জিজিপ, ডিফল্ট', 'ক্যাশে-নিয়ন্ত্রণ': 'না -ক্যাচে ',' ক্লাউডফ্রন্ট-ফরওয়ার্ড-প্রোটো ':' https ',' ক্লাউডফ্রন্ট-ই-ডেস্কটপ-ভিউয়ার ':' সত্য ',' ক্লাউডফ্রন্ট-ইজ-মোবাইল-ভিউয়ার ':' মিথ্যা ',' ক্লাউডফ্রন্ট-ইজ-স্মার্টটি -ভিউয়ার ':' মিথ্যা ',' ক্লাউডফ্রন্ট-ইজ-ট্যাবলেট-দর্শক ':' মিথ্যা ',' ক্লাউডফ্রন্ট-ভিউয়ার-ল্যান্ড ':' জিবি ',' সামগ্রী-ধরণের ':' অ্যাপ্লিকেশন / জেসন ', হোস্ট:' ' , 'ব্যবহারকারী-এজেন্ট': '', 'এক্স-আমজ-সিএফ-আইডি': '', 'এক্স-আমজান-ট্রেস-আইডি': '', 'এক্স-ফরওয়ার্ড-ফর': '', 'এক্স- ফরওয়ার্ডড-পোর্ট ':' 443 ',' এক্স-ফরওয়ার্ড-প্রোটো ':' https '}, ক্যোয়ারী স্ট্রিংপ্যারামিটারগুলি: নাল, পাথপ্যারামিটার: {}, স্টেজভেরিয়েবলস: নাল, অনুরোধকন্টেক্সট: {পথ:' / দেব ', অ্যাকাউন্টআইড:' ', রিসোর্সআইডি: '', স্টেজ: 'দেব', রিকোয়েস্ট আইডি: '', পরিচয়: ogn কগনিটো আইডেন্টিটিপুল আইডি: নাল, অ্যাকাউন্টআইডি: নাল, কগনিটোআইডেন্টিআইডি: নাল, কলার: নাল, এপিআই কী: '', সোর্স আইপি: '', অ্যাক্সেসকি: নাল, কগনিটো অ্যান্টিথিকেশন টাইপ: নাল, কগনিটো অটেনটিকেশনপ্রাইডার: নাল, ইউজারআরন: নাল, ইউজার এজেন্ট: '', ইউজার: নাল}, রিসোর্সপথ: '/', httpMethod: 'POST', apiId: ''}, বডি: 'ur "url": "http://example.com"}', isBase64 এনকোডড: মিথ্যা}

আমরা যখন অনুরোধটি দেখি তখন ইভেন্টটি থেকে আমরা যে ফর্মটি পেয়েছি তা আমাদের কেবল প্রয়োজন। অনুরোধ পাঠ্যটি স্ট্রিংফাইড জাভাস্ক্রিপ্ট অবজেক্ট হিসাবে সংরক্ষণ করা হয়েছে যা আমরা JSON.parse () এর সাথে আমাদের হ্যান্ডলারে কল করতে পারি। জাভাস্ক্রিপ্ট শর্ট সার্কিট মূল্যায়ন ব্যবহার করে আমরা ফর্ম জমা দেওয়ার অংশ হিসাবে কোনও URL টি জমা দেওয়া হয়নি এমন ক্ষেত্রে খালি স্ট্রিংয়ের জন্য একটি ডিফল্ট মান সেট করতে পারি। এটি আমাদের ইউআরএল অনুপস্থিত এবং যেখানে ইউআরএল সমানভাবে খালি স্ট্রিং রয়েছে সেই ক্ষেত্রে আমাদের চিকিত্সা করতে সহায়তা করে।

মডিউল.এক্সপোর্টস.হান্ডেল = (ইভেন্ট, প্রসঙ্গ, কলব্যাক) => long দীর্ঘতরুক দিন = জেএসওএন. পার্স (ইভেন্ট.বডি) urআরল || ''}

ইউআরএল পরীক্ষা করুন

প্রদত্ত URL টি বৈধ কিনা তা যাচাই করতে একটি মৌলিক যাচাইকরণ যুক্ত করুন। এটি অর্জনের জন্য বেশ কয়েকটি পদ্ধতি রয়েছে। তবে, এই টিউটোরিয়ালটি এটিকে সহজ রাখবে এবং অন্তর্নির্মিত নোড.জেএস ইউআরএল মডিউলটি ব্যবহার করবে। আমরা একটি বৈধ URL এ একটি সমাধান প্রতিশ্রুতি এবং একটি অবৈধ URL এ অস্বীকৃত প্রতিশ্রুতি ফিরিয়ে দিতে আমাদের বৈধতা তৈরি করব। জাভাস্ক্রিপ্টের প্রতিশ্রুতিগুলি ক্রমানুসারে শৃঙ্খলাবদ্ধ হতে পারে যাতে একটি প্রতিশ্রুতির রেজোলিউশনটি পরবর্তীটির সাফল্য হ্যান্ডলারের কাছে যায়। প্রতিশ্রুতির এই বৈশিষ্ট্যটি আমরা আমাদের হ্যান্ডলারের কাঠামোর জন্য ব্যবহার করব। প্রতিশ্রুতি দিয়ে বৈধতা ফাংশন লিখুন।

কনস্ট url = প্রয়োজন ('url')
ফাংশনটি বৈধতা দিন (দীর্ঘতর) - যদি (লংআরল === '') {প্রতিশ্রুতি ফেরান। অবজেক্ট ({স্থিতি কোড: 400, বার্তা: 'ইউআরএল প্রয়োজন'})}
parsedUrl = url.parse (longUrl) যাক (parsedUrl.protocol === নাল || parsedUrl.host === নাল) {প্রতিশ্রুতি ফেরান ({স্থিতি কোড: 400, বার্তা: 'URL অবৈধ'})}
প্রতিশ্রুতি। রিলিজ (দীর্ঘতর)}

আমাদের বৈধতা ফাংশনে, আমরা প্রথমে URL টি খালি স্ট্রিংতে সেট করা নেই তা যাচাই করি। এই ক্ষেত্রে, আমরা প্রত্যাখ্যাত প্রতিশ্রুতি ফিরিয়ে দেব। দ্রষ্টব্য যে প্রত্যাখ্যানিত মানটি এমন একটি অবজেক্ট যা স্থিতি কোড এবং একটি বার্তা ধারণ করে। আমরা এটি পরে উপযুক্ত এপিআই প্রতিক্রিয়া তৈরি করতে ব্যবহার করব। নোড.জেএস ইউআরএল মডিউলে পার্স কল করা তথ্যের সাথে একটি URL অবজেক্ট ফেরত দেয় যা স্ট্রিং আর্গুমেন্ট হিসাবে পাস হওয়া ইউআরএল থেকে বের করা যেতে পারে। আমাদের মূল ইউআরএল বৈধতার অংশ হিসাবে, আমরা কেবলমাত্র একটি প্রোটোকল (উদাঃ "http") এবং একটি হোস্ট (উদা। "উদাহরণ.কম") বের করা যায় কিনা তা পরীক্ষা করে দেখি। যদি এই মানগুলির কোনওটি প্রত্যাবর্তিত ইউআরএল অবজেক্টের জন্য বাতিল হয় তবে ইউআরএলটি অবৈধ বলে ধরে নেওয়া হবে। যদি URL টি বৈধ হয়, আমরা প্রতিশ্রুতি দেওয়া অংশ হিসাবে এটি আবার পাঠাব।

জবাব ফেরত পাঠান

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

মডিউল.এক্সপোর্টস.হান্ডেল = (ইভেন্ট, প্রসঙ্গ, কলব্যাক) => long দীর্ঘতরুক দিন = জেএসওএন. পার্স (ইভেন্ট.বডি) urআরল || '' বৈধতা দিন (দীর্ঘতর) then তারপর (ফাংশন (পথ) {যাক প্রতিক্রিয়া = buildResponse (200, 'সাফল্য', পাথ) ফেরত দিন প্রতিশ্রুতি res সমাধান (প্রতিক্রিয়া}) .statusCode, err.message) Promise.resolve (প্রতিক্রিয়া) return) .তখন (ফাংশন (প্রতিক্রিয়া) {কলব্যাক (শূন্য, প্রতিক্রিয়া)})}
ফাংশন বিল্ডসেস্পোনস (স্ট্যাটাস কোড, বার্তা, পাথ = মিথ্যা) {আসুন বডি = {বার্তা} যদি (পাথ) বডি ['পথ'] = পাথ ফেরত {শিরোনাম: Access 'অ্যাক্সেস-কন্ট্রোল-অরিজিন-অরিজিন': '*'}, স্ট্যাটাস কোড: স্ট্যাটাস কোড, বডি: JSON.stringify (বডি)}

একটি ইউআরএল শর্টকোড তৈরি করুন

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

ফাংশনটি জেনারেটপথ (পথ = '') {অক্ষরগুলি = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' চলুন অবস্থান = ম্যাথ.ফ্লোর (ম্যাথ.র্যান্ডম () * ক্যারেক্টারস (অক্ষর)
যদি (পথ. দৈর্ঘ্য === 7) back ফেরার পথে}
জেনারেটপথ (পথ + চরিত্র) প্রদান করে}

একই শর্টকোডটি উত্পন্ন হওয়ার সম্ভাবনাটি ছোট হলেও (বাস্তবে এমন একটি সুযোগ রয়েছে যে দুটি শর্টকোড একই, এক 0.00000000000000000000006363365516), জেনারেট শর্টকোড ইতিমধ্যে ব্যবহারে রয়েছে কিনা তা আমাদের খতিয়ে দেখা উচিত। আমরা এডাব্লুএস এসডিকে দিয়ে এটি করতে পারি। এস 3 পরিষেবাতে একটি হেডওজেক্ট পদ্ধতি রয়েছে যা কোনও অবজেক্টের মেটাডেটা লোড করতে ব্যবহৃত হয়। এটির সাহায্যে আমরা একই নামের কোনও বস্তু ইতিমধ্যে বিদ্যমান কিনা তা পরীক্ষা করতে পারি। যদি কোনও বস্তুর জন্য "নটফাউন্ড" কোডটি দিয়ে কোনও প্রতিশ্রুতি পাওয়া যায়নি, তবে তা প্রত্যাখাত হবে। এই অস্বীকৃত প্রতিশ্রুতি নির্দেশ করে যে শর্টকোডটি বিনামূল্যে এবং ব্যবহার করা যেতে পারে। হেডঅবজেক্টকে কল করা তদন্তের চেয়ে নিখুঁত যে গেটওজেক্টের মাধ্যমে বস্তুটি উপলব্ধ রয়েছে যা পুরো বস্তুটি লোড করে।

কনস্ট এডাব্লুএস = প্রয়োজন ('আউজ-এসডিকে') কনস্ট এস 3 = নতুন এডাব্লুএস.এস 3 ()
ফাংশনটিপথফ্রি (পাথ) S রিটার্ন এস 3.হেডঅবজেক্ট (বিল্ডরেডাইরেক্ট (পাথ))। প্রতিশ্রুতি () .পরে (() => প্রতিশ্রুতি। সমাধান (মিথ্যা)) ক্যাচ (ফাংশন (ত্রুটি)) {যদি (err.code == 'নটফাউন্ড') {ফেরত প্রতিশ্রুতি.আরলভ (সত্য)} অন্যথায় ise প্রতিশ্রুতি ফেরান। প্রত্যাখ্যান (ভুল)}})}
ফাংশন বিল্ডরেডাইরেক্ট (পথ, লংআরল = মিথ্যা) {পুনঃনির্দেশিত করুন = {'বালতি': কনফিগারেশন B বুকেট, 'কী': পথ}
if (longUrl) {redirect ['WebsiteRedirectLocation'] = দীর্ঘআরআল
ফরোয়ার্ড করা হচ্ছে}

আমরা পুনরাবৃত্তভাবে একটি অনন্য বস্তুর পাথ সন্ধান করতে isPathFree ব্যবহার করতে পারি।

ফাংশন getPath () new নতুন প্রতিশ্রুতি ফাংশন (ফাংশন (সমাধান, প্রত্যাখ্যান) {চলুন পথ = জেনারেটপথ () isPathFree (পথ) function })}

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

একটি অনন্য শর্টকোড সন্ধানের পরে কোনও অবজেক্টটি সংরক্ষণ করতে, আমাদের কেবলমাত্র AWS SDK S3 পরিষেবাটিতে putObject পদ্ধতিটি কল করতে হবে। আসুন এটি এটিকে একটি ফাংশনটিতে গুটিয়ে রাখুন যখন পুটবজেক্ট পদ্ধতিতে কল সফল হয় এবং যখন এটি না করে তখন একটি API প্রতিক্রিয়া তৈরি করতে ত্রুটিযুক্ত বস্তুটি প্রদান করে শর্টকোডটি সমাধান করে।

ফাংশন সেভরেডাইরেক্ট (পুনর্নির্দেশ) S রিটার্ন এস 3.পুটঅবজেক্ট (পুনর্নির্দেশ) .প্রিমাইস () .পরে (() => প্রতিশ্রুতি। পুনরুদ্ধার (['কী'])) .ক্যাচ (())> প্রতিশ্রুতি.আরজেক্ট ({স্ট্যাটাস কোড: 500, বার্তা: "পুনর্নির্দেশটি সংরক্ষণ করার সময় ত্রুটি"})}

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

মডিউল.এক্সপোর্টস.হান্ডেল = (ইভেন্ট, প্রসঙ্গ, কলব্যাক) => long দীর্ঘতরুক দিন = জেএসওএন. পার্স (ইভেন্ট.বডি) urআরল || '' বৈধতা দিন (লংআরল) .পরে (ফাংশন () {getPath ()}) .পরে (ফাংশন (পাথ) {redirect = buildRedirect (পাথ, লংআরল) রিটার্ন সেভরেইডেক্ট (রিডাইরেক্ট)}) .থেন (ফাংশন (পাথ)) response প্রতিক্রিয়া = buildResponse (200, 'সাফল্য', পাথ) ফেরত করুন প্রতিশ্রুতি res সমাধান (প্রতিক্রিয়া)।) কেচ (ফাংশন (ত্রুটি)) response প্রতিক্রিয়া = buildResponse (err.statusCode, err.message) ফেরত দিন )}) .ত (ফাংশন (উত্তর) {কলব্যাক (শূন্য, উত্তর)})}

এপিআই স্থাপন করুন

আপনার টার্মিনালে সার্ভারলেস মোতায়েন চালান এডব্লিউএস-তে API মোতায়েন করতে। এটি আমাদের এস 3 বালতি সেট আপ করবে এবং শেষের পয়েন্টের URL টি ফিরিয়ে দেবে। শেষ পয়েন্টের ইউআরএল প্রস্তুত রাখুন কারণ আমাদের এটি পরে প্রয়োজন হবে need

সার্ভারহীন: প্যাকেজিং পরিষেবা ... সার্ভার ছাড়াই: বিকাশ নির্ভরতা ছাড়াই ... সার্ভার ছাড়াই: ক্লাউডফর্মেশন ফাইলটি এস 3-এ আপলোড করা হয় ... সার্ভার ছাড়াই: শিল্পকর্মগুলি আপলোড হয় ... সার্ভার ছাড়াই: সার্ভিস জিপ ফাইলটি এস 3-এ আপলোড করা হয় (5 ম , 44 এমবি) ... সার্ভার ছাড়াই: টেমপ্লেটটি চেক করা হয়েছে ... সার্ভারলেস: স্ট্যাকটি আপডেট হয়েছে ... সার্ভারলেস: ব্যাচ আপডেটের অগ্রগতি পরীক্ষা করা হয়েছে ... .............. সার্ভারলেস: স্ট্যাক আপডেট শেষ হয়েছে ... পরিষেবা তথ্য পরিষেবা: সার্ভারলেস-ইউআরএল-সংক্ষিপ্ততর স্টেজ: দেব অঞ্চল: ইইউ-ওয়েস্ট -1 স্ট্যাক: সার্ভারলেস-ইউআরএল-শর্টনার-দেব এপিআই কী: কিছুই নেই শেষ বিন্দু: পোস্ট - https: // t2fgbcl26h। এক্সিকিউটেট-api.eu-west-1.amazonaws.com/dev/ ফাংশন: সংরক্ষণ করুন: সার্ভারলেস-url-shortener-dev-store সার্ভারলেস: পুরানো পরিষেবা সংস্করণগুলি সরানো হবে ...

সামনের প্রান্তটি তৈরি করুন

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

একটি স্ট্যাটিক ফোল্ডার তৈরি করুন যাতে আমরা আমাদের ফ্রন্ট-এন্ড কোডটি কোথাও সঞ্চয় করতে পারি।

নির্ভরতা ডাউনলোড করুন

আমাদের সদ্য নির্মিত স্ট্যাটিক ফোল্ডারে কাগজ.মিন.সি.এস. এবং জ্যাকিউরি -৩.২.১.মিন.জেএস এর একটি অনুলিপি সংরক্ষণ করুন। এগুলি পেপারসিএসএস ফ্রেমওয়ার্ক বা jQuery লাইব্রেরির ছোট সংস্করণ।

এইচটিএমএল যুক্ত করুন

স্ট্যাটিক ফোল্ডারে ইনডেক্স। Html নামে একটি নতুন ফাইল তৈরি করুন এবং প্রয়োজনীয় এইচটিএমএল কোড যুক্ত করুন। ফর্মটি জমা দেওয়ার জন্য আমাদের একটি ইউআরএল ইনপুট এবং একটি বোতামের একটি ফর্ম প্রয়োজন। আমাদের কোথাও এপিআই কলগুলির ফলাফলও সংরক্ষণ করতে হবে যা একটি সফল এপিআই কলের জন্য সংক্ষিপ্ত URL এবং একটি ব্যর্থ API কলের জন্য ত্রুটি বার্তা হবে।

সার্ভারবিহীন ইউআরএল সংক্ষিপ্ত </ শিরোনাম> <লিঙ্ক href = "কাগজ.মিন.সি.এস.সি." rel = "স্টাইলশীট"> </ হেড> <স্টাইল> * {পাঠ্য প্রান্তিককরণ: মাঝখানে; }</pre><pre># ম্যাসেজ {প্রদর্শন: কিছুই নয়; } সার্ভারলেস ইউআরএল সংক্ষিপ্তকারী <label for = "url">সংক্ষিপ্ত হওয়ার জন্য URL লিখুন</label> <a href="https://git.io/vbS8I">গিথুবে এই প্রকল্পটি দেখুন</a></pre><p>আপনি সার্ভারলেস মোতায়েন চালানোর সময় প্রদর্শিত হয়েছিল এমন এপিআই এন্ডপয়েন্টে ফর্ম ক্রিয়াটি সেট করে তা নিশ্চিত করুন, যদিও এটি ব্রাভিটির জন্য উপরের কোড ব্লকে তালিকাভুক্ত নয়। এই স্থাপনার মাধ্যমে যদি আপনার আর আপনার টার্মিনাল আউটপুটটিতে অ্যাক্সেস না থাকে তবে আপনি সার্ভারলেস তথ্য কমান্ডের সাহায্যে শেষের পয়েন্ট URL নির্ধারণ করতে পারেন।</p><h4>এপিআই অনুরোধ করুন</h4><p>জাভাস্ক্রিপ্ট লেখার আগে আপনি আমাদের এপিআইতে অনুরোধগুলি প্রেরণের জন্য তত্ক্ষণাত স্ক্রিপ্ট ট্যাগ স্থাপন করে বোঝা করুন এবং পূর্বে ডাউনলোড করা ন্যূনতম ফাইলটি দেখুন।</p><pre><script src = "jquery-3.2.1.min.js"> </ script></pre><p>এখন নীচে অন্য জোড়া স্ক্রিপ্ট ট্যাগ যুক্ত করুন এবং একটি ফাংশন তৈরি করুন যা ব্যবহারকারীর কাছে একটি বার্তা প্রদর্শন করতে ব্যবহার করা যেতে পারে। এটি করতে, আমাদের টেমপ্লেটে Div বার্তাটি ব্যবহার করুন, যা পৃষ্ঠাটি লোড হওয়ার পরে ডিফল্ট হিসাবে "কিছুই নয়" এ সেট করা থাকে। একটি বার্তা প্রদর্শন করতে, আমরা কেবল এই ডিভটিতে পাঠ্যটি () সহ পাঠ্যটি সেট করতে পারি এবং প্রদর্শন () এর মাধ্যমে প্রদর্শনটি টগল করতে পারি।</p><pre><script>
  Funktion addMessage (Text) {
    $ ('# message'). text (text) .show ()
  }
</ script></pre><p>আসুন আরেকটি ফাংশন লিখি যাতে স্ক্রিপ্ট ট্যাগগুলির একই সেট থাকে যা jQuery আমাদের API এ অনুরোধ করার জন্য ব্যবহার করে।</p><pre>ফাংশন শর্টলিঙ্ক (এপিআইআরল, লংআরল) {$ .জ্যাক্স (এপিআইআরএল, {প্রকার: "পোস্ট", ডেটা: জেএসওএন.স্ট্রিংফাই ({ইউআরএল: লংআরল})}) .ডোন (ফাংশন (প্রতিক্রিয়া জেএসএন) {ওয়ার প্রোটোকল = উইন্ডো.লোকশন। প্রোটোকল + '//' var হোস্ট = উইন্ডো.লোকেশন.হোস্ট + '/' ভেরি শর্টআরল = প্রোটোকল + হোস্ট + রেসপন্স জেএসএন.পথ অ্যাডম্যাসেজ (শর্টআরল)।) .ফেল (ফাংশন (ডেটা) {যদি (ডেটা.স্ট্যাটাস === 400) {addMessage (data.responseJSON.message)} অন্য {addMessage ('একটি অপ্রত্যাশিত ত্রুটি ঘটেছে')}})}</pre><p>এই ফাংশনটি একটি পোষ্ট অনুরোধ তৈরি করে এবং অনুরোধের মূল অংশটি একটি JSON অবজেক্টে সেট করে যা সংক্ষিপ্ত করার জন্য URL থাকে। যখন অনুরোধটি সফলভাবে শেষ হয়ে যায় এবং একটি এইচটিটিপি 2 এক্সএক্স স্থিতি কোডটি ফিরে আসে, শর্টকোড প্রতিক্রিয়াতে পাথ কী থেকে প্রাপ্ত হয় এবং একটি সম্পূর্ণ যোগ্যতাসম্পন্ন সংক্ষিপ্ত ইউআরএল তৈরি করা হয় যা পূর্বে নির্মিত অ্যাডম্যাসেজ ফাংশনটি ব্যবহার করে ব্যবহারকারীর সামনে উপস্থাপিত হয়। অনুরোধটি ব্যর্থ হলে, একটি ত্রুটি বার্তা প্রদর্শিত হবে।</p><p>অবশেষে, আমরা একটি জমা জমা হ্যান্ডলার যুক্ত করে এটি আমাদের ফর্মের সাথে সংযুক্ত করতে পারি। এপিআই এন্ডপয়েন্ট পয়েন্ট ইউআরএল ফর্ম ক্রিয়া বৈশিষ্ট্য এবং URL ফর্ম URL ইনপুট থেকে সংক্ষিপ্ত করতে URL থেকে প্রাপ্ত।</p><pre>$ ('ফর্ম')। জমা দিন (ফাংশন (ইভেন্ট) {ইভেন্ট.প্রিভেন্টডাফল্ট () বার্তা যুক্ত করুন ('...') শর্টলিংক (ইভেন্ট.টারাজেট.অ্যাকশন, ইভেন্ট.আরটেট.আরল.ভ্যালু)})</pre><h4>ওয়েবসাইট স্থাপন করুন</h4><p>ওয়েবসাইট স্থাপনার জন্য, আমরা স্ট্যাটিক ফোল্ডারের সামগ্রীগুলি আমাদের এস 3 বালতিতে আপলোড করতে আমরা AWS CLI সিঙ্ক কমান্ডটি ব্যবহার করি। আপনার টার্মিনালে অ্যাউস এস 3 সিঙ্ক স্ট্যাটিক এস 3: // [বালতি] চালান এবং [বালতি] কে আপনার বালতি নাম কনফিগার.জেসনে নির্বাচিত করে প্রতিস্থাপন করুন। এই প্রক্রিয়াটি শেষ করার পরে, URL টি সংক্ষেপে কর্ম করতে আপনার ব্রাউজারে আপনার S3 বালতি ঠিকানায় নেভিগেট করতে সক্ষম হওয়া উচিত। এস 3 বালতির জন্য সর্বজনীন ইউআরএলগুলি নিম্নলিখিত ফর্মটি গ্রহণ করে।</p><pre>http: // [বালতি]। এস 3-ওয়েবসাইট- [অঞ্চল] .amazonaws.com</pre><p>আপনি নিজের বালতির নাম এবং অঞ্চল যুক্ত করার পরে আপনার ইউআরএল সংক্ষিপ্ত ঠিকানাটি দেখতে দেখতে এটি দেখতে হবে।</p><pre>http://serverless-url-shortener.s3-website-eu-west-1.amazonaws.com</pre><p>আপনার বালতিতে একটি কাস্টম ডোমেন যুক্ত করতে, এই এডাব্লুএস সমর্থন নিবন্ধের দিকনির্দেশগুলির একটি অনুসরণ করুন। সহজ বিকল্পের জন্য, আপনার বালির নামটি আপনার ডোমেনের www সাবডোমেইনে সেট করা উচিত (উদাঃ www.example.com)। তারপরে আপনি যদি আপনার ডিএনএস কনফিগারেশনে ডাব্লুডাব্লুডাব্লু সাবডোমেনের জন্য সিআইএম রেকর্ড যুক্ত করেন এবং এটি আপনার এস 3 বালতি ঠিকানায় সেট করেন তবে আপনার ডোমেনের মাধ্যমে ওয়েবসাইটটি পৌঁছনো হওয়া উচিত। যে কোনও বিদ্যমান এ রেকর্ডসও মুছে ফেলুন এবং মনে রাখবেন যে এটি আপনার রুট ডোমেন থেকে www সাবডোমেইনে পুনর্নির্দেশ সেট আপ করবে না। এডাব্লুএস নিবন্ধে বর্ণিত হিসাবে এটি করার বিভিন্ন উপায় রয়েছে।</p><h3>শেষ করি</h3><p>আশা করি আপনি এই টিউটোরিয়ালটি সহায়ক পেয়েছেন। বাস্তবতা হ'ল এডাব্লুএস অবিশ্বাস্যভাবে নমনীয়। এই নিবন্ধে, আমরা কেবলমাত্র ইউআরএল সংক্ষিপ্ত করার জন্য কীভাবে ল্যাম্বদা এবং এস 3 ব্যবহার করতে পারি তার একটি উপায় বর্ণনা করেছি। যাইহোক, অন্যান্য পদ্ধতিতেও একই প্রক্রিয়াটি চালানো যেতে পারে mult</p><p>যদি আপনি এটি আকর্ষণীয় মনে করেন তবে আপনি আমার আগের একটি নিবন্ধ পছন্দ করতে পারেন যেখানে আমি ফর্ম জমা দেওয়ার পরিষেবা তৈরি করতে এডাব্লুএস লাম্বদা ব্যবহার করেছি।</p></div><div class="neighbor-articles"><h4 class="ui header">আরো দেখুন</h4><a href="/question/how-to-end-a-phone-conversation/" title="কিভাবে একটি ফোন কথোপকথন শেষ">কিভাবে একটি ফোন কথোপকথন শেষ</a><a href="/question/how-to-lighten-jeans-with-salt/" title="কিভাবে লবণ দিয়ে জিন্স হালকা করতে">কিভাবে লবণ দিয়ে জিন্স হালকা করতে</a><a href="/question/how-to-say-unfortunately-in-french/" title="ফরাসী ভাষায় দুর্ভাগ্যজনকভাবে কীভাবে বলা যায়">ফরাসী ভাষায় দুর্ভাগ্যজনকভাবে কীভাবে বলা যায়</a><a href="/question/how-to-smoke-meth-off-foil/" title="কিভাবে ফয়েল বন্ধ মেথ ধূমপান">কিভাবে ফয়েল বন্ধ মেথ ধূমপান</a><a href="/question/how-to-reheat-a-casserole-from-the-fridge/" title="কীভাবে ফ্রিজ থেকে ক্যাসরোলটি পুনরায় গরম করতে হয়">কীভাবে ফ্রিজ থেকে ক্যাসরোলটি পুনরায় গরম করতে হয়</a><a href="/question/how-to-connect-two-monitors-to-one-dvr/" title="কিভাবে একটি ডিভিআর দুই মনিটর সংযোগ করতে">কিভাবে একটি ডিভিআর দুই মনিটর সংযোগ করতে</a><a href="/question/how-to-mix-olive-drab-paint/" title="জলপাই drab পেইন্ট কিভাবে মিশ্রিত করতে">জলপাই drab পেইন্ট কিভাবে মিশ্রিত করতে</a><a href="/question/how-to-make-textbox-transparent-in-word/" title="কীভাবে পাঠ্যবাক্সকে কথায় স্বচ্ছ করবেন">কীভাবে পাঠ্যবাক্সকে কথায় স্বচ্ছ করবেন</a></div></div><div class="article-sidebar"><div class="neighbor-articles"><h4 class="ui header">আরো দেখুন</h4><a href="/article/how-to-convince-strangers-to-help-you-get-a-job-f29294/" title="কিভাবে চাকরি খুঁজে পেতে অপরিচিতদের বোঝানো যায়">কিভাবে চাকরি খুঁজে পেতে অপরিচিতদের বোঝানো যায়</a><a href="/article/does-facebook-even-know-how-to-control-facebook-a02f09/" title="ফেসবুক কীভাবে ফেসবুক নিয়ন্ত্রণ করতে জানে?">ফেসবুক কীভাবে ফেসবুক নিয়ন্ত্রণ করতে জানে?</a><a href="/article/how-to-prevent-burnout-in-the-workplace-aa2954/" title="কিভাবে কর্মক্ষেত্রে বার্নআউট প্রতিরোধ করবেন">কিভাবে কর্মক্ষেত্রে বার্নআউট প্রতিরোধ করবেন</a><a href="/article/flowchart-how-to-deal-with-rejection-db3cb4/" title="ফ্লোচার্ট: প্রত্যাখ্যানের সাথে ডিল করা।">ফ্লোচার্ট: প্রত্যাখ্যানের সাথে ডিল করা।</a><a href="/article/how-es6-classes-really-work-and-how-to-build-your-own-1a7d5a/" title="কীভাবে ES6 ক্লাসগুলি কার্যকরভাবে কাজ করে এবং কীভাবে আপনার নিজের তৈরি করতে হয়">কীভাবে ES6 ক্লাসগুলি কার্যকরভাবে কাজ করে এবং কীভাবে আপনার নিজের তৈরি করতে হয়</a><a href="/article/how-to-use-webgl-shaders-in-webassembly-ec0fb7/" title="ওয়েবঅ্যাসাব্ল্যাশনে ওয়েবজিএল শেডারগুলির ব্যবহার">ওয়েবঅ্যাসাব্ল্যাশনে ওয়েবজিএল শেডারগুলির ব্যবহার</a><a href="/article/requirement-analysis-how-to-use-this-startup-friendly-approach-a-case-study-2bcf59/" title="প্রয়োজনীয়তা বিশ্লেষণ: এই স্টার্টআপ বন্ধুত্বপূর্ণ পদ্ধতির ব্যবহার + একটি কেস স্টাডি">প্রয়োজনীয়তা বিশ্লেষণ: এই স্টার্টআপ বন্ধুত্বপূর্ণ পদ্ধতির ব্যবহার + একটি কেস স্টাডি</a><a href="/article/how-to-build-a-react-and-gatsby-powered-blog-in-about-10-minutes-608f8f/" title="প্রায় 10 মিনিটে কীভাবে একটি প্রতিক্রিয়া এবং গ্যাটসবি চালিত ব্লগ তৈরি করবেন">প্রায় 10 মিনিটে কীভাবে একটি প্রতিক্রিয়া এবং গ্যাটসবি চালিত ব্লগ তৈরি করবেন</a></div></div></div></main><div class="push"></div></div><footer><div class="flags-footer"><a href="https://uz.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="uz flag"></i></a><a href="https://bg.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="bg flag"></i></a><a href="https://et.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="ee flag"></i></a><a href="https://lt.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="lt flag"></i></a><a href="https://lv.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="lv flag"></i></a><a href="https://sr.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="rs flag"></i></a><a href="https://sl.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="si flag"></i></a><a href="https://sk.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="sk flag"></i></a><a href="https://uk.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="ua flag"></i></a><a href="https://sq.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="al flag"></i></a><a href="https://hy.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="am flag"></i></a><a href="https://is.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="is flag"></i></a><a href="https://az.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="az flag"></i></a><a href="https://kk.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="kz flag"></i></a><a href="https://fa.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="ir flag"></i></a><a href="https://tg.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="tj flag"></i></a><a href="https://ga.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="ie flag"></i></a><a href="https://be.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="by flag"></i></a><a href="https://ka.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="ge flag"></i></a><a href="https://ky.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="kg flag"></i></a><a href="https://lb.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="lu flag"></i></a><a href="https://lo.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="la flag"></i></a><a href="https://ar.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="sa flag"></i></a><a href="https://ca.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="es flag"></i></a><a href="https://zh.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="cn flag"></i></a><a href="https://hr.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="hr flag"></i></a><a href="https://cs.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="cz flag"></i></a><a href="https://da.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="dk flag"></i></a><a href="https://nl.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="nl flag"></i></a><a href="https://tl.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="ph flag"></i></a><a href="https://fi.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="fi flag"></i></a><a href="https://fr.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="fr flag"></i></a><a href="https://de.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="de flag"></i></a><a href="https://el.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="gr flag"></i></a><a href="https://iw.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="il flag"></i></a><a href="https://hi.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="in flag"></i></a><a href="https://hu.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="hu flag"></i></a><a href="https://id.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="id flag"></i></a><a href="https://it.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="it flag"></i></a><a href="https://ja.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="jp flag"></i></a><a href="https://ko.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="kr flag"></i></a><a href="https://ms.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="my flag"></i></a><a href="https://mr.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="io flag"></i></a><a href="https://no.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="no flag"></i></a><a href="https://pl.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="pl flag"></i></a><a href="https://pt.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="pt flag"></i></a><a href="https://ro.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="ro flag"></i></a><a href="https://ru.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="ru flag"></i></a><a href="https://internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="es flag"></i></a><a href="https://sv.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="ch flag"></i></a><a href="https://ta.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="sg flag"></i></a><a href="https://te.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="in flag"></i></a><a href="https://th.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="th flag"></i></a><a href="https://tr.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="tr flag"></i></a><a href="https://ur.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="pk flag"></i></a><a href="https://vi.internautasporlapaz.org/article/how-to-build-a-serverless-url-shortener-using-aws-lambda-and-s3-da940b/"><i class="vn flag"></i></a></div>internautasporlapaz.org<!-- --> © <!-- -->2021<!-- --> </footer></div></div></div></body></html>