Sunucusuz Çerçeve, AWS ve BigQuery Kullanarak Uygulama Oluşturma

Yayınlanan: 2021-01-28

Sunucusuz, sunucuların ve kaynakların yönetiminin ve tahsisinin bir bulut sağlayıcısı tarafından yönetildiği uygulamaları ifade eder. Bu, bulut sağlayıcısının kaynakları dinamik olarak tahsis ettiği anlamına gelir. Uygulama, bir olay tarafından tetiklenebilen durum bilgisi olmayan bir kapsayıcıda çalışıyor. Yukarıdaki ve bu makalede kullanacağımız örneklerden biri AWS Lambda ile ilgilidir.

Kısacası “Sunucusuz uygulamaları” olay odaklı bulut tabanlı sistemler olan uygulamalar olarak belirleyebiliriz. Uygulama, üçüncü taraf hizmetlerine, istemci tarafı mantığına ve uzak çağrılara (doğrudan Hizmet Olarak İşlev olarak adlandırılıyor) dayanır.

Sunucusuz Çerçeveyi Yükleme ve Amazon AWS için Yapılandırma

sunucusuz-logo

1. Sunucusuz Çerçeve

Sunucusuz Çerçeve, açık kaynaklı bir çerçevedir. Bize tamamen sunucusuz bir uygulama yönetim sistemi sağlayan bir komut satırı arabirimi veya CLI ile barındırılan bir panodan oluşur. Çerçeveyi kullanmak, daha az ek yük ve maliyet, hızlı geliştirme ve dağıtma ve sunucusuz uygulamaların güvenliğini sağlar.

Sunucusuz çerçeveyi yüklemeye devam etmeden önce, önce NodeJS'yi kurmanız gerekir. Çoğu işletim sisteminde bunu yapmak çok kolaydır – indirmek ve kurmak için resmi NodeJS sitesini ziyaret etmeniz yeterlidir. 6.0.0'dan daha yüksek bir sürüm seçmeyi unutmayın.

Yükledikten sonra, konsolda node -v çalıştırarak NodeJS'nin kullanılabilir olduğunu onaylayabilirsiniz. Yüklediğiniz düğüm sürümünü döndürmelidir:

düğüm sürümü

Artık hazırsınız, bu yüzden devam edin ve Serverless çerçevesini kurun.

Bunu yapmak için çerçeveyi kurmak ve yapılandırmak için belgeleri izleyin. İsterseniz, sadece bir proje için kurabilirsiniz, ancak DevriX'te genellikle çerçeveyi global olarak kurarız: npm install -g serverless

İşlemin bitmesini bekleyin ve şu komutu çalıştırarak Sunucusuz'un başarıyla yüklendiğinden emin olun: serverless -v

sunucusuz bilgi

2. Bir Amazon AWS Hesabı Oluşturun

Örnek uygulamanızı oluşturmaya devam etmeden önce Amazon AWS'de bir hesap oluşturmalısınız. Henüz bir hesabınız yoksa, Amazon AWS'ye gidip sağ üst köşedeki “AWS hesabı oluştur” seçeneğine tıklayıp hesap oluşturma adımlarını takip etmek kadar basit.

Amazon AWS hesabı oluşturun

Amazon, bir kredi kartı girmenizi gerektirir, bu nedenle bu bilgileri girmeden devam edemezsiniz. Başarılı kayıt ve oturum açma sonrasında AWS Management Console'u görmelisiniz:

aws-konsol

Harika! Şimdi uygulamanızı oluşturmaya devam edelim.

3. Sunucusuz Çerçeveyi AWS Sağlayıcı ile Yapılandırın ve Örnek Bir Uygulama Oluşturun

Bu adımda Serverless çerçevesini AWS sağlayıcısı ile yapılandırmamız gerekiyor. AWS Lambda gibi bazı hizmetler, bu hizmetin sahip olduğu kaynaklara ilişkin izinlere sahip olduğunuzdan emin olmak için bunlara eriştiğinizde kimlik bilgileri gerektirir. AWS, bunu gerçekleştirmek için AWS Identity and Access Manager(IAM) kullanılmasını önerir.

