Memanggil Lambda dengan API Gateway - AWS SDK for JavaScript

Panduan API Referensi AWS SDK for JavaScript V3 menjelaskan secara rinci semua API operasi untuk AWS SDK for JavaScript versi 3 (V3).

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Memanggil Lambda dengan API Gateway

Anda dapat menjalankan fungsi Lambda dengan menggunakan Amazon API Gateway, yang AWS merupakan layanan untuk membuat, menerbitkan, memelihara, memantau, dan mengamankan REST, HTTP, WebSocket dan API dalam skala besar. Pengembang API dapat membuat API yang mengakses AWS atau layanan web lainnya, serta data yang disimpan di dalam AWS Cloud. Sebagai pengembang API Gateway, Anda dapat membuat API untuk digunakan dalam aplikasi klien Anda sendiri. Untuk informasi selengkapnya, lihat Apa itu Amazon API Gateway.

AWS Lambdaadalah layanan komputasi yang memungkinkan Anda menjalankan kode tanpa menyediakan atau mengelola server. Anda dapat membuat fungsi Lambda dalam berbagai bahasa pemrograman. Untuk informasi selengkapnya tentang AWS Lambda, lihat Apa itu AWS Lambda.

Dalam contoh ini, Anda membuat fungsi Lambda menggunakan API runtime JavaScript Lambda. Contoh ini memanggil AWS layanan yang berbeda untuk melakukan kasus penggunaan tertentu. Misalnya, asumsikan bahwa organisasi mengirim pesan teks seluler kepada karyawannya yang memberi selamat kepada mereka pada tanggal ulang tahun satu tahun, seperti yang ditunjukkan dalam ilustrasi ini.

Tabel DynamoDB

Contoh harus memakan waktu sekitar 20 menit untuk menyelesaikannya.

Contoh ini menunjukkan cara menggunakan JavaScript logika untuk membuat solusi yang melakukan kasus penggunaan ini. Misalnya, Anda akan mempelajari cara membaca database untuk menentukan karyawan mana yang telah mencapai tanggal ulang tahun satu tahun, cara memproses data, dan mengirim pesan teks semuanya dengan menggunakan fungsi Lambda. Kemudian Anda akan belajar cara menggunakan API Gateway untuk menjalankan AWS Lambda fungsi ini dengan menggunakan endpoint Istirahat. Misalnya, Anda dapat menjalankan fungsi Lambda dengan menggunakan perintah curl ini:

curl -XGET "https://xxxxqjko1o3.execute-api.us-east-1.amazonaws.com/cronstage/employee"

AWSTutorial ini menggunakan tabel Amazon DynamoDB bernama Employee yang berisi bidang-bidang ini.

  • id - kunci utama untuk tabel.

  • FirstName - nama depan karyawan.

  • telepon - nomor telepon karyawan.

  • StartDate - tanggal mulai karyawan.

Tabel DynamoDB
penting

Biaya untuk menyelesaikan: AWS Layanan yang termasuk dalam dokumen ini termasuk dalam Tingkat AWS Gratis. Namun, pastikan untuk menghentikan semua sumber daya setelah Anda menyelesaikan contoh ini untuk memastikan bahwa Anda tidak dikenakan biaya.

Tugas prasyarat

Untuk mengatur dan menjalankan contoh ini, Anda harus terlebih dahulu menyelesaikan tugas-tugas ini:

  • Siapkan lingkungan proyek untuk menjalankan TypeScript contoh Node ini, dan instal modul yang diperlukan AWS SDK for JavaScript dan pihak ketiga. Ikuti instruksi pada GitHub.

  • Buat file konfigurasi bersama dengan kredensi pengguna Anda. Untuk informasi selengkapnya tentang menyediakan file kredensial bersama, lihat File konfigurasi dan kredensial bersama di Panduan Referensi AWSSDK dan Alat.

Buat sumber AWS daya

Tutorial ini membutuhkan sumber daya berikut:

  • Tabel Amazon DynamoDB Employee bernama dengan kunci Id bernama dan bidang yang ditunjukkan pada ilustrasi sebelumnya. Pastikan Anda memasukkan data yang benar, termasuk ponsel yang valid yang ingin Anda uji kasus penggunaan ini. Untuk informasi selengkapnya, lihat Membuat Tabel.

  • Peran IAM dengan izin terlampir untuk menjalankan fungsi Lambda.

  • Bucket Amazon S3 untuk menampung fungsi Lambda.

