AWS Türkçe Blog

AWS Glue DataBrew ve HAQM PinPoint entegrasyonu ile Pazarlama Kampanyaları Başlatma

Orijinal makale: Link (Suraj Shivananda ve Surbhi Dangi)

Pazarlama ekipleri, pazarlama kampanyaları başlatmak için kullanabilecekleri bir tüketici veri seti sağlamak için genellikle veri mühendislerinden destek almak durumunda kalıyorlar. Bu da bazen kampanyaların başlatılmasında gecikmelere neden olabiliyor ve hatta veri mühendislerinin zamanlarını harcayıp verimliliklerini düşürebiliyor. Kampanyalar genellikle kod ağırlıklı veya lisanslı araçlar kullanan karmaşık çözümler kullanılarak başlatılıyor. Hem çıkarma (extract), dönüştürme (transform) ve yükleme (load) yani bilinen kısaltma haliyle ETL, hem de kampanya başlatma süreçleri, oluşturması zaman alan ve sürdürülebilirliği için bakımlarına ekstra efor ve mesai gerektiren işler için kodlama bilen mühendislere ihtiyaç duyar.

HAQM PinPoint, AWS Glue DataBrew ve AWS Lambda gibi AWS servislerini entegre ederek kampanya başlatma süreçlerini basitleştirebilirsiniz. ETL adımları için DataBrew’u (görsel veri hazırlama servisi), kampanyaları başlatmak için HAQM PinPoint’i (bir giden ve gelen pazarlama iletişimi servisi) ve uçtan uca otomasyon elde etmek için Lambda fonksiyonlarını kullanabilirsiniz. Bu çözüm canlıya alma süresini kısaltmaya yardımcı olur, kodlama gerektirmediği ve lisans maliyeti içermediği için teknik yetkinliği daha az olan kişiler tarafından kolaylıkla uygulanabilir.

Bu yazıda, uçtan uca iş akışını ve bu çözümün nasıl uygulanacağını inceleyeceğiz.

Çözüme Genel Bakış

Bu çözümde kaynak veri setleri SFTP (toplu veri gönderimi) veya HAQM API Gateway (akan veri gönderimi) servisleri kullanılarak HAQM Simple Storage Service’e (HAQM S3) gönderilecek. DataBrew görevleri veri dönüşümlerini gerçekleştirip, verileri HAQM PinPoint’in kampanya başlatması için hazır hale getirecek. İlgili ekipleri anormal durumlar veya hatalar konusunda uyarmak için HAQM Simple Notification Service (HAQM SNS) aracılığıyla bir uyarı sistemi içeren uçtan uca otomasyon elde etmek için Lambda servisinden yararlanılacak.

İş akışı aşağıdaki adımları içerir:

  1. AWS Komut Satırı Arabirimi (AWS CLI) komutları ve AWS erişim anahtarları kullanılarak AWS aktarım servisi (SFTP) veya bir API Gateway servisi aracılığıyla HAQM S3’ye veri yüklenebilir veya aktarılabilir.
  2. ETL görevlerini gerçekleştirmek için DataBrew kullanılacak.
  3. ETL görevleri ya tetiklenerek (Lambda fonksiyonları kullanılarak) ya da zamanlı olarak başlatılabilir.
  4. DataBrew’de işlenen veri seti Lambda fonksiyonları kullanılarak tetiklenir ve segmentler olarak HAQM PinPoint’e aktarılır.
  5. Pazarlama ekipleri kampanya başlatmak için HAQM PinPoint’i kullanacaklar.
  6. DataBrew kullanarak veri profilleme de yapılabilir.
  7. Son olarak, HAQM Kinesis Data Firehose kullanarak HAQM PinPoint ölçüm verileri HAQM S3’ye aktarılır. Veriler HAQM Athena ve HAQM QuickSight kullanılarak daha fazla analiz için değerlendirilebilir.

Aşağıdaki şema çözüm mimarimizi göstermektedir.