Bu nedenle, ilk ve en önemli şey, uygulamamızda kullanmak için AWS'de bir IAM kullanıcısı oluşturmaktır:

AWS konsolunda:

  • "Hizmet Bul" alanına IAM yazın.
  • “IAM” üzerine tıklayın.
  • "Kullanıcılar" bölümüne gidin.
  • "Kullanıcı ekle"yi tıklayın.

iam-add-user

“Kullanıcı adı” için ne istersen onu kullan. Örneğin, sunucusuz-admin kullanıyoruz.Erişim türü” için “Programatik erişim”i işaretleyin ve “Sonraki izinler ”e tıklayın.

iam-add-user2

Bundan sonra, kullanıcı için izinler eklememiz gerekiyor , “Mevcut politikaları doğrudan ekle” ye tıklayın, “Yönetici Erişimi” ni aratın ve tıklayın. "Sonraki etiketler"e tıklayarak devam edin

iam-add-user3

Etiketler isteğe bağlıdır, bu nedenle “Sonraki inceleme” ve “Kullanıcı oluştur” seçeneğine tıklayarak devam edebilirsiniz. Tamamlanıp yüklendikten sonra, sayfada ihtiyacımız olan kimlik bilgilerini içeren bir başarı mesajı görünür.

iam-add-user4

Şimdi aşağıdaki komutu çalıştırmamız gerekiyor:
serverless config credentials --provider aws --key key --secret secret --profile serverless-admin
Anahtarı ve sırrı yukarıda verilenle değiştirin. AWS kimlik bilgileriniz bir profil olarak oluşturulur. ~/.aws/credentials dosyasını açarak bunu iki kez kontrol edebilirsiniz. AWS profillerinden oluşmalıdır. Şu anda, aşağıdaki örnekte, yalnızca bir tanesidir – bizim oluşturduğumuz:

aws-kimlik bilgileri dosyası

Şimdiye kadar harika iş! NodeJS ve yerleşik başlangıç ​​şablonlarını kullanarak bir örnek uygulama oluşturarak devam edebilirsiniz.

Not: Ayrıca yazımızda serverless kısaltması olan sls komutunu kullanıyoruz.
Boş bir dizin oluşturun ve girin. komutu çalıştırın

ls create --template aws-nodejs

create –template komutunu kullanarak, mevcut şablonlardan birini belirtin; bu durumda, bir NodeJS "Merhaba dünya" şablon uygulaması olan aws-nodejs .

sls-oluştur

Tamamlandığında, dizininiz aşağıdakilerden oluşmalıdır ve şöyle görünür:

sls-create-files

Handler.js ve serverless.yml adlı yeni dosyaları oluşturduk.

handler.js dosyası işlev(ler)inizi saklar ve serverless.yml daha sonra değiştireceğiniz yapılandırma özelliklerini saklar. .yml dosyasının ne olduğunu merak ediyorsanız kısaca insan tarafından okunabilen bir veri serileştirme dilidir . Herhangi bir konfigürasyon parametresi eklenirken kullanıldığı için aşina olmak iyidir. Ama şimdi serverless.yml dosyasında nelere sahip olduğumuza bir göz atalım:

 hizmet: aws-örnek-uygulama
Sağlayıcı:
  isim: aws
  çalışma zamanı: nodejs12.x
fonksiyonlar:
  Merhaba:
    işleyici: işleyici.merhaba
  • hizmet: – Hizmet adımız.
  • sağlayıcı: – Sağlayıcı özelliklerini içeren bir nesne ve burada gördüğümüz gibi sağlayıcımız AWS ve NodeJS çalışma zamanını kullanıyoruz.
  • işlevler: – Lambda'ya dağıtılabilen tüm işlevleri içeren bir nesnedir. Bu örnekte, handler.js merhaba işlevine işaret eden merhaba adında yalnızca bir işlevimiz var.