Anda dapat membuat sumber daya ini secara manual, tetapi kami merekomendasikan penyediaan sumber daya ini menggunakan AWS CloudFormation seperti yang dijelaskan dalam tutorial ini.

Buat sumber AWS daya menggunakan AWS CloudFormation

AWS CloudFormationmemungkinkan Anda untuk membuat dan menyediakan penyebaran AWS infrastruktur yang dapat diprediksi dan berulang kali. Untuk informasi selengkapnya tentang AWS CloudFormation, lihat AWS CloudFormationPanduan Pengguna .

Untuk membuat AWS CloudFormation tumpukan menggunakanAWS CLI:

  1. Instal dan konfigurasikan petunjuk AWS CLI berikut di Panduan AWS CLI Pengguna.

  2. Buat file bernama setup.yaml di direktori root folder proyek Anda, dan salin konten di sini GitHub ke dalamnya.

    catatan

    AWS CloudFormationTemplate dibuat menggunakan yang AWS CDK tersedia di sini GitHub. Untuk informasi selengkapnya tentang AWS CDK, lihat Panduan Developer AWS Cloud Development Kit (AWS CDK).

  3. Jalankan perintah berikut dari baris perintah, ganti STACK_NAME dengan nama unik untuk tumpukan.

    penting

    Nama tumpukan harus unik dalam AWS Wilayah dan AWS akun. Anda dapat menentukan hingga 128 karakter, dan angka serta tanda hubung diizinkan.

    aws cloudformation create-stack --stack-name STACK_NAME --template-body file://setup.yaml --capabilities CAPABILITY_IAM

    Untuk informasi selengkapnya tentang parameter create-stack perintah, lihat panduan Referensi AWS CLI Perintah, dan Panduan AWS CloudFormation Pengguna.

  4. Selanjutnya, isi tabel dengan mengikuti prosedurMengisi tabel.

Mengisi tabel

Untuk mengisi tabel, pertama membuat direktori bernamalibs, dan di dalamnya membuat file bernamadynamoClient.js, dan paste konten di bawah ini ke dalamnya.

const { DynamoDBClient } = require ( "@aws-sdk/client-dynamodb" ); // Set the AWS Region. const REGION = "REGION"; // e.g. "us-east-1" // Create an Amazon Lambda service client object. const dynamoClient = new DynamoDBClient({region:REGION}); module.exports = { dynamoClient };

Kode ini tersedia di sini GitHub.

Selanjutnya, buat file bernama populate-table.js di direktori root folder proyek Anda, dan salin konten di sini GitHub ke dalamnya. Untuk salah satu item, ganti nilai phone properti dengan nomor ponsel yang valid dalam format E.164, dan nilai untuk startDate dengan tanggal hari ini.

Jalankan perintah berikut dari baris perintah.

node populate-table.js
const { BatchWriteItemCommand } = require ( "aws-sdk/client-dynamodb" ); const {dynamoClient} = require ( "./libs/dynamoClient" ); // Set the parameters. export const params = { RequestItems: { Employees: [ { PutRequest: { Item: { id: { N: "1" }, firstName: { S: "Bob" }, phone: { N: "155555555555654" }, startDate: { S: "2019-12-20" }, }, }, }, { PutRequest: { Item: { id: { N: "2" }, firstName: { S: "Xing" }, phone: { N: "155555555555653" }, startDate: { S: "2019-12-17" }, }, }, }, { PutRequest: { Item: { id: { N: "55" }, firstName: { S: "Harriette" }, phone: { N: "155555555555652" }, startDate: { S: "2019-12-19" }, }, }, }, ], }, }; export const run = async () => { try { const data = await dbclient.send(new BatchWriteItemCommand(params)); console.log("Success", data); } catch (err) { console.log("Error", err); } }; run();

Kode ini tersedia di sini GitHub.

Membuat AWS Lambda fungsi

Mengkonfigurasi SDK

Di libs direktori, buat file bernama snsClient.js danlambdaClient.js, dan tempelkan konten di bawah ini ke dalam file-file ini, masing-masing.

const { SNSClient } = require ( "@aws-sdk/client-sns" ); // Set the AWS Region. const REGION = "REGION"; //e.g. "us-east-1" // Create an Amazon SNS service client object. const snsClient = new SNSClient({ region: REGION }); module.exports = { snsClient };

Ganti REGION dengan AWS Region. Kode ini tersedia di sini GitHub.