Ek bir adım olarak kullanıcıların AWS Web konsolundan HAQM PinPoint’i kullanarak kampanya başlatmasını kısıtlamak istememiz durumunda, kampanya başlatmak için HAQM PinPoint’e API çağrıları yapan AWS Amplify‘ı kullanarak basit bir web arayüzü oluşturabiliriz. Bu web portalı HAQM PinPoint tarafından oluşturulan temel metrikleri de sağlayabilir. Ayrıca herkesin kampanya başlatmak için kullanabileceği bir ürün veya platform olarak da kullanılabilir.

Çözümü uygulamak için aşağıdaki adımları tamamlayacağız:

  1. Hem toplu (batch) alım hem de HAQM Kinesis akan veri servislerini kullanarak kaynak veri setlerini hazırlayacağız.
  2. Kaynak verileri dönüştüren ve onu kampanyaya hazır hale getiren otomatikleştirilmiş bir veri alma akışı oluşturacağız.
  3. DataBrew veri profil görevi oluşturacağız. Bu sayede profil ölçümlerini görüntüleyebilir ve kaynak verilerde herhangi bir anormallik olması durumunda ekipleri uyarabiliriz.
  4. HAQM PinPoint’i kullanarak bir kampanya başlatacağız.
  5. Kinesis Data Firehose kullanarak HAQM PinPoint proje metriklerini HAQM S3’ye aktaracağız.

Kaynak veri setlerini oluşturma

Bu adımda HAQM S3’de hem SFTP sunucusundan hem de Kinesis’ten gelen verilerle kaynak veri setlerini oluşturacağız.

İlk olarak “kaynak”, “işlenmiş” ve “kampanyaya-hazır” olmak üzere verileri depolamak için bir S3 Klasörü (Bucket) oluşturacağız.

Verileri birçok farklı yöntemle AWS’e alabiliriz. Bu yazı için toplu (batch) ve akan (streaming) veri alımına yönelik yöntemleri ele alacağız.

Toplu veri alım işlemleri için kaynak veri alımını yapacak SFTP sunucusu oluşturuyoruz. SFTP sunucularını, verileri HAQM S3 veya HAQM Elastic File System’da (HAQM EFS) depolayacak şekilde yapılandırabiliriz. Bu yazı için verileri HAQM S3’de depolamak için bir SFTP sunucusu yapılandıracağız.

Akan veri alım işlemleri için API Gateway ve Kinesis kullanıyoruz. Verileri doğrudan Kinesis’e de iletebiliriz, ancak hesaplar arası ve kimlik doğrulama sorunlarını ele almak kolay olduğu için API Gateway ile birlikte kullanmayı tercih ediyoruz. API Gateway ve Kinesis akışını entegre etme adımlarını öğrenmek için Tutorial: Create a REST API as an HAQM Kinesis proxy in API Gateway sayfasına bakınız.

Her veri seti kendi S3 klasöründe olmalıdır: s3://<bucket-name>/src-files/datasource1/, s3://<bucket-name>/src-files/datasource2/ gibi.

Otomatik veri alma akışı oluşturma

Bu adımda kaynak verileri dönüştüren ve kampanyaya hazır hale getiren uçtan uca otomatikleştirilmiş veri alma akışını oluşturacağız.

Veri hazırlama ve veri kalitesi için DataBrew, otomasyon ve uyarı iletişimi için Lambda ve HAQM SNS kullanacağız. HAQM PinPoint daha sonra bu verileri kampanya başlatmak üzere kullanabilir.

Akışımız aşağıdaki fonksiyonları gerçekleştirecek:

  1. Kaynak veri setlerindeki dönüşümleri çalıştırma.
  2. Veri kampanyasını hazır hale getirmek için veri setlerini birleştirme.
  3. Veri kalitesi kontrollerini gerçekleştirme.
  4. Veri kalitesinde anormallik olması durumunda ilgili ekiplere uyarı gönderme.
  5. DataBrew görevinin başarısız olması durumunda ilgili ekiplere uyarı gönderme.
  6. Kampanyaya hazır setini HAQM PinPoint’e bir segment olarak yükleme.