Uygulamayı dağıtmaya devam etmeden önce burada çok önemli bir şey yapmanız gerekiyor. Daha önce, bir profille AWS için kimlik bilgilerini belirledik (buna serverless-admin adını verdik). Şimdi tek yapmanız gereken sunucusuz yapılandırmaya bu profili ve bölgenizi kullanmasını söylemek. serverless.yml dosyasını açın ve çalışma zamanının hemen altındaki sağlayıcı özelliğinin altına şunu girin:

 profil: sunucusuz-admin
bölge: us-doğu-2

Sonunda, buna sahip olmalıyız:

 Sağlayıcı:
  isim: aws
  çalışma zamanı: nodejs12.x
  profil: sunucusuz-admin
  bölge: us-doğu-2

Not: Bölgeyi elde etmenin kolay bir yolu, konsolda oturum açtığınızda URL'ye bakmaktır: Örnek:

aws-bölgesi

Artık oluşturulan şablonumuz hakkında gerekli bilgilere sahibiz. İşlevi yerel olarak nasıl çağırabileceğimizi ve onu AWS Lambda'ya nasıl dağıtabileceğimizi kontrol edelim.
Fonksiyonu yerel olarak çağırarak uygulamayı hemen test edebiliriz:

sls invoke local -f hello

İşlevi çağırır (ancak yalnızca yerel olarak!) ve çıktıyı konsola döndürür:

sls-invoke-yerel

Şimdi, her şey yolunda giderse, işlevinizi AWS Lambda'ya dağıtmayı deneyebilirsiniz.

Peki, bu karmaşık mıydı? Hayır, değildi! Sunucusuz Çerçeve sayesinde yalnızca tek satırlık bir koddur:

sls deploy -v

Her şeyin bitmesini bekleyin, birkaç dakika sürebilir, her şey yolundaysa şununla bitirmelisiniz:

sls-dağıtım-bitmiş

Şimdi AWS'de neler olduğunu kontrol edelim. Lambda'ya gidin (“ Hizmet Bul ” da Lambda yazın) ve Lambda işlevinizin oluşturulduğunu görmelisiniz.

aws-lambda-yarattı

Artık işlevinizi AWS Lambda'dan çağırmayı deneyebilirsiniz. Terminal tipinde
sls invoke -f hello
Daha önce olduğu gibi aynı çıktıyı döndürmelidir (yerel olarak test ettiğimizde):

sls-invoke

AWS Lambda'da işlevi açıp “ İzleme ” sekmesine gidip “ CloudWatch'ta günlükleri görüntüle” seçeneğine tıklayarak AWS'nin işlevini tetiklediğinizi kontrol edebilirsiniz. ".

lambda-cloudwatch-logs

Orada bir günlüğün olmalı.

Şimdi, başvurunuzda hala bir şey eksik, ama bu nedir…? Pekala, uygulamanız için erişebileceğiniz bir uç noktanız yok, o yüzden bunu AWS API Gateway kullanarak oluşturalım.

Önce serverless.yml dosyasını açmanız ve yorumları temizlemeniz gerekir. İşlevimize ve http özelliğinin altına bir event özelliği eklemeniz gerekiyor. Bu, Sunucusuz çerçeveye bir API Ağ Geçidi oluşturmasını ve uygulamayı dağıtırken bunu Lambda işlevimize eklemesini söyler. Yapılandırma dosyamız şununla bitmelidir:

 hizmet: aws-örnek-uygulama
Sağlayıcı:
  isim: aws
  çalışma zamanı: nodejs12.x
  profil: sunucusuz-admin
  bölge: us-doğu-2
fonksiyonlar:
  Merhaba:
    işleyici: işleyici.merhaba
    Etkinlikler:
      - http:
          yol: /merhaba
          yöntem: al

Http'de yolu ve HTTP yöntemini belirtiriz.
İşte bu kadar, sls deploy -v çalıştırarak uygulamamızı tekrar dağıtalım

Bittiğinde, çıkış terminalinde yeni bir şey görünmelidir ve bu, oluşturulan son noktadır:

