ساختن یک API طبقه بندی شماره با AWS Lambda & API Gateway

مقدمه
در دنیای DevOps ، استقرار یک API مقیاس پذیر و بدون سرور یک مهارت ارزشمند است. این پست وبلاگ شما را از طریق ساختن یک API طبقه بندی شماره با استفاده از AWS Lambda ، API Gateway و Python پیاده می کند. API یک عدد را به عنوان ورودی می گیرد و خصوصیات ریاضی خود را به همراه یک واقعیت سرگرم کننده باز می گرداند.
من از دستگاه محلی برای انجام کار استفاده کرده ام اما با استقرار مشکل دارم. پس از تلاش بسیاری برای استفاده از دستگاه محلی ، نتیجه نمی گیرد. من تصمیم گرفتم از Lamba AWS استفاده کنم و کد خود را به ویرایشگر کد وارد کنم
ایجاد عملکرد
من به خانه کنسول خود حرکت می کنم و Lambda را جستجو می کنم و سپس یک عملکرد را انتخاب و ایجاد می کنم شماره کلاس
چرا لامبا را انتخاب می کنم
من AWS Lambda را انتخاب کردم زیرا بدون سرور است – به معنای من نیازی به مدیریت سرورها ندارم. AWS به طور خودکار زیرساخت ها را ارائه می دهد ، کد را اجرا می کند و پس از اجرای آن خاموش می شود و آن را بسیار مقرون به صرفه می کند زیرا من فقط در هنگام اجرای عملکرد صورتحساب می شوم.
بعد از ایجاد عملکرد ، کد خود را وارد می کنم
import json
import math
import urllib.request
def is_prime(n):
if n < 2:
return False
if n in (2, 3):
return True
if n % 2 == 0 or n % 3 == 0:
return False
for i in range(5, int(math.sqrt(n)) + 1, 2):
if n % i == 0:
return False
return True
def is_armstrong(n):
if n < 0:
return False
digits = [int(digit) for digit in str(n)]
power = len(digits)
return sum(digit ** power for digit in digits) == n
def is_perfect(n):
if n < 1:
return False
return sum(i for i in range(1, n // 2 + 1) if n % i == 0) == n
def get_fun_fact(n):
if n < 0:
return "Fun fact not available for negative numbers."
try:
url = f"http://numbersapi.com/{n}/math"
with urllib.request.urlopen(url, timeout=5) as response:
return response.read().decode("utf-8")
except Exception:
return "Fun fact not available."
def lambda_handler(event, context):
query_params = event.get("queryStringParameters", {})
number_str = query_params.get("number") if query_params else None
if not number_str:
return {
"statusCode": 400,
"headers": {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET",
"Access-Control-Allow-Headers": "Content-Type"
},
"body": json.dumps({"error": "No number provided."})
}
try:
number = int(float(number_str))
except ValueError:
return {
"statusCode": 400,
"headers": {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET",
"Access-Control-Allow-Headers": "Content-Type"
},
"body": json.dumps({
"error": "Invalid number format",
"invalid_input": number_str # Include the invalid input in the response
})
}
properties = ["odd" if number % 2 else "even"]
if is_armstrong(number):
properties.insert(0, "armstrong")
response_body = {
"number": number,
"is_prime": is_prime(number),
"is_perfect": is_perfect(number),
"properties": properties,
"digit_sum": sum(int(d) for d in str(abs(number))),
"fun_fact": get_fun_fact(number)
}
return {
"statusCode": 200,
"headers": {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET",
"Access-Control-Allow-Headers": "Content-Type"
},
"body": json.dumps(response_body)
}
پس از وارد کردن کد ، کد را قبل از استفاده از آن آزمایش می کنم
API برای طبقه بندی یک عدد بر اساس خصوصیات آن و بازگشت برخی از حقایق جالب طراحی شده است. جریان به شرح زیر است:
کاربر درخواست API را می کند
دروازه API درخواست را به AWS Lambda ارسال می کند
AWS Lambda درخواست را پردازش می کند و پاسخی ایجاد می کند
API Gateway پاسخ را به کاربر ارسال می کند
- به AWS API Gateway بروید → ایجاد API
- REST API → API جدید را انتخاب کنید
- نقطه پایانی را به عنوان عملکرد لامبدا تنظیم کنید
- مسیر منبع /API /طبقه بندی شماره را تعریف کنید
- CORS را فعال کنید (برای درخواست های متقاطع)
- استقرار API به یک مرحله (Prod)
بعد از آن من به APIGateway
برای ایجاد API و نامگذاری آن NumberClassificationAPI
سپس از Get برای ایجاد مسیر استفاده کنید /api/classfiy-api
و من مرحله را با استفاده از (prod) مستقر می کنم و COR ها را فعال می کنم و سپس آن را مستقر می کنم.
(https://nr7acfudff.execute-api.us-east-1.amazonaws.com/prod/api/classify-number؟number=371)
(https://github.com/bolarinwa2030/lambda_function/tree/main)
این خروجی است