Her veri setinde gerekli dönüşümleri gerçekleştirmek ve tüm dönüştürülmüş veri setlerini nihai bir veri setinde birleştirmek için tek bir DataBrew projesi kullanabiliriz ya da her veri seti için ayrı ayrı DataBrew projeleri ve dönüştürülmüş tüm veri setlerini birleştiren ayrıca bir DataBrew projesi de kullanabiliriz. Her veri seti için ayrı projelere sahip olmanın avantajı, tüm veri kaynaklarını izole ediyor olmamızdır, böylece bir veri kaynağındaki bir sorun diğerini etkilemez. Bu yazıda bu ikinci yaklaşımı kullanacağız.

DataBrew görevlerini oluşturmaya ilişkin detaylar için AWS dokümantasyonlarını inceleyebilirsiniz (bkz: Creating and working with AWS Glue DataBrew recipe jobs).

DataBrew 250’den fazla hazır dönüşüm fonksiyonu sağlar. Bu yazıda kaynak veri setlerini temizlemek için aşağıdaki dönüşüm fonksiyonlarından yararlanacağız:

  • Sütun değerlerini doğrulama ve eksik değerler için varsayılan değerleri ekleme
  • Sütun değerlerini standart bir biçime dönüştürme, örneğin tarih değerlerini standartlaştırma veya küçük harfleri büyük harfe dönüştürme (HAQM PinPoint büyük / küçük harfe duyarlıdır)
  • Özel karakterleri temizleme (gerekiyorsa)
  • Değerleri bölme (gerekiyorsa)
  • Tekrar eden değerleri kontrol etme
  • Denetim sütunları ekleme

Ayrıca reçeteye birkaç veri kalitesi değerlendirme adımı da ekleyebilirsiniz.

DataBrew görevleri ne zaman çalışacağı baştan belirlenerek başlatılabilir veya bir Lambda fonksiyonu kullanılarak tetiklenebilir. Bu yazıda bireysel veri kaynaklarını işleyen görevleri olaya bağlı tetiklenecek şekilde yapılandıracağız. Tüm veri setlerini birleştiren son görevi ise zamanlayarak çalıştıracağız. Olaya bağlı tetiklenerek çalışan DataBrew görevlerini kullanmanın avantajı yalnızca bir kaynak dosyanız varsa tetiklenmesidir, bu da maliyetleri düşürmeye yardımcı olur.

Önce bir Lambda fonksiyonunu tetikleyen bir S3 olayı konfigürasyonunu yapacağız. Fonksiyon, S3 anahtar değerine dayalı olarak DataBrew görevini tetikleyecek. Fonksiyon için aşağıdaki kodu (Boto3) kullanacağız:

import boto3
 
client = boto3.client('databrew')

def lambda_handler(event, context):
record=event['Records'][0]
bucketname = record['s3']['bucket']['name']
key = record['s3']['object']['key']
print('key: '+key)
  
if key.find('SourceFolder1') != -1:
print('processing source1 file')
response = client.start_job_run(Name='databrew-process-data-job1')
if key.find('SourceFolder2') != -1:
print('processing source2 file')
response = client.start_job_run(Name='databrew-process-data-job2')
Python

İşlenmiş veriler s3://<bucket-name>/src-files/process-data/data-source1/ konumunda depolanacak.

Sonraki adım olarak işlenmiş veri dosyalarını en son haline, yani kampanyaya hazır bir veri setine birleştirecek görevi yaratıyoruz. Görevi sadece son 24 saat içinde bırakılan dosyaları birleştirecek şekilde de yapılandırabiliriz.

Kampanya için kullanılacak birleştirilmiş son veri seti s3://<bucket-name>/src-files/campaign-ready/ konumunda depolanacak. Bu veri seti artık HAQM PinPoint’e girdi olarak aktarılıp kullanılmaya hazır.

DataBrew veri profili görevi oluşturma