http-uç noktası

Uç noktayı açalım:

http-endpoint-executed

İşlevinizin yürütüldüğünü, çıktı döndürdüğünü ve istekle ilgili bazı bilgileri görmelisiniz. Lambda fonksiyonumuzda nelerin değiştiğini kontrol edelim.

AWS Lambda'yı açın ve işlevinize tıklayın.

aws-lambda-api-ağ geçidi

Tasarımcı ” sekmesinin altında, Lambda'mıza ve API Uç Noktamıza bağlı API Ağ Geçidimiz olduğunu görüyoruz.

Harika! Süper basit bir sunucusuz uygulama oluşturdunuz, onu AWS Lambda'ya dağıttınız ve işlevselliğini test ettiniz. Ayrıca, AWS API Gateway kullanarak bir uç nokta ekledik.

4. Uygulama Çevrimdışı Nasıl Çalıştırılır

Şimdiye kadar, işlevleri yerel olarak çağırabileceğimizi biliyoruz, ancak aynı zamanda, sunucusuz-çevrimdışı eklentiyi kullanarak tüm uygulamamızı çevrimdışı çalıştırabiliriz.

Eklenti, yerel/geliştirme makinenizde AWS Lambda ve API Gateway'i öykünür. İstekleri işleyen ve işleyicilerinizi çağıran bir HTTP sunucusu başlatır.

Eklentiyi yüklemek için uygulama dizininde aşağıdaki komutu çalıştırın

npm install serverless-offline --save-dev

Ardından projenin serverless.yml dosyasının içinde dosyayı açın ve plugins özelliğini ekleyin:

 eklentiler:
  - sunucusuz-çevrimdışı

Yapılandırma şöyle görünmelidir:

 hizmet: aws-örnek-uygulama
Sağlayıcı:
  isim: aws
  çalışma zamanı: nodejs12.x
  profil: sunucusuz-admin
  bölge: us-doğu-2
fonksiyonlar:
  Merhaba:
    işleyici: işleyici.merhaba
    Etkinlikler:
      - http:
          yol: /merhaba
          yöntem: al
eklentiler:
  - sunucusuz-çevrimdışı

Eklenti çalıştırmasını başarıyla yüklediğimizi ve yapılandırdığımızı kontrol etmek için

sls --verbose

Bunu görmelisiniz:

sls-ayrıntılı

Şimdi projenizin kökünde komutu çalıştırın

sls offline

sls-çevrimdışı

Gördüğünüz gibi, bir HTTP sunucusu 3000 numaralı bağlantı noktasını dinliyor ve işlevlerinize erişebilirsiniz, örneğin burada merhaba işlevimiz için http://localhost:3000/dev/hello var. Açılışta, daha önce oluşturduğumuz API Gateway ile aynı yanıtı aldık.

sls-çevrimdışı2

Google BigQuery Entegrasyonunu ekleyin

büyük sorgu

Şimdiye kadar harika bir iş çıkardınız! Sunucusuz kullanarak tamamen çalışan bir uygulamanız var. Nasıl çalıştığını ve entegrasyonun nasıl yapıldığını görmek için uygulamamızı genişletelim ve ona BigQuery entegrasyonu ekleyelim.

BigQuery, sorgulamayı destekleyen uygun maliyetli ve hızlı bir veri ambarı olan sunucusuz bir Hizmet Olarak Yazılım (SaaS)'dir. NodeJS uygulamamızla entegre etmeye devam etmeden önce bir hesap oluşturmamız gerekiyor, o yüzden devam edelim.

1. Google Cloud Console'u Kurun

https://cloud.google.com adresine gidin ve henüz yapmadıysanız hesabınızla giriş yapın – bir hesap oluşturun ve devam edin.

Google Cloud Console'da oturum açtığınızda yeni bir proje oluşturmanız gerekir. Logonun yanındaki üç noktaya tıkladığınızda, “ Yeni proje”yi seçtiğiniz kalıcı bir pencere açılacaktır.

