ایجاد یک 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 شروع کنید.
2. حال بر روی گزینه کلیک می کنیم کاربر ریشه، فیلد را پر کنید آدرس ایمیل کاربر روت کنید و روی دکمه کلیک کنید بعد.
توجه داشته باشید:
3. در ادامه فیلد را پر می کنیم کلمه عبور و روی دکمه کلیک کنید ورود.
4. پس از دسترسی به حساب کاربری، تایپ می کنیم هدف در قسمت جستجو و روی گزینه کلیک کنید هدف.
5. حالا روی منو کلیک می کنیم کاربران.
6. در مرحله بعد روی دکمه کلیک می کنیم کاربران را اضافه کنید.
7. پس از دسترسی به صفحه نمایش افزودن کاربران، فیلد را پر می کنیم نام کاربری و روی دکمه کلیک کنید بعد.
8. حال بر روی گزینه کلیک می کنیم خط مشی ها را مستقیماً ضمیمه کنید، روی مورد کلیک کنید AdministratorAccess و روی دکمه کلیک کنید بعد.
9. بعد روی دکمه کلیک می کنیم کاربر ایجاد کنید.
10. پس از ایجاد کاربر، روی لینک با نام کاربری کلیک می کنیم.
11. حالا روی تب کلیک می کنیم مدارک امنیتی و روی دکمه کلیک کنید ایجاد کلید دسترسی.
12. در مرحله بعد روی گزینه کلیک می کنیم رابط خط فرمان (CLI) و روی دکمه کلیک کنید بعد.
13. سپس روی دکمه کلیک می کنیم ایجاد کلید دسترسی.
14. پس از ایجاد کلیدهای دسترسی، کلیدها را کپی می کنیم کلید دسترسی و کلید دسترسی مخفی زیرا کلیدها در خط فرمان استفاده خواهند شد و روی دکمه کلیک کنید ایجاد کلید دسترسی.
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 مستقر شده است یا خیر. تایپ خواهیم کرد لامبدا در قسمت جستجو و روی گزینه کلیک کنید لامبدا.
24. اکنون تأیید خواهیم کرد که الف تابع با نام ایجاد شد nodejs-aws-lambda-dev-app.
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 در فضای ابری بدون نیاز به مدیریت سرورها یا خوشه ها استفاده کنید.
از خواندن شما متشکرم و امیدوارم از مقاله لذت برده باشید!
این آموزش به زبان پرتغالی در وبلاگ من قرار داده شده است.
برای به روز ماندن هر زمان که مقالات جدیدی ارسال می کنم، من را دنبال کنید توییتر و لینکدین