Hari ini kita akan mencipta apa yang dipanggil. Fungsi Yandex (nama rasmi
Saya juga seorang lawan (tetapi tanpa fanatik) pelayan tradisional, dan penyokong apa yang dipanggil. tanpa pelayan penyelesaian (tanpa pelayan), kerana saya tidak suka (dan saya tidak begitu tahu cara) mentadbir pelayan, dan lebih-lebih lagi, bayar untuk masa apabila ia tidak dimuatkan. Perkara lain ialah fungsi. Seseorang melayan mereka tanpa saya, dan saya hanya membayar untuk panggilan. Pada awal Oktober 2019, Yandex membentangkannya Fungsi Awan Yandex - nampaknya yang pertama di Persekutuan Rusia tanpa pelayan. Dan apa yang menariknya ialah untuk kemahiran Alice mereka secara amnya bebas, jadi mereka telah berada dalam penglihatan persisian saya sejak itu. Tetapi mari kita mulakan sudah.
Mari bayangkan senario ini. Aplikasi anda (contohnya, kemahiran Alice
Tentang bagaimana dari Fungsi Yandex membuat entri dalam pangkalan data Cloud Firestore kami sudah melihatnya dalam tutorial
1. Buat akaun dalam SendGrid
NotaSendGrid hanyalah pilihan saya, yang saya buat atas beberapa sebab, yang utama ialah mereka mempunyai SDK siap pakai untuk Node.js. Anda boleh memilih mana-mana perkhidmatan mel lain.
Jom teruskan
Dalam langkah seterusnya kita pilih Node.js:
Seterusnya kami datang dengan untuk kami API-nama kunci (hanya akan dipaparkan dalam konsol dalam senarai kunci, dan tiada kaitan dengan kod masa depan kami; Saya baru sahaja menghasilkan kod yang tidak boleh rosak kunci-demo-api) dan tekan butang Cipta Kunci:
Kunci akan dijana, kami akan menyalinnya dan menyimpannya dalam keyakinan yang paling dalam. Dan kami akan mempunyai skrin dengan butang Sahkan Integrasi, seperti dalam gambar di bawah, tetapi kami tidak akan mengkliknya lagi, tetapi mari teruskan menulis kod:
2. Menulis kod
Tetapi kod itu sendiri, seperti yang anda lihat, adalah sangat kecil - 22 baris!
Dalam barisan #8 E-mel saya dikod keras (dan oleh itu disembunyikan dengan malu) - sila nyatakan e-mel anda. Dalam kehidupan sebenar, kami akan menerima semua data (termasuk e-mel) daripada objek kategori acara. Sebagai contoh, jika kaedah SELEPAS objek dihantar ke fungsi kita pengguna dengan bidang (harta benda) e-mel, nilai medan ini boleh diperolehi seperti ini:
const { user } = event;
const email = user.email;
Dan jika alamat e-mel dihantar ke fungsi menggunakan kaedah GET, sebagai contoh: https://functions.yandexcloud.net/123abc?[email protected]
nilai parameter e-mel anda boleh mendapatkannya seperti ini:
const email = event.queryStringParameters.email;
Untuk melihat apa sebenarnya yang terkandung dalam objek kategori acara, anda boleh membuat yang paling mudah Fungsi Yandex dan putarkannya dengan pertanyaan:
module.exports.handler = async function (event) {
return {
'statusCode': 200,
'body': JSON.stringify(event)
};
};
Ini dibincangkan dengan lebih terperinci (tetapi kurang jelas) dalam dokumentasi rasmi
Jadi, buat direktori projek (contohnya, pengirim surat), pergi ke sana, mulakan projek, pasang dependencies:
mkdir mailer
cd mailer
npm init -y
npm i @sendgrid/mail email-validator dotenv
Di sini hanya pakej yang diperlukan @sendgrid/mel. Beg plastik pengesah e-mel menyemak alamat e-mel untuk kesahihan (bagaimana saya tidak meneka dengan segera?), tetapi jika kami pasti (ia telah disemak untuk masa yang lama tanpa kami), kami tidak perlu memasangnya (dan, daripada sudah tentu, kami tidak perlu menyemaknya dalam kod). Beg plastik dotenv direka untuk membaca rekod daripada fail .env sebagai pembolehubah masa jalan. Tetapi dalam Fungsi Yandex Adalah mungkin untuk meletakkan pembolehubah ini terus ke dalam persekitaran masa jalan. Bagaimana? - Saya akan tunjukkan di bawah. Oleh itu pakej dotenv anda juga tidak boleh memasangnya, dan fail .env - jangan buat, dan pada masa yang sama kod berada dalam fail indeks.js jangan berubah. Tetapi di sini kami telah memasang pakej ini, jadi kami mencipta fail indeks.js ΠΈ .env:
touch index.js
touch .env
Dalam fail indeks.js tulis 22 baris kod yang ditunjukkan dalam tangkapan skrin di atas (hanya dalam baris #8 tukar e-mel anda), dan dalam fail .env - (tanpa sebarang petikan atau tanda baca) nyatakan pasangan - nama/nilai kunci APIyang baru-baru ini kami terima dalam konsol SendGrid:
SENDGRID_API_KEY=kunci-sendgrid-api-anda-sangat-rahsia
Dan jika anda mahu kurang kerja, klon repositori dan pasang pakej:
git clone https://github.com/stmike/ycf-sendgrid-mailer-tutorial.git
cd ycf-sendgrid-mailer-tutorial
npm i
Dalam fail indeks.js, dalam barisan #8 tukar emel; buat fail dalam direktori root .env, dan di dalamnya menunjukkan nama/nilai kunci API, seperti yang ditunjukkan di atas.
3. Sebarkan
Lebih kurang jelas dan terperinci tentang Yandex.Cloud dan bagaimana untuk meletakkannya di sana Fungsi Yandex diterangkan dalam artikel saya
Kami cipta zip-archive (mari kita panggil, sebagai contoh, mailer.zip), di mana kami memasukkan direktori simpul_modul dan fail .env, index.js - segala-galanya daripada katalog projek kami:
Kami mencipta fungsi dengan nama... dengan betul - pengirim surat, dalam menu navigasi kiri kita masukkan Penyuntingnya, isikan medan yang diperlukan dan tukar ke tab ZIP arkib muat turun arkib kami mailer.zip:
Dan inilah pilihan yang disebutkan sebelum ini untuk memuat turun kunci API terus di sini, dan bukannya mencipta fail dalam projek .env, dan jangan pasang pakej dotenv. Tetapi kami telah melakukan semua ini, jadi saya menunjukkannya hanya untuk maklumat. Maksudnya, tak perlu buat pendua!
Sekarang di penjuru kanan sebelah atas klik butang Cipta Versi, dan tunggu beberapa saat. Apabila semuanya sudah siap, secara automatik kami akan pergi ke bahagian Mengkaji. Di sana kami akan membolehkan pilihan fungsi awamsupaya anda boleh berinteraksi dengannya dari dunia luar.
Anda melihat pautan biru bertentangan dengan tulisan itu Pautan ke panggilan? Klik ia. Tetingkap penyemak imbas kosong akan dibuka... Tetapi tunggu - saya menerima e-mel:
Kini anda boleh kembali ke konsol SendGrid, dan tekan butang Sahkan Integrasi. Sistem akan menyemak segala-galanya melalui salurannya, dan akibatnya ia akan mengembalikan skrin seperti ini:
Itu sahaja, lelaki (dan perempuan, sudah tentu) - semuanya sangat mudah dan elegan! Akan ada lebih banyak artikel. Jika ada yang berminat untuk membaca sesuatu seperti ini, langganlah supaya anda tidak ketinggalan.
4. Derma
Sumber: www.habr.com