Создание бессерверной инфраструктуры CRUD REST API с помощью AWS CDK и API Gateway

Привет! Сегодня мы погружаемся в увлекательный мир создания бессерверной инфраструктуры API CRUD REST с использованием AWS CDK и API Gateway. В этой записи блога я проведу вас через этот процесс и поделюсь некоторыми примерами кода, которые помогут вам начать работу. Итак, берите чашечку кофе и начнем!

Что такое AWS CDK и почему его следует использовать?

AWS CDK (Cloud Development Kit) — это среда разработки программного обеспечения с открытым исходным кодом, которая позволяет определять облачную инфраструктуру с использованием знакомых языков программирования, таких как TypeScript, Python, Java и других. Он привносит возможности программирования в предоставление инфраструктуры, упрощая создание, управление и развертывание ресурсов AWS.

Используя CDK, мы можем определить нашу бессерверную инфраструктуру как код, что дает несколько преимуществ. Это обеспечивает контроль версий, совместную работу и повторяемость. Это также позволяет вам управлять своей инфраструктурой вместе с кодом вашего приложения, обеспечивая согласованность и снижая вероятность отклонения конфигурации.

Настройка проекта

Для начала убедитесь, что у вас установлен интерфейс командной строки AWS CDK. Создайте новый каталог для своего проекта и инициализируйте новый проект CDK, выполнив следующие команды:

mkdir serverless-api
cd serverless-api
cdk init --language typescript

При этом будет создан новый проект CDK с TypeScript в качестве языка программирования.

Создание REST API

Наша цель — создать простой CRUD REST API. Начнем с определения ресурса API-шлюза с помощью CDK. Откройте файл lib/serverless-api-stack.tsи обновите его, добавив следующий код:

import * as cdk from 'aws-cdk-lib';
import * as apigateway from 'aws-cdk-lib/aws-apigateway';
import { Construct } from 'constructs';
export class ServerlessApiStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    const api = new apigateway.RestApi(this, 'ServerlessAPI', {
      restApiName: 'Serverless API',
    });
    // Define API endpoints here
  }
}

Этот код создает новый REST API, используя класс RestApiиз модуля aws-cdk-lib/aws-apigateway.

Определение конечных точек API

Далее давайте определим конечные точки API для наших операций CRUD. Добавьте следующий код в конструктор ServerlessApiStack:

// Create the 'items' resource
const itemsResource = api.root.addResource('items');
// Create the GET method for retrieving items
itemsResource.addMethod('GET', new apigateway.LambdaIntegration(getItemsLambda));
// Create the POST method for creating new items
itemsResource.addMethod('POST', new apigateway.LambdaIntegration(createItemLambda));
// Create the item resource
const itemResource = itemsResource.addResource('{id}');
// Create the GET method for retrieving a single item
itemResource.addMethod('GET', new apigateway.LambdaIntegration(getItemLambda));
// Create the PUT method for updating an item
itemResource.addMethod('PUT', new apigateway.LambdaIntegration(updateItemLambda));
// Create the DELETE method for deleting an item
itemResource.addMethod('DELETE', new apigateway.LambdaIntegration(deleteItemLambda));

В этом фрагменте кода мы определяем ресурс /itemsи связанные с ним методы для GET (извлечение элементов) и POST (создание нового элемента). Мы также определяем ресурс /items/{id}и его методы для GET (получение одного элемента), PUT (обновление элемента) и DELETE (удаление элемента).

Реализация лямбда-функций

Чтобы обрабатывать запросы API, нам необходимо реализовать функции Lambda. Вот пример того, как можно реализовать функцию getItemsLambda:

import * as lambda from 'aws-cdk-lib/aws-lambda';
// ...
const getItemsLambda = new lambda.Function(this, 'GetItemsLambda', {
  runtime: lambda.Runtime.NODEJS_14_X,
  handler: 'index.handler',
  code: lambda.Code.fromAsset('lambda/getItems'),
});

Аналогичным образом вы можете реализовать другие функции Lambda (createItemLambda, getItemLambda, updateItemLambdaи deleteItemLambda). с помощью модуля aws-cdk-lib/aws-lambda.

Развертывание инфраструктуры

После того как вы определили шлюз API, конечные точки и функции Lambda, вы можете развернуть инфраструктуру с помощью следующей команды:

cdk deploy

CDK упакует и развернет инфраструктуру в вашем аккаунте AWS. После успешного развертывания вы увидите URL-адрес конечной точки шлюза API в выходных данных.

Подведение итогов

В этой записи блога мы рассмотрели, как создать бессерверную инфраструктуру API CRUD REST с использованием AWS CDK и API Gateway. Мы обсудили преимущества использования CDK для определения инфраструктуры как кода и рассмотрели процесс настройки проекта, создания REST API, определения конечных точек API, реализации функций Lambda и развертывания инфраструктуры.

Используя возможности AWS CDK, вы можете легко управлять и масштабировать свою бессерверную инфраструктуру, позволяя сосредоточиться на создании приложения, не беспокоясь о базовой инфраструктуре.

Надеюсь, эта статья оказалась информативной и полезной для начала создания собственной бессерверной инфраструктуры API CRUD REST с использованием AWS CDK и API Gateway. Приятного кодирования!