Bagaimana Memulai Dengan Fungsi Tanpa Server DigitalOcean

  • Post author:
  • Post category:Tutorial

Functions adalah salah satu tambahan terbaru untuk platform cloud DigitalOcean. Ini menyediakan metode kelas satu untuk mengembangkan fungsi tanpa server tanpa meninggalkan DigitalOcean. Kode Anda dijalankan sesuai permintaan saat dipanggil, menghilangkan penyediaan dan pemeliharaan server manual.

Dalam artikel ini kami akan menjelaskan apa yang didukung oleh DigitalOcean Functions dan memandu demonstrasi pembuatan fungsi sederhana Anda sendiri. Functions memiliki tingkat gratis yang menyediakan 25 GiB-jam per bulan, dengan GiB-detik dihitung sebagai konsumsi memori dikalikan dengan waktu eksekusi setiap panggilan fungsi.

Fitur yang Didukung

Diluncurkan pada Mei 2022, Functions memberi pelanggan DigitalOcean opsi bawaan untuk menjalankan beban kerja tanpa server. Setiap fungsi mendapatkan titik akhir API sendiri yang menjalankan kode yang Anda buat. Anda tidak perlu menyiapkan server Anda sendiri atau menyimpan proyek sebelum penerapan. Fungsi langsung dihosting oleh backend Platform Aplikasi DigitalOcean.

Functions dapat berintegrasi dengan Database Terkelola DigitalOcean untuk memfasilitasi penyimpanan data yang persisten. Mereka juga dilengkapi dengan CLI komprehensif yang memungkinkan Anda menerapkan dan menguji kode Anda di terminal.

Versi awal platform mendukung lima lingkungan pemrograman yang berbeda:

  • Go 1.17
  • Node.js 14
  • Node.js 14 (kompatibel dengan fungsi AWS Lambda)
  • PHP 8
  • Python 3.9

Anda harus terbiasa menulis kode dalam salah satu bahasa ini untuk menerapkannya sebagai sebuah fungsi. Lebih banyak runtime dapat didukung di masa mendatang.

Menyiapkan

Anda dapat meluncurkan fungsi baru menggunakan panel kontrol web DigitalOcean atau Doctl, CLI berorientasi pengembangnya. Kami berfokus pada pendekatan Doctl berbasis terminal untuk tujuan artikel ini. Ini memperlihatkan semua kemampuan Fungsi dan merupakan jalur yang dimaksudkan untuk semua kecuali kasus penggunaan yang paling sederhana. Pastikan Anda telah menginstal Doctl versi terbaru dan diautentikasi ke akun DigitalOcean Anda sebelum melanjutkan.

Anda harus menyelesaikan beberapa langkah penyiapan lebih lanjut jika ini adalah pertama kalinya Anda menggunakan Fungsi DigitalOcean. Pertama selesaikan instalasi ekstensi tanpa server Doctl. Ini menambahkan dukungan penuh untuk mengembangkan dan menerapkan fungsi.

$ doctl install

tanpa server Mengunduh…Membongkar…Menginstal…Membersihkan… Done

Selanjutnya sambungkan fitur tanpa server ke akun DigitalOcean Anda:

$ doctl serverless connect

Terhubung ke fungsi namespace `fn-3c1d9001-8e04-44e8-9375-c22b13c4a41a` pada host API `https://faas-lon1-917a94a7.doserverless.co`

Sekarang Anda harus siap untuk mulai menulis fungsi. Jalankan perintah status tanpa server untuk memeriksa semuanya berfungsi:

$ doctl status

tanpa server Terhubung ke ruang nama fungsi `fn-3c1d9001-8e04-44e8-9375-c22b13c4a41a` pada host API `https://faas-lon1-917a94a7.doserverless.co` Versi Sandbox adalah 3.1.1-1.2.1

Keluaran yang ditunjukkan di atas mengonfirmasi bahwa dukungan Fungsi telah diinstal dan siap digunakan.

Perintah tanpa server adalah alias kotak pasir. Pada saat penulisan, kedua kata kunci tersebut memiliki fungsi yang identik dan digunakan secara bergantian di seluruh dokumentasi DigitalOcean. Kami melakukan standarisasi tanpa server untuk panduan ini.

Membuat Fungsi

Gunakan perintah berikut untuk membuat proyek Fungsi baru:

$ doctl serverless init --language js demo-project