gc-oluşturma-projesi

Projeniz için bir ad girin. bigquery-example kullanacağız. Projeyi oluşturduktan sonra çekmeceyi kullanarak BigQuery'ye gidin:

gc-bq

BigQuery yüklendiğinde, sol tarafta, erişiminiz olan proje verilerini ve ayrıca genel veri kümelerini göreceksiniz. Bu örnek için genel bir veri seti kullanıyoruz. covid19_ecdc olarak adlandırılır:

bigquery-covid-dataset

Veri kümesi ve mevcut tablolar üzerinde oynayın. İçindeki verileri önizleyin. Bu, saatlik olarak güncellenen ve dünya çapında COVID-19 verileri hakkında bilgi içeren herkese açık bir veri kümesidir.

Verilere erişebilmek için bir IAM kullanıcısı -> Hizmet hesabı oluşturmamız gerekiyor. Bu nedenle, menüde "IAM ve Yönetici"yi ve ardından "Hizmet Hesapları"nı tıklayın.

bq-servis-hesabı

"Hizmet hesabı oluştur" düğmesine tıklayın, hizmet hesabı adını girin ve "Oluştur"a tıklayın. Ardından, " Hizmet hesabı izinleri" ne gidin, "BigQuery Yöneticisi" öğesini aratın ve seçin.

bq-hizmet-hesabı-izinleri

Devam ”a tıklayın, bu son adımdır, burada anahtarlarınıza ihtiyacınız vardır, bu nedenle “ Anahtarlar ” altındaki oluşturma düğmesine tıklayın ve JSON olarak dışa aktarın. Bunu güvenli bir yere kaydedin, daha sonra ihtiyacımız olacak. Hizmet hesabı oluşturmayı tamamlamak için Bitti'ye tıklayın.

bigquery-service-hesabı oluşturuldu

Şimdi, NodeJS BigQuery kitaplığına bağlanmak için burada oluşturulan kimlik bilgilerini kullanacağız.

2. NodeJS BigQuery Kitaplığını Yükleyin

Yeni oluşturduğunuz projede kullanmak için BigQuery NodeJS kitaplığını yüklemeniz gerekecek. Uygulama dizininde aşağıdaki komutları çalıştırın:

İlk olarak, npm init'i çalıştırarak npm init

Tüm soruları doldurun ve BigQuery kitaplığını yüklemeye devam edin:
npm install @google-cloud/bigquery

Fonksiyon işleyicimizi değiştirmeye devam etmeden önce, daha önce oluşturduğumuz JSON dosyasından özel anahtarı taşımamız gerekiyor. Bunu yapmak için Sunucusuz ortam değişkenlerini kullanacağız. Daha fazla bilgiyi buradan edinebilirsiniz.

serverless.yml dosyasını açın ve sağlayıcı özelliğine aşağıdaki gibi ortam özelliği ekleyin:

 Çevre:
PROJECT_ID: ${file(./config/bigquery-config.json):project_id}
CLIENT_EMAIL: ${file(./config/bigquery-config.json):client_email}
PRIVATE_KEY: ${file(./config/bigquery-config.json):private_key}

Oluşturduğumuz JSON dosyasından aynı özellikleri (küçük harf) alan PROJECT_ID, PRIVATE_KEY ve CLIENT_EMAIL ortam değişkenleri oluşturun. config klasörüne yerleştirdik ve bigquery-config.json olarak adlandırdık.

Şu anda serverless.yml dosyasının şu şekilde görünmesi gerekir:

 hizmet: aws-örnek-uygulama
Sağlayıcı:
  isim: aws
  çalışma zamanı: nodejs12.x
  profil: sunucusuz-admin
  bölge: us-doğu-2
  Çevre:
    PROJECT_ID: ${file(./config/bigquery-config.json):project_id}
    CLIENT_EMAIL: ${file(./config/bigquery-config.json):client_email}
    PRIVATE_KEY: ${file(./config/bigquery-config.json):private_key}
