1. Pengantar GraphQL dan Serverless
GraphQL adalah sebuah query language untuk API yang memungkinkan client untuk meminta data secara fleksibel dan efisien. Serverless adalah arsitektur cloud yang memungkinkan Anda menjalankan aplikasi tanpa harus mengelola server secara langsung.
Dalam panduan ini, kita akan belajar bagaimana membuat aplikasi GraphQL yang berjalan secara serverless menggunakan AWS Lambda dan API Gateway. Dengan pendekatan ini, Anda dapat menghemat biaya dan meningkatkan skalabilitas aplikasi.
2. Persiapan Lingkungan dan Akun AWS
Sebelum memulai, pastikan Anda sudah memiliki:
-
Akun AWS aktif dengan akses ke AWS Lambda dan API Gateway
-
Node.js versi 16 atau lebih baru terinstall di komputer Anda
-
npm atau yarn sebagai package manager
-
Editor kode seperti VSCode
Jika belum memiliki akun AWS, Anda dapat mendaftar di
https://aws.amazon.com/
.
3. Membuat Proyek GraphQL Serverless
Kita akan menggunakan
Apollo Server
dan
Serverless Framework
untuk membangun dan deploy aplikasi GraphQL.
Langkah 1: Inisialisasi proyek baru
npx create-serverless-app graphql-serverless-app
cd graphql-serverless-app
Langkah 2: Install dependencies
npm install apollo-server-lambda graphql serverless serverless-offline
Langkah 3: Buat file
handler.js
untuk server GraphQL
const { ApolloServer, gql } = require('apollo-server-lambda');
const typeDefs = gql\`
type Query {
hello: String
}
\`;
const resolvers = {
Query: {
hello: () => 'Halo dari GraphQL Serverless!',
},
};
const server = new ApolloServer({
typeDefs,
resolvers,
playground: true,
introspection: true,
});
exports.graphqlHandler = server.createHandler();
Langkah 4: Buat file
serverless.yml
untuk konfigurasi deploy
service: graphql-serverless-app
provider:
name: aws
runtime: nodejs16.x
region: us-east-1
functions:
graphql:
handler: handler.graphqlHandler
events:
- http:
path: graphql
method: post
- http:
path: graphql
method: get
plugins:
- serverless-offline
4. Struktur Proyek dan Penjelasan Kode
Berikut adalah struktur folder dan file utama proyek:
graphql-serverless-app/
├── handler.js
├── package.json
├── serverless.yml
└── node_modules/
Penjelasan kode utama di
handler.js
:
-
typeDefs:
Mendefinisikan schema GraphQL, di sini hanya ada query
hello
yang mengembalikan string.
-
resolvers:
Fungsi yang meng-handle query, mengembalikan string "Halo dari GraphQL Serverless!" saat query
hello
dipanggil.
-
ApolloServer:
Membuat instance server GraphQL yang kompatibel dengan AWS Lambda.
-
exports.graphqlHandler:
Handler Lambda yang akan dipanggil oleh API Gateway.
Penjelasan konfigurasi di
serverless.yml
:
-
service:
Nama layanan serverless.
-
provider:
Menentukan AWS sebagai provider dan runtime Node.js 16.
-
functions:
Mendefinisikan fungsi Lambda bernama
graphql
dengan handler
handler.graphqlHandler
.
-
events:
Menghubungkan fungsi dengan HTTP API Gateway pada path
/graphql
untuk metode GET dan POST.
-
plugins:
Menggunakan plugin
serverless-offline
untuk testing lokal.
5. Deploy Aplikasi ke AWS Lambda dan API Gateway
Langkah 1: Login ke AWS CLI
aws configure
Masukkan
Access Key ID
,
Secret Access Key
, region (misal:
us-east-1
), dan format output (misal:
json
).
Langkah 2: Deploy menggunakan Serverless Framework
npx serverless deploy
Setelah deploy selesai, Anda akan mendapatkan URL endpoint API Gateway untuk GraphQL.
Langkah 3: Jalankan server secara lokal (opsional)
npx serverless offline
Ini akan menjalankan server GraphQL di
http://localhost:3000/graphql
sehingga Anda bisa testing tanpa deploy ke AWS.
6. Testing dan Debugging
Anda dapat menguji endpoint GraphQL menggunakan tools seperti:
Jika ada error, cek log Lambda di AWS CloudWatch untuk debugging.
7. Sumber Belajar dan Referensi