Area kotak pasir lokal `demo-project` telah dibuat untuk Anda. Anda dapat menerapkannya dengan menjalankan perintah yang ditunjukkan pada baris berikutnya: doctl sandbox deploy demo-project

Perintah ini membuat fungsi JavaScript baru dalam demo-project di direktori kerja Anda. Periksa isi direktori ini untuk melihat perancah Doctl untuk Anda:

$ tree demo-project

demo-project package sample hello hello.js project. yml 3 direktori, 2 files

File project.yml adalah tempat Anda mengonfigurasi proyek fungsi dan titik akhir yang disediakannya.

targetNamespace: “ parameter: {} package: – name: sample environment: {} parameter: {} annotations: {} actions : – name: hello binary: false main: “ runtime: `nodejs:default` web: parameter true: {} environment: {} annotations: {}limits: {}

Template starter mengonfigurasi satu paket yang disebut sample. Di dalam paket ini, ada satu tindakan (endpoint) bernama hello yang dieksekusi menggunakan runtime Node. Kode sumber untuk tindakan ini disimpan di package/sample/hello/hello.js. Mari kita lihat file ini selanjutnya:

function main(args){ let name = args.name||`stranger` let greeting =`Hello `+ name +`!` console.log(greeting)return{“body”: greeting} }

Ini adalah kode JavaScript biasa. Fungsi main() akan dipanggil setiap kali fungsi Anda dipanggil. Ini menerima objek yang berisi argumen yang dikirimkan sebagai data HTTP GET dan POST dalam permintaan pengguna. Anda juga dapat mengonfigurasi argumen statis, menggunakan bidang parameter pada tindakan, paket, dan proyek tingkat atas di file project.yml Anda.

Functions perlu mengembalikan objek yang menjelaskan respons HTTP terhadap masalah. Bidang isi menjadi data yang disertakan dalam response.

Invoking and Deploying Functions

Proyek ini siap dijalankan. Gunakan perintah ini untuk menerapkan function:

$ doctl serverless deploy Anda. Menerapkan `/home/james/@scratch/demo-project` ke namespace `fn-3c1d9001-8e04-44e8-9375-c22b13c4a41a` pada host `https://faas-lon1-917a94a7.doserverless.co` Status penerapan dicatat di `.nimbella` Deployed functions (`doctl sbx fn get –url` untuk URL): – sample/hello

Perintah serverless deploy mengambil satu argumen, jalur ke direktori yang berisi fungsi Anda. Menggunakan . ketika root proyek Anda sudah menjadi direktori kerja Anda.

Sekarang Anda dapat menguji fungsi Anda menggunakan fungsi tanpa server doct CLI:

$ memanggil sample/hello -p name:howtogeek { “body”: “Hello howtogeek!” }

Parameter -p menetapkan argumen yang diteruskan ke kode Anda. Contoh ini menunjukkan bagaimana nilai kembalian fungsi Anda menjadi badan respons HTTP.

Selanjutnya coba buat permintaan API nyata ke fungsi Anda. Anda dapat menemukan URL-nya dengan perintah berikut:

$ URL=$(doctl fungsi serverless get sample/hello –url)

Gunakan curl atau klien HTTP favorit Anda untuk mencapai titik akhir ini:

$ curl $URL?name=howtogeek Halo howtogeek!

Parameter string kueri nama telah berhasil diteruskan ke fungsi.

Memodifikasi Fungsi Anda

Sejauh ini kami menggunakan kode sampel DigitalOcean tanpa modifikasi apa pun. Ini tidak akan membawa Anda jauh dalam perjalanan tanpa server Anda! Edit file hello.js Anda sehingga terlihat seperti ini:

function main(args){return{ body:{ value:(args.value*2), timestamp:Date.now()}, headers:{“Content-Type” :”application/json”}};}

Re-deploy fungsi Anda:

$ doctl serverless deploy .

Fungsi ini secara naif menggandakan angka yang diberikan oleh parameter permintaan nilai. Ini juga mencakup stempel waktu dengan setiap badan respons. Bidang header digunakan dalam objek respons untuk menerapkan JSON Content-Type.

Anda dapat memanggil fungsi ini menggunakan Doctl atau curl dengan gaya yang sama seperti sebelumnya:

$ curl $URL?value=2 { “timestamp”: 1654784122966, “value”: 4 }

