برنامه نویسی

ایجاد یک API بدون سرور با استفاده از AWS Lambda و Node.js با TypeScript و Express.js

در این مقاله، برنامه ای با استفاده از Node.js با TypeScript و Express.js ایجاد می شود که در آن یک API بدون سرور در سرویس AWS Lambda پیاده سازی و مستقر می شود.

حساب کاربری را در AWS Lambda ایجاد و پیکربندی کنید

AWS Lambda سرویسی است که به شما امکان می‌دهد تا تقریباً برای هر نوع برنامه‌ای بدون تهیه یا مدیریت سرورها یا خوشه‌ها کد اجرا کنید.

1. بیایید حساب را ایجاد و پیکربندی کنیم. وارد سایت https://aws.amazon.com/lambda/ شوید و روی دکمه کلیک کنید با AWS Lambda شروع کنید.

AWS Lambda - صفحه اصلی

2. حال بر روی گزینه کلیک می کنیم کاربر ریشه، فیلد را پر کنید آدرس ایمیل کاربر روت کنید و روی دکمه کلیک کنید بعد.

AWS Lambda - وارد شوید

توجه داشته باشید:

3. در ادامه فیلد را پر می کنیم کلمه عبور و روی دکمه کلیک کنید ورود.

AWS Lambda - ورود کاربر ریشه

4. پس از دسترسی به حساب کاربری، تایپ می کنیم هدف در قسمت جستجو و روی گزینه کلیک کنید هدف.

سرویس AWS Lambda - IAM

5. حالا روی منو کلیک می کنیم کاربران.

داشبورد AWS Lambda - IAM

6. در مرحله بعد روی دکمه کلیک می کنیم کاربران را اضافه کنید.

AWS Lambda - کاربران

7. پس از دسترسی به صفحه نمایش افزودن کاربران، فیلد را پر می کنیم نام کاربری و روی دکمه کلیک کنید بعد.

AWS Lambda - مشخصات کاربر را مشخص کنید

8. حال بر روی گزینه کلیک می کنیم خط مشی ها را مستقیماً ضمیمه کنید، روی مورد کلیک کنید AdministratorAccess و روی دکمه کلیک کنید بعد.

AWS Lambda - مجوزها را تنظیم کنید

9. بعد روی دکمه کلیک می کنیم کاربر ایجاد کنید.

AWS Lambda - مرور و ایجاد کنید

10. پس از ایجاد کاربر، روی لینک با نام کاربری کلیک می کنیم.

AWS Lambda - کاربران

11. حالا روی تب کلیک می کنیم مدارک امنیتی و روی دکمه کلیک کنید ایجاد کلید دسترسی.

AWS Lambda - اعتبارنامه امنیتی

12. در مرحله بعد روی گزینه کلیک می کنیم رابط خط فرمان (CLI) و روی دکمه کلیک کنید بعد.

AWS Lambda - به بهترین شیوه‌ها و جایگزین‌های کلیدی دسترسی پیدا کنید

13. سپس روی دکمه کلیک می کنیم ایجاد کلید دسترسی.

AWS Lambda - برچسب توضیحات را تنظیم کنید

14. پس از ایجاد کلیدهای دسترسی، کلیدها را کپی می کنیم کلید دسترسی و کلید دسترسی مخفی زیرا کلیدها در خط فرمان استفاده خواهند شد و روی دکمه کلیک کنید ایجاد کلید دسترسی.

AWS Lambda - کلیدهای دسترسی را بازیابی کنید

15. آماده! حساب شما ایجاد شد، پیکربندی شد و کلیدها ایجاد شدند.

برنامه Node.js را ایجاد کنید

Node.js یک نرم افزار متن باز و چند پلتفرمی است که کد جاوا اسکریپت را روی سرور اجرا می کند. این بر اساس مترجم جاوا اسکریپت V8 گوگل است.

1. بیایید برنامه را ایجاد کنیم. ما پوشه برنامه را ایجاد می کنیم.

mkdir nodejs-aws-lambda
cd nodejs-aws-lambda
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

