AWS Serverless RESTful API Geliştirme

29.03.2022 | dakika okuma

1. Giriş

Bu yazı serisinin konusu, serverless yaklaşımı ile RESTful API nasıl geliştirilir olacak. Bulut sağlayıcısı olarak AWS’yi kullanacağız.

Bu bölümde senaryoyu ortaya koyacağım ve çıktının ne olacağı konusunda ön bilgilendirme yapacağım.

RESTful API endpoint’lerimiz aşağıdaki gibi olacak.

[POST] api/ads
[PUT] api/ads/{id}
[DELETE] api/ads/{id}
[GET] api/ads
[GET] api/ads/{id}

Aşağıdaki AWS hizmetlerini kullanacağız.

API Gateway : RESTful API için ihtiyacımız olan endpoint’leri sağlayacak.
Lambda : GET, POST, PUT ve DELETE işlemleri için fonksiyon yazmamızı sağlayacak.
DynamoDB : NoSQL çözümü sağlayacak. POST, PUT ve DELETE işlemlerinde verileri DynamoDB’ye yazacağız.
ElasticCache : Dağıtık önbellek(distributed cache) çözümü sağlayacak. GET işleminde verileri Redis üzerinden okuyacağız.
S3 : Her deployment sonrasında kodumuzun versiyonlanarak saklanmasına imkan verecek.
CloudFormation : Yukarıda belirttiğim tüm hizmetleri otomatik olarak oluşturmamıza ve yönetmemize imkan sağlayacak.

Proje tamamlandığında AWS üzerindeki mimari aşağıdaki gibi olacak.

Serverless
Serverless

Sonuç olarak; POST işleminde AWS’nin NoSQL çözümü olan DynamoDB’ye kayıt atılacak. DynamoDB tablomuzdaki kayıt değişiklikleri, AWS’nin distributed cache çözüm servisi olan ElasticCache’e yansıtılacak. GET işleminde veriler DynamoDB yerine ElasticCache üzerinden okunacak.

2. Geliştirme Ortamının Hazırlanması

Bu bölümde geliştirme ortamımızı ayarlayacağız.

Gereksinimler

    • Visual Studio Code
    • AWS Hesabı
    • AWS CLI
    • Serverless Application Framework
2.1. AWS Console’da Kullanıcı Oluşturulması

Serverless ile deployment yapabilmek için AWS’de yetkili bir kullanıcının oluşturulması gerekli.

AWS Console’dan IAM’e gidin. Sol menüden “User”ı seçin. “Add user” düğmesine tıklayın.

Username alanına “serverless” yazın. Access type bölümünden “Programmatic Access”ı seçin. İkinci adıma(Permissions) geçin.

Adım 1 — Kullanıcı Bilgileri
Adım 1 — Kullanıcı Bilgileri

Permission bölümünden “Attach existing policies directly”ı seçin. Aşağıdaki yetkileri verin. Üçüncü adıma(Tags) geçin.

    • AWSLambdaFullAccess
    • IAMFullAccess
    • AmazonS3FullAccess
    • CloudWatchLogsFullAccess
    • AmazonAPIGatewayAdministrator
    • AWSCloudFormationFullAccess
    • AmazonDynamoDBFullAccess
    • AmazonElastiCacheFullAccess
Adım 2 — Kullanıcı Yetkileri
Adım 2 — Kullanıcı Yetkileri

Tag Key alanına “Application”, Tag Value alanına “Serverless RESTful API” yazın. Dördüncü adıma(Review) geçin.

Adım 3 — Kullanıcı Etiketleme
Adım 3 — Kullanıcı Etiketleme

Create User düğmesine tıklayın.

Adım 4 — Kullanıcı Önizleme
Adım 4 — Kullanıcı Önizleme

Ekranda Access Key Id ve Secret Access Key bilgileri verilecek. Onları bir kenarda tutun.

Adım 5 — Kullanıcı Erişim Bilgileri
Adım 5 — Kullanıcı Erişim Bilgileri
2.2. AWS CLI’ın Kurulması

Command Prompt’u açın ve aşağıdaki komutu çalıştırın.

    aws configure --profile serverlessuser

AWS Access Key ID : Kopyaladığınız Access Key Id
AWS Secret Access Key : Kopyaladığınız Secret Access Key
Default region name : eu-central-1
Default output format : json

2.3. Serverless Framework’ün Kurulması

Bu uygulamayı geliştirmek için Serverless Application Framework’ü kullanacağız. Kurulum yapmak için aşağıdaki adresi ziyaret edebilirsiniz.

Serverless Framework - AWS Lambda Guide - Installing The Serverless Framework

How to install the Serverless Framework and start using AWS Lambda

3. Endpoint'lerin Hazırlanması

Bu bölümde en basit haliyle projeyi oluşturup deployment yapacağız. Henüz DynamoDB’ye kayıt atmayacağız. Endpoint’lere istek atıp yanıt alacağız.

Aşağıdaki komut satırı ile proje dizinimizi oluşturalım.

    mkdir serverless-api && cd serverless-api