Secara manual menerapkan kembali fungsi Anda setelah setiap perubahan membosankan dan memakan waktu. Jalankan perintah watch saat Anda bekerja untuk menerapkan perubahan secara otomatis setelah Anda memodifikasi file Anda:

$ doctl serverless watch . Menonton `.` [gunakan Control-C untuk mengakhiri]

Biarkan jendela terminal tetap terbuka saat Anda mengembangkan fungsi Anda. Setiap penerapan baru akan mencatat pesan sehingga Anda tahu kapan Anda dapat menguji perubahan Anda. Ini memfasilitasi iterasi yang efisien saat Anda mengembangkan fungsi.

Anda juga dapat mengalirkan log dari fungsi Anda. Ini sangat berharga ketika suatu fungsi mogok atau tidak berperilaku seperti yang Anda harapkan. Jalankan perintah ini untuk mengakses log yang terkait dengan fungsi demo Anda:

$ doct log aktivasi tanpa server –follow –function sample/hello

Baris baru akan dicetak setiap kali Anda memanggil fungsi Anda. Log juga menyertakan pesan yang dipancarkan kode Anda ke output standar dan aliran kesalahan lingkungan.

Menyebarkan ke Produksi

Perintah penerapan tanpa server saat ini dirancang hanya untuk penggunaan pengembangan. Anda dapat menyebarkan ke produksi dengan membuat repositori Git untuk proyek Fungsi Anda dan meluncurkannya menggunakan Platform Aplikasi DigitalOcean.

Buat proyek baru di GitHub atau GitLab dan dorong kode Anda:

$ git init $ git remote add origin [email protected] :user/repo.git $ git tambahkan . $ git commit -m “initial commit” $ git push -u origin master

Selanjutnya buka panel kontrol DigitalOcean Anda dan klik tautan “Aplikasi” di bilah sisi kiri. Klik tombol “Buat Aplikasi” yang muncul. Pada layar berikutnya, ikuti petunjuk untuk terhubung ke akun GitHub Anda dan pilih repositori baru Anda. Tekan tombol biru “Berikutnya”.

DigitalOcean akan secara otomatis mendeteksi repositori Anda sebagai proyek Fungsi jika Anda memiliki project.yml di root-nya. Klik tombol “Lewati untuk Meninjau” untuk melanjutkan.

Layar berikutnya akan mengonfirmasi bahwa Anda akan ditagih menggunakan rencana Fungsi.

Tekan “Buat Sumber Daya” untuk menyediakan aplikasi Anda dan memulai penerapan pertamanya. Kemajuan akan ditampilkan di dasbor.

Endpoint fungsi Anda akan dapat diakses publik setelah penerapan selesai. Anda dapat menemukan domain default ondigitalocean.app aplikasi Anda dengan menggulir ke bawah halaman Pengaturan Aplikasi di dasbor Anda. Dalam contoh kami, domain aplikasi adalah sea-lion-app.7ougx.ondigitalocean.app.

Functions secara otomatis diekspos sebagai URI yang memiliki format berikut:

.ondigitalocean.app//

Anda dapat memanggil fungsi sampel yang dibuat sebelumnya dengan membuat permintaan berikut:

$ curl https://sea-lion-app.7ougx.ondigitalocean.app/sample/hello?value=2 { “timestamp”: 1654786505969, “value”: 4 }

Fungsi telah berhasil digunakan! Anda sekarang dapat menggunakan tab Domains di pengaturan aplikasi Anda untuk melampirkan domain kustom alih-alih domain default.

Summary

DigitalOcean Functions adalah pesaing terbaru di arena fungsi tanpa server yang semakin ramai. Platform ini memungkinkan Anda mengembangkan fungsionalitas sisi server tanpa mengelola VM atau menyimpan kode secara manual.

Functions menyediakan CLI komprehensif untuk membangun dan menguji titik akhir Anda. Anda kemudian dapat menerapkan fungsi Anda ke solusi Platform Aplikasi DigitalOcean yang ada, baik sebagai proyek mandiri atau sebagai bagian dari aplikasi yang lebih besar. Anda dapat mengatur variabel lingkungan, beberapa tindakan, dan batas sumber daya menggunakan bidang dalam file project.yml Anda, memberi Anda rute cepat dan mudah untuk membangun endpoints.

sesuai permintaan yang relatif kompleks

Itulah berita seputar Bagaimana Memulai Dengan Fungsi Tanpa Server DigitalOcean, semoga bermanfaat. Disadur dari HowToGeek.com.