Türkçe

Google Cloud Functions ile sunucusuz bilişimin gücünü keşfedin. Bu rehber, HTTP tetikleyicilerini inceleyerek dünya çapındaki geliştiricilere ölçeklenebilir, olay odaklı uygulamalar oluşturma bilgisi sunar.

Google Cloud Functions: HTTP Tetikleyicileri İçin Kapsamlı Bir Rehber

Google Cloud Functions (GCF), bulut hizmetleri oluşturmanıza ve bağlamanıza olanak tanıyan sunucusuz bir yürütme ortamıdır. Cloud Functions ile, bulut altyapınızdan ve hizmetlerinizden yayılan olaylara eklenmiş basit, tek amaçlı fonksiyonlar yazarsınız. Fonksiyonunuz, izlediğiniz olay gerçekleştiğinde yürütülür. Bu yaklaşım, sunucuları veya çalışma zamanlarını yönetmeden olay odaklı uygulamalar geliştirmenize olanak tanır.

Bir Cloud Function'ı tetiklemenin en yaygın yollarından biri HTTP isteği aracılığıyladır. Bu rehber, Google Cloud Functions'taki HTTP tetikleyicileri dünyasına dalarak size güçlü, ölçeklenebilir ve uygun maliyetli uygulamalar oluşturma bilgisi sağlayacaktır.

HTTP Tetikleyicileri Nedir?

Bir HTTP tetikleyicisi, Cloud Function'ınızı bir HTTP isteğine yanıt olarak yürütmenize olanak tanır. Esasen, belirli bir URL'ye bir HTTP isteği gönderildiğinde, Google Cloud Functions ilişkili fonksiyonu otomatik olarak yürütür. Bu, HTTP tetikleyicilerini API'ler, webhook'lar ve olay odaklı web uygulamaları oluşturmak için ideal hale getirir.

HTTP Tetikleyicilerini Kullanmanın Temel Avantajları:

HTTP Tetikleyicili Bir Cloud Function Oluşturma

Basit bir Cloud Function'ı HTTP tetikleyicisi ile oluşturma sürecini adım adım inceleyelim. "Merhaba, Dünya!" mesajıyla yanıt veren bir fonksiyon oluşturacağız. Bu örnek, çıktı dizesini değiştirerek çeşitli küresel yerel ayarlara kolayca uyarlanabilir.

Ön Koşullar:

Adımlar:

  1. Yeni Bir Proje Oluşturun (eğer bir projeniz yoksa):

    Eğer zaten bir GCP projeniz yoksa, Google Cloud Console'da bir tane oluşturun.

  2. Cloud Functions API'sini Etkinleştirin:

    Cloud Console'da Cloud Functions API'sine gidin ve etkinleştirin.

  3. Bir Fonksiyon Dizini Oluşturun:

    Cloud Function'ınız için yeni bir dizin oluşturun. Örneğin:

    mkdir hello-http
    cd hello-http
  4. Fonksiyon Kodunu Yazın:

    Aşağıdaki kodla `main.py` (Python için) veya `index.js` (Node.js için) adında bir dosya oluşturun:

    Python (main.py):

    def hello_http(request):
        """HTTP Cloud Function.
        Args:
            request (flask.Request): İstek nesnesi.
            
        Returns:
            Yanıt metni veya `make_response` kullanılarak bir
            Response nesnesine dönüştürülebilen herhangi bir değer kümesi
            .
        """
        request_json = request.get_json(silent=True)
        request_args = request.args
    
        if request_json and 'name' in request_json:
            name = request_json['name']
        elif request_args and 'name' in request_args:
            name = request_args['name']
        else:
            name = 'World'
        return f'Hello, {name}!'

    Node.js (index.js):

    exports.helloHttp = (req, res) => {
      let name = 'World';
      if (req.body.name) {
        name = req.body.name;
      } else if (req.query.name) {
        name = req.query.name;
      }
      res.status(200).send(`Hello, ${name}!`);
    };
  5. Bir Gereksinimler Dosyası Oluşturun (Yalnızca Python):

    Eğer Python kullanıyorsanız, `requirements.txt` adında bir dosya oluşturun ve fonksiyonunuzun ihtiyaç duyduğu bağımlılıkları ekleyin. Bu örnek için kesinlikle gerekli değildir, ancak bir tane eklemek iyi bir alışkanlıktır. Herhangi bir bağımlılığınız yoksa boş bırakabilirsiniz.

  6. Fonksiyonu Dağıtın:

    Fonksiyonunuzu dağıtmak için `gcloud functions deploy` komutunu kullanın. `YOUR_FUNCTION_NAME` kısmını fonksiyonunuz için istediğiniz adla değiştirin.

    Python:

    gcloud functions deploy YOUR_FUNCTION_NAME \
        --runtime python39 \
        --trigger-http \
        --allow-unauthenticated

    Node.js:

    gcloud functions deploy YOUR_FUNCTION_NAME \
        --runtime nodejs16 \
        --trigger-http \
        --allow-unauthenticated

    Parametrelerin açıklaması:

    • `YOUR_FUNCTION_NAME`: Cloud Function'ınıza vermek istediğiniz ad.
    • `--runtime`: Fonksiyonunuz için çalışma zamanı ortamı (ör. `python39`, `nodejs16`).
    • `--trigger-http`: Fonksiyonun HTTP istekleri tarafından tetiklenmesi gerektiğini belirtir.
    • `--allow-unauthenticated`: Herkesin kimlik doğrulaması olmadan fonksiyonu çağırmasına izin verir. Uyarı: Bunu üretim ortamlarında etkinleştirirken dikkatli olun! Uygun kimlik doğrulama ve yetkilendirme uygulamayı düşünün.
  7. Fonksiyonu Test Edin:

    Dağıtımdan sonra, `gcloud` komutu fonksiyonunuzun URL'sini çıktı olarak verecektir. Daha sonra `curl` veya Postman gibi bir araç kullanarak bu URL'ye bir HTTP isteği göndererek test edebilirsiniz.

    curl YOUR_FUNCTION_URL

    Yanıtta "Hello, World!" mesajını görmelisiniz. Ayrıca bir sorgu parametresi olarak bir isim de geçirebilirsiniz:

    curl "YOUR_FUNCTION_URL?name=YourName"

    Bu, "Hello, YourName!" döndürmelidir.

HTTP İsteğini ve Yanıtını Anlama

Bir Cloud Function bir HTTP isteği tarafından tetiklendiğinde, istek hakkında bilgi içeren bir nesne alır. Bu nesne genellikle şunları içerir:

Fonksiyonunuz daha sonra şunları içeren bir HTTP yanıtı döndürmelidir:

Örnek: Farklı HTTP Metotlarını Ele Alma

Cloud Function'ınızda farklı HTTP metotlarını nasıl ele alacağınıza dair bir örnek aşağıdadır:

Python (main.py):

from flask import escape

def http_method(request):
    """Herhangi bir HTTP isteğine yanıt verir.
    Args:
        request (flask.Request): HTTP istek nesnesi.
    Returns:
        Yanıt metni veya `make_response` kullanılarak bir Response nesnesine
        dönüştürülebilen herhangi bir değer kümesi
        .
    """
    if request.method == 'GET':
        return 'Bu bir GET isteğidir!'
    elif request.method == 'POST':
        request_json = request.get_json(silent=True)
        if request_json and 'message' in request_json:
            message = escape(request_json['message'])
            return f'Bu, mesaj içeren bir POST isteğidir: {message}'
        else:
            return 'Bu, mesaj içermeyen bir POST isteğidir.'
    else:
        return 'Desteklenmeyen HTTP metodu.', 405

Node.js (index.js):

exports.httpMethod = (req, res) => {
  switch (req.method) {
    case 'GET':
      res.status(200).send('Bu bir GET isteğidir!');
      break;
    case 'POST':
      if (req.body.message) {
        const message = req.body.message;
        res.status(200).send(`Bu, mesaj içeren bir POST isteğidir: ${message}`);
      } else {
        res.status(200).send('Bu, mesaj içermeyen bir POST isteğidir.');
      }
      break;
    default:
      res.status(405).send('Desteklenmeyen HTTP metodu!');
      break;
  }
};

Güncellenmiş fonksiyonu `gcloud functions deploy` komutunu kullanarak dağıtmayı unutmayın.

HTTP Tetikleyicilerinizi Güvenli Hale Getirme

Özellikle hassas verilerle veya kritik operasyonlarla çalışırken HTTP tetikleyicileriyle çalışırken güvenlik her şeyden önemlidir. İşte bazı temel güvenlik konuları:

Kimlik Doğrulama ve Yetkilendirme

Varsayılan olarak, `--allow-unauthenticated` kullanırsanız HTTP tarafından tetiklenen Cloud Functions herkese açıktır. Çoğu üretim senaryosunda, erişimi yetkili kullanıcılara veya hizmetlere kısıtlamak isteyeceksiniz. Google Cloud, kimlik doğrulama ve yetkilendirme için çeşitli seçenekler sunar:

Girdi Doğrulama (Input Validation)

SQL enjeksiyonu veya siteler arası komut dosyası çalıştırma (XSS) gibi güvenlik açıklarını önlemek için Cloud Function'ınız tarafından alınan girdi verilerini her zaman doğrulayın. Kötü amaçlı girdilere karşı korunmak için uygun temizleme ve kaçış (escaping) tekniklerini kullanın.

HTTPS

İstemci ile fonksiyon arasındaki iletişimi şifrelemek için Cloud Function'ınıza yalnızca HTTPS üzerinden erişilebildiğinden emin olun. Google Cloud Functions otomatik olarak HTTPS uç noktaları sağlar.

Hız Sınırlaması (Rate Limiting)

Kötüye kullanımı ve hizmet reddi (DoS) saldırılarını önlemek için hız sınırlaması uygulayın. Cloud Functions'ınızı aşırı trafikten korumak için Google Cloud Armor gibi hizmetleri kullanabilirsiniz.

HTTP Tetikleyicileri İçin Kullanım Alanları

HTTP tetikleyicileri çok yönlüdür ve çok çeşitli uygulamalarda kullanılabilir. İşte bazı yaygın kullanım alanları:

Farklı Sektörlerden Örnekler

İleri Teknikler

Ortam Değişkenlerini Kullanma

Ortam değişkenleri, hassas bilgileri veya yapılandırma değerlerini kodunuza sabit olarak yazmadan Cloud Function'ınızı yapılandırmanıza olanak tanır. Ortam değişkenlerini `gcloud functions deploy` komutunu kullanarak veya Google Cloud Console'da ayarlayabilirsiniz.

gcloud functions deploy YOUR_FUNCTION_NAME \
    --runtime python39 \
    --trigger-http \
    --set-env-vars API_KEY=YOUR_API_KEY,DATABASE_URL=YOUR_DATABASE_URL

Kodunuzda, ortam değişkenlerine `os.environ` sözlüğünü (Python) veya `process.env` nesnesini (Node.js) kullanarak erişebilirsiniz.

Python:

import os

def your_function(request):
    api_key = os.environ.get('API_KEY')
    # API anahtarını fonksiyonunuzda kullanın
    return f'API Key: {api_key}'

Node.js:

exports.yourFunction = (req, res) => {
  const apiKey = process.env.API_KEY;
  // API anahtarını fonksiyonunuzda kullanın
  res.status(200).send(`API Key: ${apiKey}`);
};

Asenkron Görevleri Ele Alma

Uzun süren veya hesaplama açısından yoğun görevler için, HTTP isteğini engellemekten kaçınmak amacıyla asenkron işlemeyi kullanmak en iyisidir. Bu görevleri ayrı kuyruklara yüklemek için Google Cloud Tasks veya Cloud Pub/Sub gibi hizmetleri kullanabilirsiniz.

Hata Yönetimi ve Günlük Kaydı

Sorunları hızlı bir şekilde belirlemek ve çözmek için Cloud Functions'ınızda sağlam hata yönetimi ve günlük kaydı uygulayın. Fonksiyonlarınızdan günlükleri toplamak ve performanslarını izlemek için Google Cloud Logging'i kullanın.

En İyi Uygulamalar

Yaygın Sorunları Giderme

Sonuç

HTTP tetikleyicili Google Cloud Functions, sunucusuz uygulamalar oluşturmak için güçlü ve esnek bir yol sağlar. Bu kılavuzda tartışılan kavramları ve teknikleri anlayarak, küresel bir kitle için ölçeklenebilir, uygun maliyetli ve olay odaklı çözümler oluşturmak üzere Cloud Functions'ın gücünden yararlanabilirsiniz. Sunucusuz devrimi kucaklayın ve bulut uygulamalarınızın tüm potansiyelini ortaya çıkarın!