Önceki adımlarda tanımlanan veri setlerinden herhangi birinde bir veri profili görevi çalıştırmak için DataBrew’u kullanacağız. Verilerinizin profilini çıkardığınızda DataBrew, veri profili adı verilen bir rapor oluşturur. Bu rapor, örnekteki satır sayısı ve her sütundaki benzersiz değerlerin dağılımı gibi istatistikleri görüntüler. Bu yazıda raporu okumak, anormallikleri tespit etmek ve daha fazla işlem için ilgili ekiplere HAQM SNS kullanarak uyarılar göndermek için Lambda fonksiyonlarını kullanacağız.

  1. DataBrew konsolunda, Datasets sayfasında, listelenen veri setlerinden profilini oluşturmak istediğiniz bir veri setini seçin.
  2. Run data profile’a tıklayın.

  3. Job Name alanına görev için bir isim yazın.
  4. Data Sample alanında, veri seti örneklemesi için ya tüm veriyi Full dataset işaretleyin ya da belli bir sayıda veriyi örneklemek için Custom sample seçin. Bu örnekte Custom Sample seçip 20.000 satır örnek veriyi kullandıracağız.

  5. Job output settings bölümünde profil görevinin çıktısı olarak oluşacak dosyaların depolanacağı S3 klasör bilgisini S3 location alanına yazın.
  6. İsterseniz dosyaları şifrelemek için Enable encryption for job output file seçeneğini işaretleyebilirsiniz.
  7. Opsiyonel olarak profil konfigürasyonları gibi ayarları düzenleyebilirsiniz; örneğin profil görevinde çalışacak sunucu sayısı, görev zaman aşım süreleri ve tekrar deneme sayısı; zamanlayıcılar ve etiketler gibi.
  8. Veri profil hazırlama görevi için bir AWS Identity and Access Management (IAM) rolü seçiniz (yeni bir rol de oluşturabilirsiniz).
  9. Create and run job butonuna tıklayın.


    Görev başarıyla tamamlandıktan sonra DataBrew görev metriklerini sağlar. Örneğin, aşağıdaki ekran görüntüsü Dataset Preview sekmesini gösteriyor.
    Aşağıdaki ekran görüntüsü Data profile overview sekmesini gösteriyor.

    Bu sekme de sütun ayrıntılarının bir özetini içeriyor.

    Aşağıdaki ekran görüntüsü Column Statistics sekmesini gösteriyor.

    Bir sonraki adımda profil çıktısı olan dosyayı kullanarak alarmları kuracağız.

  10. Lambda fonksiyonu tetiklemek üzere S3 olay konfigürasyonunu yapın.

Fonksiyon, profil çıktısı dosyayı okur ve verilerdeki anormallikleri kontrol eder. Anormallikleri; örneğin, bir sütun içinde toplam eksik veri alanı sayısı 10’dan büyük ise fonksiyon anormalliği tespit edip bir SNS uyarısı verebilir, diye tanımlayabiliriz.

HAQM PinPoint kullanarak bir kampanya başlatma

Segment oluşturmadan önce bir HAQM PinPoint projesi oluşturmak gerekiyor. Segment oluşturma işlemi şu şekilde otomatikleştirilecek: Son DataBrew görevi kampanya için kullanılacak verileri yüklediğinde, S3 olayı bir Lambda fonksiyonunu tetikleyecek ve bu lambda fonksiyonu da yeni bir temel segment oluşturacak. Temel segmentler sıfırdan oluşturulabilir ya da mevcut segment güncellenebilir; bu yazıda yeni bir segment oluşturacağız. Lambda fonksiyonu için aşağıdaki kodu (Boto3) kullanacağız:

import boto3
import time
from datetime import datetime

now = datetime.now() # current date and time

date_time = now.strftime("%Y_%m_%d")

segname = segment_name_'+date_time

time.sleep(60)


client = boto3.client('pinpoint')

def lambda_handler(event, context):

response = client.create_import_job(
ApplicationId='xxx-project-id-from-pinpoint',
ImportJobRequest={
'DefineSegment': True,
'Format': 'CSV',
'RoleArn': 'arn:aws:iam::xxx-accountid:role/service-role/xxx_pinpoint_role',
'S3Url': 's3://<xxx-bucketname>/campaign-ready',
'SegmentName': segname
}
)

print(response)
Python

Dinamik segmentler oluşturup bir kampanya başlatmak için bu temel segmenti kullanabilirsiniz. Daha fazla bilgi için HAQM PinPoint kampanyaları sayfasına bakınız.

