Тази статия е продължение на моята предишна статия, в която изградихме минималистично приложение за изтегляне на AWS DynamoDB данни от локално хостван Graphql сървър.

Сега ще модифицираме кода допълнително, за да изпълнява същия код като функцията AWS Lambda, внедрена чрез Serverless.

СТЪПКА 4: Създайте ламбда функция

Apollo Server осигурява обвързване за ламбда функция чрез apollo-server-lambda модул.

Променете server.js и вместо да стартирате Apollo Server, експортирайте ламбда функция apollo GraphQL, която AWS ламбда ще извика въз основа на HTTP събитие.

const { ApolloServer, gql } = require(‘apollo-server-lambda’);

const handler = server.createHandler({
  cors: {
    origin: true,
    credentials: true,
  },
});
exports.graphqlHandler = handler;

СТЪПКА 5: Разположете в AWS

Сега трябва да публикувате това в AWS. За тази цел ще използваме Без сървър (рамка за улесняване на разработването и внедряването на приложения без сървър).

npm install -g serverless

Serverless се нуждае от AWS профил, за да може да публикува и внедри кода от ваше име. В последната статия създадохме профил, наречен serverlessuser.

aws configure --profile serverlessuser

Изпълнете командата по-долу в CLI, за да предоставите достъп без сървър (заменете aws_secret_access_key и aws_access_key_id)

serverless config credentials --provider aws -- key aws_access_key_id -- secret aws_secret_access_key — profile custom-profile

Създайте serverless YAML файл

Нека да разгледаме този файл.

Този YAML файл инструктира да се създаде AWS Lambda услуга apollo-lambda и да се използва време за изпълнение като node12.

Сега изпълнете командата по-долу в CLI

serverless deploy --aws-profile serverlessuser

CLI ще покаже местоположението на крайните точки (напр. https://xxxx-east1.amazonaws.com/dev/graphql) за достъп до внедрения интерфейс GraphiQL.

Забележка: Уверете се, че новосъздадената функция Lambda има достъп до DynamoDB, като отидете в раздела с разрешения и прикачите подходящи политики за достъп до DynamoDB (или всички ресурси за целите на разработката) към ролята.

Вече можете да получите достъп до интерфейса на GraphiQL и да изпълните заявката

query {
  quotes {
    id
    value
    source
  }
}

Това е!

Няколко други връзки към това ще ви помогнат да разберете какво направи без сървър за вас и да отстраните грешки в приложението

CloudFormation, API Gateway и CloudWatch logs,

Бонус: Зад сцената

Разделът по-долу описва накратко какво направи Serverless за вас.

Първо, създаде функция Lambda. Нека се опитаме да го направим сами.

Отидете на Lambda конзола.

Създаване на функция - Автор от нулата › Попълнете име за зададено време за изпълнение на Node.

Също така се уверете, че настройките за време на изпълнение на функцията ламбда. Името на функцията за експортиране трябва да бъде graphql.graphqlHandler

Качете файл от Amazon S3, като предоставите URL адреса на връзката на вашия zip. Възползвайте се от същия zip, който безсървърният сървър ви предложи в кофата S3.

Нека се опитаме да изпълним тест и да изпълним заявка за тази функция.

Конфигурирайте тестово събитие.

Въведете това като заявка:

{
  "operationName": null,
  "variables": {},
  "query": "{\n  quotes {\n    id\n    value\n    source\n  }\n}\n"
}

Запазете и натиснете „Тест“ и ще видите грешка! Защо? защото функцията е изложена да отговори на HTTP заявка. Ето и втората част от това, което сървърът направи за вас.

Без сървър създава stackusing AWS Cloudformation, който разкрива HTTP крайни точки чрез AWS API Gateway.

Разгледайте стека без сървър, създаден за приложението apollo-lambda-dev. Отидете в раздела „шаблон“ и го вижте в дизайнера. Това ще покаже всички ресурси, които са създадени за изпълнение на ламбда функцията.

Вие определяте вашите ресурси, свойства и отношения във вашия шаблон и след това създавате своя стек от него. Както ще видите, има множество ресурси и ако се вгледате внимателно, ще видите APIGateway RestAPI и Метод (за обработка на GET, POST и т.н.), които са интегрирани с ресурс Lambda Function за изпълнение при всяко извикване на Rest API.

Има много неща, които се случват тук, което е извън обхвата на тази статия, но се надяваме, че би дало представа как Serverless помага при разработването и внедряването на безсървърни приложения.

Ако това ви е харесало, моля, щракнете върху бутона 👏 и ме последвайте за още актуализации.