Aşağıdaki komut satırı ile serverless projemizi oluşturalım.

    serverless create --template aws-nodejs --name ads-api

Aşağıdaki komut satırı ile Visual Studio Code ile projemizi açalım.

    code .

serverless.yml dosyasını aşağıdaki şekilde güncelleyelim.

serverless.yml v1

handler.js dosyasını silelim. create.js, update.js, delete.js, getAll.js ve getById.js adında 4 tane dosya oluşturalım.

create.js v1

update.js v1

delete.js v1

getAll.js v1

getById.js v1

Proje dizinine create_request.json adında dosya oluşturalım ve içerisine aşağıdaki json’ı yapıştıralım. POST istek modelini belirliyoruz. Zorunlulukları ayarlıyoruz.

create_request.json

Proje dizinine update_request.json adında dosya oluşturalım ve içerisine aşağıdaki json’ı yapıştıralım. PUT istek modelini belirliyoruz. Zorunlukları ayarlıyoruz.

update_request.json

Aşağıdaki komut satırı ile aws’ye ilk deployment’ımızı yapalım.

    serverless deploy

Bu deployment ile en basit şekilde Create, Update, Delete, GetAll ve GetById için lambda fonksiyonları ve bu fonksiyonlara istek yapabilmek için gerekli endpoint’ler oluşturuldu.

Deployment işlemi bittikten sonra konsolda 5 tane endpoint ve 1 tane API Key yazacak.

Deployment çıktısı
Deployment çıktısı
Bu endpoint’lere istek atarak sonucu görebilirsiniz. Header’lara “x-api-key” eklemeniz ve değer olarak konsolda belirtilen API Key’i girmeniz gerekli.

Bu işlemin sonucunda AWS’de neler olmuş bakalım.

Cloud Formation’da stack oluştu.

CloudFormation
CloudFormation

Kodumuz S3'e atıldı.

S3
S3

Endpoint’ler için API Gateway oluştu.

API Gateway
API Gateway

Lambda fonksiyonlarımız oluştu.

Lambda
Lambda

4. DynamoDB Entegrasyonu

Bu bölümde API üzerinden gelen verileri DynamoDB’ye yazacağız. DynamoDB’den de okuma yapacağız.

Aşağıdaki komut satırları ile ihtiyacımız olan paketleri yükleyelim.

    npm i aws-sdk
npm i uuid

serverless.yml dosyasını aşağıdaki şekilde güncelleyelim.

serverless.yml v2

create.js, update.js, delete.js, getAll.js ve getById.js dosyalarını aşağıdaki şekilde güncelleyelim.

create.js v2

update.js v2

delete.js v2

getAll.js v2

getById.js v2

Aşağıdaki komut satırı ile aws’ye ikinci deployment’ımızı yapalım.

    serverless deploy
Endpoint’lere istek atarak sonucu görebilirsiniz. Header’lara “x-api-key” eklemeniz ve değer olarak konsolda belirtilen API Key’i girmelisiniz.

Bu işlemin sonucunda AWS’de neler olmuş bakalım.

DynamoDB’de tablo oluştu.

DynamoDB
DynamoDB

5. Redis Entegrasyonu

Bu son bölümde DynamoDB’deki akışları(ekleme, düzenleme ve silme) ElasticCache Redis’e aktaracağız ve GetAll isteğinde Redis’den okuma yapacağız.

Aşağıdaki komut satırları ile ihtiyacımız olan paketleri yükleyelim.

    npm i redis

Dosyalarda düzenleme yapmaya başlamadan önce AWS konsoluna girerek subnetId’leri öğrenmemiz gerekli.

Subnets
Subnets

serverless.yml dosyasını aşağıdaki şekilde güncelleyelim. subnetIds bölümlerini kendinize göre güncellemeniz gerekli.

serverless.yml v3

getAll.js dosyasını aşağıdaki şekilde güncelleyelim.

getAll.js v3

trigger.js adında yeni bir dosya oluşturalım.

trigger.js

Aşağıdaki komut satırı ile aws’ye üçüncü ve son deployment’ımızı yapalım.

    serverless deploy
Endpoint’lere istek atarak sonucu görebilirsiniz. Header’lara “x-api-key” eklemeniz ve değer olarak konsolda belirtilen API Key’i girmelisiniz.

Bu işlemin sonucunda AWS’de neler olmuş bakalım.

ElasticCache oluştu.

ElasticCache Redis
ElasticCache Redis

DynamoDb’ye trigger atandı.

DynamoDB Trigger
DynamoDB Trigger

Projenin son haline Github’dan erişebilirsiniz.

ahmetkucukoglu/serverless-restful

Serverless RESTful on AWS

JavaScript
2
2

Kolay gelsin.

Yazıyı Paylaş

Yorum bırak

Yanıtla

Yanıtlamayı iptal et
Bu site reCAPTCHA tarafından korunmaktadır ve Google Gizlilik Politikası ve Hizmet Şartları geçerlidir. Yorumunuz başarılı şekilde gönderildi reCaptcha doğrulanamadı
Muhabbetle ASP.NET Core ile geliştirildi.