I dag skal vi lage den såkalte. Yandex funksjon (offisielt navn
Jeg er også motstander (men uten fanatisme) av tradisjonelle servere, og tilhenger av såkalte. server (serverløse) løsninger, fordi jeg ikke liker (og jeg vet egentlig ikke hvordan) administrere servere, og enda mer, betale for tiden de ikke er lastet. En annen ting er funksjoner. Noen betjener dem uten meg, og jeg betaler kun for samtaler. I begynnelsen av oktober 2019 presenterte Yandex sin Yandex Cloud-funksjoner - ser ut til å være den første i den russiske føderasjonen server. Og det som er spesielt hyggelig er at for Alices ferdigheter er de generelt frie, så de har vært i mitt perifere syn siden den gang. Men la oss komme i gang allerede.
La oss forestille oss dette scenariet. Søknaden din (for eksempel Alices ferdigheter
Om hvordan fra Yandex-funksjoner gjøre oppføringer i databasen Cloud Firestore vi har allerede sett på det i opplæringen
1. Opprett en konto i SendGrid
NoteSendGrid er bare mitt valg, som jeg tok av flere grunner, den viktigste er at de har en ferdig SDK for Node.js. Du kan velge hvilken som helst annen posttjeneste.
La oss gå videre
I neste trinn velger vi node.js:
Neste kommer vi med for vår API-nøkkelnavn (vil bare vises i konsollen i listen over nøkler, og har ingenting å gjøre med vår fremtidige kode; jeg kom nettopp opp med en uforgjengelig demo-api-nøkkel) og trykk på knappen Opprett nøkkel:
Nøkkelen vil bli generert, vi vil kopiere den og oppbevare den i den dypeste tillit. Og vi vil ha en skjerm med en knapp Bekreft integrasjon, som på bildet nedenfor, men vi vil ikke klikke på det ennå, men la oss gå videre til å skrive koden:
2. Skrive kode
Men selve koden, som du kan se, er latterlig liten - 22 linjer!
På linje #8 E-posten min er hardkodet (og derfor sjenert skjult) - vennligst angi din. I det virkelige liv vil vi motta alle dataene (inkludert emalje) fra objektet hendelse. For eksempel hvis metoden POST et objekt sendes til vår funksjon bruker med felt (eiendom) emalje, kan verdien av dette feltet fås slik:
const { user } = event;
const email = user.email;
Og hvis e-postadressen sendes til funksjonen ved hjelp av metoden GET, for eksempel: https://functions.yandexcloud.net/123abc?[email protected]
parameterverdi emalje du kan få det slik:
const email = event.queryStringParameters.email;
For å ta en titt på nøyaktig hva som er inneholdt i et objekt hendelse, kan du lage den enkleste Yandex funksjon og vri det med spørsmål:
module.exports.handler = async function (event) {
return {
'statusCode': 200,
'body': JSON.stringify(event)
};
};
Dette er omtalt mer detaljert (men mindre tydelig) i den offisielle dokumentasjonen
Så lag en prosjektkatalog (for eksempel utsendelser), gå til den, initialiser prosjektet, installer avhengigheter:
mkdir mailer
cd mailer
npm init -y
npm i @sendgrid/mail email-validator dotenv
Her kreves kun pakken @sendgrid/mail. Plastpose e-postvalidator sjekker e-postadressen for gyldighet (hvordan gjettet jeg ikke med en gang?), men hvis vi er sikre på den (den har allerede blitt sjekket lenge uten oss), trenger vi ikke å installere den (og vi trenger selvfølgelig ikke sjekke det i koden). Plastpose dotenv designet for å lese poster fra en fil .og V som kjøretidsvariabler. Men i Yandex-funksjoner Det er mulig å plassere disse variablene direkte inn i kjøretidsmiljøet. Hvordan? - Jeg viser det nedenfor. Derfor pakken dotenv du kan heller ikke installere den og filen .og V - ikke opprett, og samtidig er koden i filen index.js ikke forandre. Men her har vi installert denne pakken, så vi lager filer index.js и .og V:
touch index.js
touch .env
I fil index.js skriv 22 linjer med kode vist i skjermbildet ovenfor (bare i linjen #8 endre e-posten din), og i filen .og V - (uten anførselstegn eller tegnsetting) spesifiser paret - nøkkelnavn/verdi APIsom vi nylig mottok i konsollen SendGrid:
SENDGRID_API_KEY=din-veldig-hemmelige-sendgrid-api-nøkkelen
Og hvis du vil ha mindre arbeid, klon depotet og installer pakkene:
git clone https://github.com/stmike/ycf-sendgrid-mailer-tutorial.git
cd ycf-sendgrid-mailer-tutorial
npm i
I fil index.js, på linje #8 Endre e-post; opprette en fil i rotkatalogen .og V, og angi navnet/verdien til nøkkelen i den API, som vist rett ovenfor.
3. Distribuer
Mer eller mindre tydelig og detaljert om Yandex.Cloud og hvordan du plasserer den der Yandex-funksjoner beskrevet i artikkelen min
Vi skaper zip-arkiv (la oss kalle det, for eksempel, mailer.zip), der vi inkluderer katalogen node_modules og filer .env, index.js - alt fra vår prosjektkatalog:
Vi lager en funksjon med navnet... riktig - utsendelser, i venstre navigasjonsmeny går vi inn Redaktøren, fyll ut de obligatoriske feltene og bytt til fanen ZIP-arkiv last ned arkivet vårt mailer.zip:
Og her er det tidligere nevnte alternativet for å laste ned API-nøkkel direkte her, i stedet for å opprette en fil i prosjektet .og V, og ikke installer pakken dotenv. Men vi har allerede gjort alt dette, så jeg viser det bare for informasjon. Det vil si at det ikke er nødvendig å duplisere!
Klikk nå på knappen i øvre høyre hjørne Opprett versjon, og vent et par sekunder. Når alt er klart, går vi automatisk til seksjonen Gjennomgå. Der vil vi aktivere alternativet offentlig funksjonslik at du kan samhandle med den fra omverdenen.
Du ser den blå lenken på motsatt side av inskripsjonen Link til samtale? Trykk på det. Et tomt nettleservindu åpnes... Men vent - jeg har mottatt en e-post:
Nå kan du gå tilbake til konsollen SendGrid, og trykk på knappen Bekreft integrasjon. Systemet vil sjekke alt gjennom sine kanaler, og som et resultat bør det returnere en skjerm som dette:
Det er det, gutter (og jenter, selvfølgelig) - alt er egentlig veldig enkelt og elegant! Det kommer flere artikler. Hvis noen er interessert i å lese noe slikt, abonner så du ikke går glipp av noe.
4. Donasjoner
Kilde: www.habr.com