fonksiyonlar:
  Merhaba:
    işleyici: işleyici.merhaba
    Etkinlikler:
      - http:
          yol: /merhaba
          yöntem: al
eklentiler:
  - sunucusuz-çevrimdışı

Şimdi handler.js dosyasını açın ve BigQuery kitaplığını içe aktarmaya izin verin, dosyanın en üstüne 'use strict' altına aşağıdaki satırı ekleyin:

const {BigQuery} = require('@google-cloud/bigquery');

Şimdi BigQuery kitaplığına kimlik bilgilerini söylemeliyiz. Bu amaçla, BigQuery'yi kimlik bilgileriyle başlatan yeni bir sabit oluşturun:

 const bigQueryClient = yeni BigQuery({
    proje Kimliği: process.env.PROJECT_ID,
    kimlik bilgileri: {
        client_email: process.env.CLIENT_EMAIL,
        private_key: process.env.PRIVATE_KEY
    }
});

Ardından, BigQuery SQL sorgumuzu oluşturalım. Bulgaristan için COVID-19 vakaları hakkında en son bilgileri almak istiyoruz. Devam etmeden önce test etmek için BigQuery sorgu düzenleyicisini kullanıyoruz, bu nedenle özel bir sorgu oluşturduk:

 SEÇ * `bigquery-public-data.covid19_ecdc.covid_19_geographic_distribution_worldwide` NEREDE geo_ SİPARİŞ TARİHİNE GÖRE DESC LIMIT 1 

bigquery-sorgu-sonuçları

İyi! Şimdi bunu NodeJS uygulamamızda uygulayalım.
handler.js dosyasını açın ve aşağıdaki kodu yapıştırın

 const sorgu = 'SEÇ * 'bigquery-public-data.covid19_ecdc.covid_19_geographic_distribution_worldwide' NEREDE geo_id = \'BG\' tarihe göre SİPARİŞ DESC LIMIT 1';
const seçenekler = {
    sorgu: sorgu
}

const [iş] = bigQueryClient.createQueryJob(options);
const [satırlar] = işi bekliyor.getQueryResults();

Sorgu ve seçenekler sabitleri oluşturduk. Ardından sorguyu bir iş olarak çalıştırmaya ve bundan sonuçları almaya devam ediyoruz.

Ayrıca, sorgudan oluşturulan satırları döndürmek için iade işleyicimizi değiştirelim:

 dönüş {
    durumKodu: 200,
    gövde: JSON.stringify(
        {
            satırlar
        },
        boş,
        2
    ),
};

Tam handler.js dosyasını görelim:

 'katı kullanın';

const {BigQuery} = require('@google-cloud/bigquery');
const bigQueryClient = yeni BigQuery({
    proje Kimliği: process.env.PROJECT_ID,
    kimlik bilgileri: {
        client_email: process.env.CLIENT_EMAIL,
        private_key: process.env.PRIVATE_KEY
    }
});

module.exports.hello = zaman uyumsuz olay => {
    const sorgu = 'SEÇ * 'bigquery-public-data.covid19_ecdc.covid_19_geographic_distribution_worldwide' NEREDE geo_id = \'BG\' tarihe göre SİPARİŞ DESC LIMIT 1';
    const seçenekler = {
        sorgu: sorgu
    }

    const [iş] = bigQueryClient.createQueryJob(options);
    const [satırlar] = işi bekliyor.getQueryResults();

    dönüş {
        durumKodu: 200,
        gövde: JSON.stringify(
            {
                satırlar
            },
            boş,
            2
        ),
    };
};

Peki! Fonksiyonumuzu yerel olarak test edelim:
sls invoke local -f hello
Çıktıyı görmeliyiz:

bigquery-merhaba-invoke

Uygulamayı HTTP Uç Noktaları aracılığıyla test etmek için dağıtmaya devam edin, böylece sls deploy -v çalıştırın

Bitmesini ve uç noktayı açmasını bekleyin. Sonuçlar burada:

bigquery-endpoint