Kinesis Data Firehose kullanarak HAQM PinPoint proje olaylarını HAQM S3’ye aktarma

Gönderilen, teslim edilen, açılan mesajlar veya buna benzer, projenizle ilgili olayları izleyebilir ve bu verileri HAQM S3 gibi AWS veri depolarına aktarmak üzere HAQM Kinesis Data Streams veya Kinesis Data Firehose’a iletebilirsiniz. Bu yazıda Kinesis Data Firehose kullanarak HAQM PinPoint projesinde olay akışlarını etkinleştirmeden önce mesaj (email, sms vb.) gönderim akışımızı oluşturacağız.

  1. Firehose gönderim akışınızı oluşturun. Olay akışı varsayılan haliyle devre dışıdır.
  2. Edit’i seçin.
  3. Önce Stream to HAQM Kinesis, sonra da Send events to an HAQM Kinesis Data Firehose delivery stream seçin.
  4. Firehose’da oluşturduğunuz gönderim akışını seçin.
  5. IAM role için DataBrew’un otomatik olarak yeni bir rol oluşturmasına veya mevcut bir rolü kullanmasına izin verebilirsiniz.
  6. Save butonuna tıklayıp, kaydedin.

Olaylar artık HAQM S3’ye gönderildi. QuickSight’ı kullanarak olayları analiz etmek ve bir pano oluşturmak için bir Athena tablosu oluşturabilir veya HAQM Kinesis Data Analytics‘i kullanabilirsiniz.

Güvenlik ile ilgili en iyi uygulamalar

Güvenlik tehditlerini azaltmak için aşağıdaki en iyi uygulamaları göz önünde bulundurmanızda fayda var:

  • Yalnızca gerekli servislere erişim sağlamak için IAM rolleri oluştururken dikkatli olun.
  • HAQM SNS aracılığıyla e-posta gönderiyorsanız, kişilerin harici e-posta adreslerini hedeflemek için otomatik oluşturulmuş e-postaların kullanılma olasılığını en aza indirmek için yalnızca doğrulanmış veya abone olmuş alıcılara e-posta uyarıları gönderdiğinizden emin olun.
  • Kullanıcı anahtarları yerine IAM rollerini kullanın.
  • Log’ları HAQM CloudWatch‘a yazdırın ve olası problem durumları için CloudWatch alarmlarını ayarlayın.
  • DataBrew görevlerinin ve HAQM Pinpoint kampanyalarının düzenli yedeklerini alın.
  • Gelen ve giden trafik için ağ erişimini en düşük ayrıcalıkla sınırlayın.
  • Yalnızca gerekli verileri tutmak ve gereksiz verileri silmek için yaşam döngüsü kurallarını etkinleştirin.
  • AWS KMS (SSE-KMS) veya HAQM S3 (SSE-S3) kullanarak sunucu tarafında şifrelemeyi etkinleştirin.
  • Kaynak verilerini yedeklemenin gerekli olduğunu düşünüyorsanız, AWS Bölgeler arası veri replikasyonunu etkinleştirin.

Temizleme

Kaynakların kullanılmaya devam etmesi durumunda oluşacak maliyetlerden kaçınmak için bu yazı kapsamında oluşturduğunuz kaynakları temizleyin:

  • S3 Bucket
  • SFTP Sunucusu
  • DataBrew kaynakları
  • PinPoint kaynakları
  • Firehose gönderi akışı (kullandıysanız)
  • Athena tabloları ve QuickSight panoları (kullandıysanız)

Sonuç

Bu yazıda ETL gerçekleştirmek için DataBrew, kampanyaları başlatmak için HAQM PinPoint ve süreci otomatikleştirmek için Lambda kullanarak otomatik bir iş akışının nasıl uygulanacağını anlattık. Bu çözüm canlı ortama geçişe kadar geçen süreyi azaltmaya yardımcı olur, kodlama gerektirmediği için uygulanması kolaydır ve herhangi bir lisans maliyeti içermez. Bu çözümü kendi veri kümeleriniz için deneyebilirsiniz.