const { LambdaClient } = require ( "@aws-sdk/client-lambda" ); // Set the AWS Region. const REGION = "REGION"; //e.g. "us-east-1" // Create an Amazon Lambda service client object. const lambdaClient = new LambdaClient({ region: REGION }); module.exports = { lambdaClient };

Ganti REGION dengan AWS Region. Kode ini tersedia di sini GitHub.

Pertama, impor modul dan perintah yang diperlukan AWS SDK for JavaScript (v3). Kemudian hitung tanggal hari ini dan tetapkan ke parameter. Ketiga, buat parameter untukScanCommand. Ganti TABLE_NAME dengan nama tabel yang Anda buat di Buat sumber AWS daya bagian contoh ini.

Cuplikan kode berikut menunjukkan langkah ini. (Lihat Bundling fungsi Lambda contoh lengkapnya.)

"use strict"; const { ScanCommand } = require("@aws-sdk/client-dynamodb"); const { PublishCommand } = require("@aws-sdk/client-sns"); const {snsClient} = require ( "./libs/snsClient" ); const {dynamoClient} = require ( "./libs/dynamoClient" ); // Get today's date. const today = new Date(); const dd = String(today.getDate()).padStart(2, "0"); const mm = String(today.getMonth() + 1).padStart(2, "0"); //January is 0! const yyyy = today.getFullYear(); const date = yyyy + "-" + mm + "-" + dd; // Set the parameters for the ScanCommand method. const params = { // Specify which items in the results are returned. FilterExpression: "startDate = :topic", // Define the expression attribute value, which are substitutes for the values you want to compare. ExpressionAttributeValues: { ":topic": { S: date }, }, // Set the projection expression, which are the attributes that you want. ProjectionExpression: "firstName, phone", TableName: "Employees", };

Memindai tabel DynamoDB

Pertama, buat fungsi async/await yang dipanggil sendText untuk mempublikasikan pesan teks menggunakan Amazon SNS. PublishCommand Kemudian, tambahkan pola try blok yang memindai tabel DynamoDB untuk karyawan dengan ulang tahun kerja mereka hari ini, dan kemudian memanggil fungsi untuk mengirim pesan sendText teks kepada karyawan ini. Jika terjadi kesalahan, catch blok dipanggil.

Cuplikan kode berikut menunjukkan langkah ini. (Lihat Bundling fungsi Lambda contoh lengkapnya.)

// Helper function to send message using Amazon SNS. exports.handler = async () => { // Helper function to send message using Amazon SNS. async function sendText(textParams) { try { await snsClient.send(new PublishCommand(textParams)); console.log("Message sent"); } catch (err) { console.log("Error, message not sent ", err); } } try { // Scan the table to identify employees with work anniversary today. const data = await dynamoClient.send(new ScanCommand(params)); data.Items.forEach(function (element) { const textParams = { PhoneNumber: element.phone.N, Message: "Hi " + element.firstName.S + "; congratulations on your work anniversary!", }; // Send message using Amazon SNS. sendText(textParams); }); } catch (err) { console.log("Error, could not scan table ", err); } };

Bundling fungsi Lambda

Topik ini menjelaskan cara menggabungkan mylambdafunction.ts dan AWS SDK for JavaScript modul yang diperlukan untuk contoh ini ke dalam file yang dibundel yang disebutindex.js.

  1. Jika Anda belum melakukannya, ikuti contoh ini Tugas prasyarat untuk menginstal webpack.

    catatan

    Untuk informasi tentang webpack, lihatBundel aplikasi dengan webpack.

  2. Jalankan yang berikut ini di baris perintah JavaScript untuk menggabungkan contoh ini ke dalam file bernama<index.js>:

    webpack mylambdafunction.ts --mode development --target node --devtool false --output-library-target umd -o index.js
    penting

    Perhatikan output diberi namaindex.js. Ini karena fungsi Lambda harus memiliki index.js handler untuk bekerja.

  3. Kompres file output yang dibundel,index.js, ke dalam file ZIP bernamamylambdafunction.zip.

  4. Unggah mylambdafunction.zip ke bucket Amazon S3 yang Anda buat dalam Buat sumber AWS daya topik tutorial ini.

Deploy fungsi Lambda

Di root proyek Anda, buat lambda-function-setup.ts file, dan tempel konten di bawah ini ke dalamnya.

Ganti BUCKET_NAME dengan nama bucket Amazon S3 tempat Anda mengunggah versi ZIP fungsi Lambda Anda. Ganti ZIP_FILE_NAME dengan nama nama versi ZIP dari fungsi Lambda Anda. Ganti ROLE dengan Amazon Resource Number (ARN) dari peran IAM yang Anda buat dalam Buat sumber AWS daya topik tutorial ini. Ganti LAMBDA_FUNCTION_NAME dengan nama untuk fungsi Lambda.

// Load the required Lambda client and commands. const { CreateFunctionCommand } = require ( "@aws-sdk/client-lambda" ); const { lambdaClient} = require ( "./libs/lambdaClient.js ); // Set the parameters. const params = { Code: { S3Bucket: "BUCKET_NAME", // BUCKET_NAME S3Key: "ZIP_FILE_NAME", // ZIP_FILE_NAME }, FunctionName: "LAMBDA_FUNCTION_NAME", Handler: "index.handler", Role: "IAM_ROLE_ARN", // IAM_ROLE_ARN; e.g., arn:aws:iam::650138640062:role/v3-lambda-tutorial-lambda-role Runtime: "nodejs12.x", Description: "Scans a DynamoDB table of employee details and using Amazon Simple Notification Services (Amazon SNS) to " + "send employees an email on each anniversary of their start-date.", }; const run = async () => { try { const data = await lambdaClient.send(new CreateFunctionCommand(params)); console.log("Success", data); // successful response } catch (err) { console.log("Error", err); // an error occurred } }; run();

Masukkan yang berikut ini di baris perintah untuk menyebarkan fungsi Lambda.

node lambda-function-setup.ts

Contoh kode ini tersedia di sini GitHub.

Konfigurasikan API Gateway untuk menjalankan fungsi Lambda

Buat API sisanya

Anda dapat menggunakan konsol API Gateway untuk membuat titik akhir istirahat untuk fungsi Lambda. Setelah selesai, Anda dapat menjalankan fungsi Lambda menggunakan panggilan tenang.

  1. Masuk ke konsol Amazon API Gateway.

  2. Di bawah Rest API, pilih Build.

  3. Pilih API Baru.

    Tabel DynamoDB
  4. Tentukan Karyawan sebagai nama API dan berikan deskripsi.

    Tabel DynamoDB
  5. Pilih Buat API.

  6. Pilih Sumber Daya di bawah bagian Karyawan.

    Tabel DynamoDB
  7. Di bidang nama, tentukan karyawan.

  8. Pilih Buat sumber daya.

  9. Dari dropdown Tindakan, pilih Buat Sumber Daya.

    Tabel DynamoDB
  10. Pilih /employees, pilih Create Method dari Actions, lalu pilih GET dari menu drop-down di bawah /employees. Pilih ikon tanda centang.

    Tabel DynamoDB
  11. Pilih fungsi Lambda dan masukkan mylambdafunction sebagai nama fungsi Lambda. Pilih Simpan.

Uji metode API Gateway

Pada titik ini dalam tutorial, Anda dapat menguji metode API Gateway yang memanggil fungsi Lambda mylambdafunction. Untuk menguji metode, pilih Uji, seperti yang ditunjukkan pada ilustrasi berikut.

Tabel DynamoDB

Setelah fungsi Lambda dipanggil, Anda dapat melihat file log untuk melihat pesan yang berhasil.

Menerapkan metode API Gateway

Setelah pengujian berhasil, Anda dapat menerapkan metode dari konsol Amazon API Gateway.

  1. Pilih Dapatkan.

    Tabel DynamoDB
  2. Dari dropdown Actions, pilih Deploy API.

    Tabel DynamoDB
  3. Isi formulir Deploy API dan pilih Deploy.

    Tabel DynamoDB
  4. Pilih Simpan Perubahan.

  5. Pilih Dapatkan lagi dan perhatikan bahwa URL berubah. Ini adalah URL pemanggilan yang dapat Anda gunakan untuk menjalankan fungsi Lambda.

    Tabel DynamoDB

Hapus sumber daya

Selamat! Anda telah memanggil fungsi Lambda melalui Amazon API Gateway menggunakan. AWS SDK for JavaScript Seperti yang dinyatakan di awal tutorial ini, pastikan untuk menghentikan semua sumber daya yang Anda buat saat melalui tutorial ini untuk memastikan bahwa Anda tidak dikenakan biaya. Anda dapat melakukan ini dengan menghapus AWS CloudFormation tumpukan yang Anda buat dalam Buat sumber AWS daya topik tutorial ini, sebagai berikut:

  1. Buka AWS CloudFormationdi konsol AWS manajemen.

  2. Buka halaman Stacks, dan pilih tumpukan.

  3. Pilih Hapus.