Aferin! Artık BigQuery'den veri almak ve yanıt döndürmek için bir uygulamamız var! Sonunda çevrimdışı çalışıp çalışmadığını kontrol edelim. sls offline çalıştır

Ve yerel uç noktayı yükleyin:

bigquery-çevrimdışı

İyi iş çıkardın. Sürecin neredeyse sonuna geldik. Son adım, uygulamayı ve davranışı biraz değiştirmek. AWS API Gateway yerine Application Load Balancer kullanmak istiyoruz. Bir sonraki bölümde bunu nasıl başaracağımızı görelim.

ALB – AWS'de Application Load Balancer

AWS API Gateway kullanarak uygulamamızı oluşturduk. Bu bölümde API Gateway'in Application Load Balancer (ALB) ile nasıl değiştirileceğini ele alacağız.

İlk olarak, API Gateway'e kıyasla uygulama yük dengeleyicinin nasıl çalıştığını görelim:

Uygulama yük dengeleyicide, belirli bir yolu/yolları (örneğin, /hello/ ) bir hedef gruba, bizim durumumuzda bir grup kaynakla, Lambda işlevine eşleriz.

Bir hedef grup, kendisiyle ilişkilendirilmiş yalnızca bir Lambda işlevine sahip olabilir. Hedef grubun yanıt vermesi gerektiğinde, uygulama yük dengeleyici Lambda'ya bir istek gönderir ve işlevin bir yanıt nesnesi ile yanıt vermesi gerekir. API Ağ Geçidi gibi, ALB de tüm HTTP(ler) isteklerini işler.

ALB ve API Gateway arasında bazı farklılıklar vardır. Ana farklardan biri, API Ağ Geçidinin yalnızca HTTPS'yi (SSL) desteklemesi, ALB'nin ise hem HTTP hem de HTTPS'yi desteklemesidir.

Ancak, API Gateway'in bazı artılarını ve eksilerini görelim:

API Ağ Geçidi:

Artıları:

  • Mükemmel güvenlik.
  • Uygulaması basittir.
  • Dağıtım için hızlı ve bir dakika içinde gitmek güzel.
  • Ölçeklenebilirlik ve kullanılabilirlik.

Eksileri:

  • Yüksek trafikle karşı karşıya kalındığında oldukça pahalı hale gelebilir.
  • Geliştiriciler için bir zorluk seviyesi ekleyen biraz daha düzenleme gerektirir.
  • API senaryoları nedeniyle performans düşüşü, uygulamanın hızını ve güvenilirliğini etkileyebilir.

API Ağ Geçidini kullanmak yerine bir ALB oluşturup ona geçiş yaparak devam edelim:

1. ALB Nedir?

Uygulama yük dengeleyici, geliştiricinin gelen trafiği yapılandırmasına ve yönlendirmesine olanak tanır. “ Elastik Yük Dengeleme”nin bir özelliğidir. İstemciler için tek iletişim noktası görevi görür, gelen uygulama trafiğini birden çok bölgedeki EC2 bulut sunucuları gibi birden çok hedef arasında dağıtır.

2. AWS Kullanıcı Arayüzünü kullanarak bir Application Load Balancer oluşturun

Amazon AWS'deki UI aracılığıyla Application Load Balancer'ımızı (ALB) oluşturalım. AWS Konsolunda “ Hizmetleri bul. " EC2 " yazın ve " Yük Dengeleyicileri" bulun.

aws-alb

Application Load Balancer ” altında “ Create Load Balancer ”a tıklayın, “ Oluştur ”u seçin. Bir ad için, seçiminizi girin, “ örnek-alb ” kullandık, Şema “ internete bakan ”, IP Adresi tipi ipv4'ü seçin.

Listeners ” da olduğu gibi bırakın – HTTP ve 80 numaralı bağlantı noktası. HTTPS için yapılandırılabilir, ancak HTTPS'yi kullanmadan önce bir etki alanınız olması ve bunu onaylamanız gerekir.

Kullanılabilirlik Alanları – VPC için açılır menüden sahip olduğunuzu seçin ve tüm “ Uygunluk alanlarını” işaretleyin:

aws-alb-create1

Yük dengeleyicinizin güvenliğini iyileştirmenizi istemek için “ Sonraki Güvenlik Ayarlarını Yapılandır ” seçeneğine tıklayın. Sonrakine tıkla.

3. Adım Güvenlik Gruplarını Yapılandır ” da, “Yeni bir güvenlik grubu oluştur”u seçmek için Bir güvenlik grubu atayın . Sonraki: Yönlendirmeyi Yapılandır'a tıklayarak devam edin. ". 4. adımda, yukarıdaki ekran görüntüsünde gösterildiği gibi yapılandırın:

aws-alb-yönlendirme

İleri , İleri ve Oluştur'u tıklayın.

Yük dengeleyicilere geri dönün ve ARN'yi ekran görüntüsünde gösterildiği gibi kopyalayın:

aws-alb-arn

Şimdi serverless.yml dosyamızı değiştirmemiz ve API Gateway http özelliğini kaldırmamız gerekiyor. Events özelliği altında, http özelliğini kaldırın ve bir alb özelliği ekleyin. İşlev nesnesi şu şekilde bitmelidir:

 Merhaba:
  işleyici: işleyici.merhaba
  Etkinlikler:
    -alb:
        listenerArn: arn:aws:elasticloadbalancing:us-east-2:115129174008:listener/app/sample-alb/ae6e398a898c48e6/67ce6bf319d0513d
        öncelik: 1
        koşullar:
          yol: /merhaba

Dosyayı kaydedin ve uygulamayı dağıtmak için komutu çalıştırın
sls deploy -v

Başarılı bir şekilde dağıttıktan sonra AWS Load Balancer'lara dönün ve ekran görüntüsünde gösterildiği gibi DNS adınızı bulun:

aws-alb-dns

DNS adını kopyalayın ve path /merhaba girin.

Çalışmalı ve sonunda size içerik indirme seçeneği sunmalıdır :). Şimdiye kadar, uygulama yük dengeleyici harika çalışıyor, ancak uygulamanın son kullanıcılarımız için uygun bir yanıt vermesi gerekiyor. Bunu yapmak için handler.js dosyasını açın ve return ifadesini aşağıdaki ile değiştirin:

 dönüş {
    durumKodu: 200,
    durumAçıklama: "200 OK",
    başlıklar: {
        "İçerik Türü": "uygulama/json"
    },
    isBase64Encoding: yanlış,
    gövde: JSON.stringify(satırlar)
}

ALB'nin farkı, yanıtın kapsayıcı statusDescription, üstbilgiler ve isBase64Encoding içermesi gerektiğidir. Lütfen dosyayı kaydedin ve yeniden dağıtın, ancak bu sefer tüm uygulamayı değil, bunun yerine yalnızca değiştirdiğimiz işlevi. Aşağıdaki komutu çalıştırın:
sls deploy -f hello

Bu şekilde, konuşlandırılacak yalnızca merhaba işlevini tanımlıyoruz. Başarılı bir şekilde dağıttıktan sonra, yol ile birlikte DNS adını tekrar ziyaret edin ve uygun bir yanıt almalısınız!

aws-alb-yanıtı

Harika! Şimdi API Gateway'i Application Load Balancer ile değiştirdik. Uygulama Yük dengeleyici, API Ağ Geçidi'nden daha ucuzdur ve artık uygulamamızı, özellikle daha yüksek trafiğe sahip olmayı bekliyorsak ihtiyaçlarımızı karşılayacak şekilde genişletebiliriz.

Son sözler

Serverless Framework, AWS ve BigQuery kullanarak basit bir uygulama oluşturduk ve birincil kullanımını ele aldık. Sunucusuz gelecek ve onunla bir uygulamayı yönetmek zahmetsiz. Öğrenmeye devam edin ve tüm işlevlerini ve sahip olduğu sırları keşfetmek için Serverless çerçevesine dalın. Aynı zamanda oldukça basit ve kullanışlı bir araçtır.