AWS Türkçe Blog

AWS Glue DataBrew ve Amazon 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.

Amazon 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 Amazon 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 Amazon API Gateway (akan veri gönderimi) servisleri kullanılarak Amazon Simple Storage Service’e (Amazon S3) gönderilecek. DataBrew görevleri veri dönüşümlerini gerçekleştirip, verileri Amazon PinPoint’in kampanya başlatması için hazır hale getirecek. İlgili ekipleri anormal durumlar veya hatalar konusunda uyarmak için Amazon Simple Notification Service (Amazon 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 Amazon 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 Amazon PinPoint’e aktarılır.
  5. Pazarlama ekipleri kampanya başlatmak için Amazon PinPoint’i kullanacaklar.
  6. DataBrew kullanarak veri profilleme de yapılabilir.
  7. Son olarak, Amazon Kinesis Data Firehose kullanarak Amazon PinPoint ölçüm verileri Amazon S3’ye aktarılır. Veriler Amazon Athena ve Amazon 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 Amazon PinPoint’i kullanarak kampanya başlatmasını kısıtlamak istememiz durumunda, kampanya başlatmak için Amazon PinPoint’e API çağrıları yapan AWS Amplify‘ı kullanarak basit bir web arayüzü oluşturabiliriz. Bu web portalı Amazon 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 Amazon 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. Amazon PinPoint’i kullanarak bir kampanya başlatacağız.
  5. Kinesis Data Firehose kullanarak Amazon PinPoint proje metriklerini Amazon S3’ye aktaracağız.

Kaynak veri setlerini oluşturma

Bu adımda Amazon 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 Amazon S3 veya Amazon Elastic File System’da (Amazon EFS) depolayacak şekilde yapılandırabiliriz. Bu yazı için verileri Amazon 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 Amazon 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 Amazon SNS kullanacağız. Amazon 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 Amazon 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 (Amazon 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 Amazon 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 Amazon 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.

Amazon PinPoint kullanarak bir kampanya başlatma

Segment oluşturmadan önce bir Amazon 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 Amazon PinPoint kampanyaları sayfasına bakınız.

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

Gönderilen, teslim edilen, açılan mesajlar veya buna benzer, projenizle ilgili olayları izleyebilir ve bu verileri Amazon S3 gibi AWS veri depolarına aktarmak üzere Amazon Kinesis Data Streams veya Kinesis Data Firehose’a iletebilirsiniz. Bu yazıda Kinesis Data Firehose kullanarak Amazon 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 Amazon Kinesis, sonra da Send events to an Amazon 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 Amazon S3’ye gönderildi. QuickSight’ı kullanarak olayları analiz etmek ve bir pano oluşturmak için bir Athena tablosu oluşturabilir veya Amazon 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.
  • Amazon 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ı Amazon CloudWatch‘a yazdırın ve olası problem durumları için CloudWatch alarmlarını ayarlayın.
  • DataBrew görevlerinin ve Amazon 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 Amazon 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 Amazon 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.