2. حالا فایل را ایجاد می کنیم package.json. گزینه -y اجازه می دهد تا فایل بدون سوالاتی مانند نام برنامه، نسخه و غیره ایجاد شود.

npm init -y
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

3. در مرحله بعد، وابستگی های برنامه را نصب می کنیم express و serverless-http.

npm install express serverless-http
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

4. پس از نصب وابستگی های برنامه، وابستگی های توسعه را نصب می کنیم ts-node، typescript و @types/express.

npm install rimraf ts-node typescript @types/express --save-dev
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

5. اکنون فایل پیکربندی TypeScript را ایجاد می کنیم tsconfig.json.

./node_modules/.bin/tsc --init
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

6. سپس فایل TypeScript را پیکربندی می کنیم tsconfig.json.

{
  "compilerOptions": {
    "target": "ESNEXT",
    "module": "commonjs",
    "outDir": "./dist",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "skipLibCheck": true
  },
  "include": [
    "src/**/*"
  ]
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

7. پس از پیکربندی فایل TypeScript، اسکریپت ترجمه را به فایل اضافه می کنیم package.json.

  "scripts": {
    "build": "rimraf dist && tsc"
  },
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

8. اکنون پوشه را ایجاد می کنیم src، src/routes و src/routes/v1.

mkdir -p src/routes/v1
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

9. در ادامه فایل routes را ایجاد می کنیم src/routes/v1/books.ts.

touch src/routes/v1/books.route.ts
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

10. پس از ایجاد فایل routes، مسیرها را در فایل اضافه می کنیم src/routes/v1/books.route.ts.

import { Request, Response, Router } from 'express';

const router = Router();

router.get('/', async (req: Request, res: Response) => {
  try {
    res.status(200).json([]);
  } catch (error) {
    console.error('An error ocurred:', error);
    res.status(500).json(error);
  }
});

router.get('/:id', async (req: Request, res: Response) => {
  try {
    res.status(200).json({});
  } catch (error) {
    console.error('An error ocurred:', error);
    res.status(500).json(error);
  }
});

router.post('/', async (req: Request, res: Response) => {
  try {
    res.status(201).json({});
  } catch (error) {
    console.error('An error occurred:', error);
    res.status(500).json(error);
  }
});

router.put('/:id', async (req: Request, res: Response) => {
  try {
    res.status(200).json({});
  } catch (error) {
    console.error('An error occurred:', error);
    res.status(500).json(error);
  }
});

router.delete('/:id', async (req: Request, res: Response) => {
  try {
    res.status(200).json({});
  } catch (error) {
    console.error('An error occurred:', error);
    res.status(500).json(error);
  }
});

export default router;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

11. حالا فایل را ایجاد می کنیم src/routes/v1/index.ts با پیکربندی مسیرهای نسخه 1.

touch src/routes/v1/index.ts
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

12. در مرحله بعد، پیکربندی مسیرها را به فایل اضافه می کنیم src/routes/v1/index.ts.

import { Router } from 'express';

import books from './books.route';

const router = Router();

router.use('/books', books);

export default router;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

13. سپس، ما فایل را ایجاد می کنیم src/routes/index.ts با پیکربندی مسیرها

touch src/routes/index.ts
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

14. پس از ایجاد فایل با پیکربندی مسیرها، پیکربندی مسیرها را به فایل اضافه می کنیم src/routes/index.ts.

import { Router } from 'express';

import v1 from './v1';

const router = Router();

router.use('/v1', v1);

export default router;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

15. حال فایل برنامه را ایجاد می کنیم src/app.ts با تنظیمات Express.js.

touch src/app.ts
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

16. سپس تنظیمات Express.js را به فایل اضافه می کنیم src/app.ts.

import express from 'express';
import serverless from 'serverless-http';

import routes from './routes';

const app = express();

app.use(express.json());

app.use('/', routes);

app.use((req: express.Request, res: express.Response, next: express.NextFunction) => {
  res.status(404).send();
});

app.use((err: any, req: express.Request, res: express.Response, next: express.NextFunction) => {
  res.status(err.status || 500).send();
});

export const handler = serverless(app);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

17. پس از افزودن تنظیمات Express.js، فایل پیکربندی Serverless را ایجاد می کنیم serverless.yml با تنظیمات AWS Lambda.

touch serverless.yml
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

18. اکنون تنظیمات AWS Lambda را به فایل اضافه می کنیم serverless.yml.

service: nodejs-aws-lambda
provider:
  name: aws
  runtime: nodejs18.x
functions:
  app:
    handler: dist/app.handler
    events:
      - http: ANY /
      - http: ANY /{proxy+}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

19. بعد، ما برنامه را می سازیم.

npm run build

> nodejs-aws-lambda@1.0.0 build /home/rodrigokamada/nodejs-aws-lambda
> rimraf dist && tsc
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

20. پس از ساخت اپلیکیشن، نصب می کنیم serverless ابزار

npm install -g serverless
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

21. اکنون ما آن را پیکربندی می کنیم serverless ابزار

serverless config credentials --provider aws --key 7YEE7ANQHFDGLZAKIAQR --secret yyyMEboMvA/IXUFI7djIoMRBJ3b0kFQ8p8TN6pKW
 Profile "default" has been configured
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

22. بعد، ما برنامه را مستقر خواهیم کرد.

serverless deploy

Deploying nodejs-aws-lambda to stage dev (us-east-1)

 Service deployed to stack nodejs-aws-lambda-dev (56s)

endpoints:
  ANY - https://5imsknki87.execute-api.us-east-1.amazonaws.com/dev
  ANY - https://5imsknki87.execute-api.us-east-1.amazonaws.com/dev/{proxy+}
functions:
  app: nodejs-aws-lambda-dev-app (853 kB)

Monitor Express APIs by route with the Serverless Console: run "serverless --console"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

23. پس از استقرار برنامه، تأیید خواهیم کرد که آیا برنامه در سرویس AWS Lambda مستقر شده است یا خیر. تایپ خواهیم کرد لامبدا در قسمت جستجو و روی گزینه کلیک کنید لامبدا.

AWS Lambda - سرویس Lambda

24. اکنون تأیید خواهیم کرد که الف تابع با نام ایجاد شد nodejs-aws-lambda-dev-app.

AWS Lambda - توابع Lambda

25. آماده! این برنامه در AWS Lambda ایجاد و مستقر شد.

مخزن برنامه در https://github.com/rodrigokamada/nodejs-aws-lambda موجود است.

برنامه را روی سرویس AWS Lambda تست کنید

1. بیایید برنامه را روی سرویس AWS Lambda آزمایش کنیم. درخواستی را در مسیر ایجاد شده و URL ارائه شده ارسال کنید.

curl -s "https://5imsknki87.execute-api.us-east-1.amazonaws.com/dev/v1/books" | jq
[
  {
    "id": "ebb3d966-74e4-11ed-8db0-136d663b98e7",
    "title": "Some Title",
    "author": "Some Author"
  }
]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

2. آماده! ما API بدون سرور مستقر در سرویس AWS Lambda را آزمایش کردیم.

خلاصه مطالبی که در این مقاله مطرح شد:

  • ما یک حساب کاربری در خدمات وب آمازون (AWS) ایجاد کردیم.
  • ما کلیدهای دسترسی را در خدمات وب آمازون (AWS) ایجاد کردیم.
  • ما یک برنامه Node.js ایجاد کردیم.
  • ما مسیرها را در برنامه Node.js با استفاده از Express.js ایجاد کردیم.
  • ما برنامه Node.js را روی سرویس AWS Lambda آزمایش کردیم.

شما می توانید از این مقاله برای ارائه API در فضای ابری بدون نیاز به مدیریت سرورها یا خوشه ها استفاده کنید.

از خواندن شما متشکرم و امیدوارم از مقاله لذت برده باشید!

این آموزش به زبان پرتغالی در وبلاگ من قرار داده شده است.

برای به روز ماندن هر زمان که مقالات جدیدی ارسال می کنم، من را دنبال کنید توییتر و لینکدین

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا