Тази статия е продължение на моята предишна статия, в която изградихме минималистично приложение за изтегляне на 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 заявка. Ето и втората част от това, което сървърът направи за вас.
Без сървър създава stack
using AWS Cloudformation, който разкрива HTTP крайни точки чрез AWS API Gateway.
Разгледайте стека без сървър, създаден за приложението apollo-lambda-dev.
Отидете в раздела „шаблон“ и го вижте в дизайнера. Това ще покаже всички ресурси, които са създадени за изпълнение на ламбда функцията.
Вие определяте вашите ресурси, свойства и отношения във вашия шаблон и след това създавате своя стек от него. Както ще видите, има множество ресурси и ако се вгледате внимателно, ще видите APIGateway RestAPI и Метод (за обработка на GET, POST и т.н.), които са интегрирани с ресурс Lambda Function за изпълнение при всяко извикване на Rest API.
Има много неща, които се случват тук, което е извън обхвата на тази статия, но се надяваме, че би дало представа как Serverless помага при разработването и внедряването на безсървърни приложения.
Ако това ви е харесало, моля, щракнете върху бутона 👏 и ме последвайте за още актуализации.