Zephyrnet Logosu

Amazon Redshift'ten veri tüketimini etkinleştirmek için bir REST API oluşturun

Tarih:

API (Uygulama Programlama Arayüzü), bir platformu veya uygulamayı başka bir tarafa göstermek için kullanılan bir tasarım modelidir. API'ler, programların ve uygulamaların platformlar ve hizmetlerle iletişim kurmasını sağlar ve bir yazılım mimarisi stili olarak REST (Representational State Transfer) kullanmak üzere tasarlanabilir.

OLTP'deki (çevrimiçi işlem işleme) API'ler sık ​​sık (saniyede onlarca ila yüzlerce kez) çağrılır ve birkaç bayttan kilobayta kadar küçük yükler (çıktı) sunar. Ancak, OLAP (çevrimiçi analitik işleme) oranı ters çevrilmiştir. OLAP API'leri düşük çağrı hacmine ancak büyük yüke (100 MB ila birkaç GB) sahiptir. Bu model, zaman uyumsuz işleme, işlem kapasitesini yönetme ve ölçeklendirme gibi yeni zorluklar ekler.

Bu gönderide, aşağıdakileri kullanarak bir uygulama API'si kurmayı inceleyeceğiz. Amazon Kırmızıya Kaydırma Veri API'sı, AWS Lambda, ve Amazon API Ağ Geçidi. API, kullanıcı isteklerinin eşzamansız olarak işlenmesini gerçekleştirir, kullanıcı bildirimleri gönderir, işlenen verileri Amazon Basit Depolama Hizmeti (Amazon S3) ve kullanıcı veya uygulamanın veri kümesini HTTPS üzerinden indirmesi için önceden belirlenmiş bir URL döndürür. Ayrıca bir AWS CloudFormation Kaynakların ayarlanmasına yardımcı olacak şablon, şu adreste mevcuttur: GitHub repo.

Çözüme genel bakış

Bizim kullanım durumumuzda, Acme kendi sitesinde çiçek satıyor acmeflowers.com ve müşterilerden gelen yorumları toplar. Web sitesi, farklı üreticilerin çiçek ve diğer malzemeleri müşterilere göndermesine olanak tanıyan bir self servis envanteri tutar. acmeflowers.com sarf malzemeleri azaldığında.

Acme, veri ambarı olarak Amazon Redshift'i kullanıyor. Stokların doğru kullanılabilirliğini gösteren Amazon Redshift'e envanter akışında neredeyse gerçek zamanlı değişiklikler ve güncellemeler. masa PRODUCT_INVENTORY güncellenmiş verileri içerir. Acme, envanter yönetimi süreci için envanter bilgilerini uygun maliyetli ve güvenli bir şekilde iş ortaklarına sunmak istiyor. Acme'nin ortakları Amazon Redshift kullanıyorsa, hesaplar arası veri paylaşımı potansiyel bir seçenek olabilir. İş ortakları Amazon Redshift kullanmıyorsa bu gönderide açıklanan çözümü kullanabilirler.

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

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

  1. İstemci uygulaması, API Gateway'e bir istek gönderir ve yanıt olarak bir istek kimliği alır.
  2. API Gateway, istek alıcı Lambda işlevini çağırır.
  3. İstek alıcı işlevi aşağıdaki eylemleri gerçekleştirir:
    1. durumu bir Amazon DinamoDB kontrol masası.
    2. için bir istek yazar Amazon Basit Kuyruk Hizmeti (Amazon SQS).
  4. İstek işlemcisi olan ikinci bir Lambda işlevi aşağıdaki eylemleri gerçekleştirir:
    1. Anketler Amazon SQS.
    2. Durumu DynamoDB tablosuna geri yazar.
    3. Amazon Redshift'te bir SQL sorgusu çalıştırır.
  5. Amazon Redshift, verileri bir S3 kovasına aktarır.
  6. Üçüncü bir Lambda işlevi olan anketör, DynamoDB tablosundaki sonuçların durumunu kontrol eder.
  7. Poller işlevi, Amazon S3'ten sonuçları getirir.
  8. Poller işlevi, dosyayı S3 klasöründen istekte bulunana indirmek için önceden belirlenmiş bir URL gönderir. Amazon Basit E-posta Hizmeti (Amazon SES).
  9. İstek sahibi, URL'yi kullanarak dosyayı indirir.

İş akışı ayrıca, çeşitli aşamalarda isteğin durumunu kontrol etmek için aşağıdaki adımları içerir:

  1. İstemci uygulaması veya kullanıcı, Adım 1'de oluşturulan API Gateway'e bir istek kimliği gönderir.
  2. API Gateway, durum denetimi Lambda işlevini çağırır.
  3. İşlev, durumu DynamoDB kontrol tablosundan okur.
  4. Durum, istek sahibine API Ağ Geçidi aracılığıyla döndürülür.

Önkoşullar

Örnek uygulamayı dağıtmak için aşağıdaki ön koşullara ihtiyacınız var:

Örnek uygulamayı dağıtmadan önce aşağıdaki önkoşul adımlarını tamamlayın:

  1. Şema ve tabloyu oluşturmak için sorgu düzenleyiciyi kullanarak Amazon Redshift kümesinde aşağıdaki DDL'yi çalıştırın:
    create schema rsdataapi; create table rsdataapi.product_detail( sku varchar(20)
    ,product_id int ,product_name varchar(50)
    ,product_description varchar(50)
    ); Insert into rsdataapi.product_detail values ('FLOWER12',12345,'Flowers - Rose','Flowers-Rose');
    Insert into rsdataapi.product_detail values ('FLOWER13',12346,'Flowers - Jasmine','Flowers-Jasmine');
    Insert into rsdataapi.product_detail values ('FLOWER14',12347,'Flowers - Other','Flowers-Other');

  2. yapılandırma AWS Sırları Yöneticisi Amazon Redshift kimlik bilgilerini saklamak için.
  3. yapılandırma Durum güncellemelerini göndermek ve almak için bir e-posta adresi veya dağıtım listesi ile Amazon SES.

Uygulamayı dağıtın

Uygulamayı dağıtmak için aşağıdaki adımları tamamlayın:

  1. Depoyu klonlayın ve örnek kaynak kodunu AWS SAM'in kurulu olduğu ortamınıza indirin:
    git clone https://github.com/aws-samples/redshift-application-api

  2. içeren proje dizinine geçin. template.yaml Dosya:
    cd aws-samples/redshift-application-api/assets
    export PATH=$PATH:/usr/local/opt/python@3.8/bin

  3. AWS hesap numaranızı ve bu çözümü dağıttığınız Bölge'yi güncellemek için API .yaml dosyasını değiştirin:
    sed -i ‘’ “s/<input_region>/us-east-1/g” *API.yaml
    sed -i ‘’ “s/<input_accountid>/<provide your AWS account id without dashes>/g” *API.yaml

  4. AWS SAM kullanarak uygulamayı oluşturun:
    sam build

  5. Uygulamayı AWS SAM kullanarak hesabınıza dağıtın. Doğru takip ettiğinizden emin olun Amazon S3 adlandırma kuralları, S3 klasörleri için küresel olarak benzersiz adlar sağlar:
    sam deploy -g

SAM dağıtımı, yapılandırma için aşağıdaki parametreleri sağlamanızı gerektirir:

Parametre Açıklama
RS Kümesi Kimliği Mevcut Amazon Redshift kümenizin küme tanımlayıcısı.
RSDataFetchQ Amazon Redshift tablolarınızdan verileri getirecek sorgu (örneğin, rsdataapi.product_detail nerede sku= API'den geçirilen giriş)
RSDataFileS3BucketName Amazon S3'ten gelen veri kümesinin yüklendiği S3 kovası.
RSVeritabanıAdı Amazon Redshift kümenizdeki veritabanı.
RSS3KopyaRolArn Amazon Redshift'ten Amazon S3'e dosya kopyalama erişimi olan Amazon Redshift için IAM rolü. Bu rol, Amazon Redshift kümenizle ilişkilendirilmelidir.
RSS gizli Amazon Redshift kimlik bilgileriniz için Secrets Manager ARN.
RSU kullanıcısı Amazon Redshift kümesine bağlanacak kullanıcı adı.
RsDosyaArşivBucket Sıkıştırılmış veri kümesinin indirildiği S3 kovası. Bu, yükleme paketinizden farklı olmalıdır.
RsS3KoduRepo Paketlerin veya .zip dosyasının depolandığı S3 paketi.
RsSingedURLExpTime Önceden belirlenmiş URL'nin Amazon S3'ten veri kümesini indirmesi için saniye cinsinden sona erme süresi.
RsKaynakE-postaAdresi Amazon SES'in tamamlanma durumunu göndermek için kaynak olarak kullanmak üzere yapılandırıldığı dağıtım listesinin e-posta adresi.
RsTargetE-postaAdresi Amazon SES'in tamamlama durumunu almak için hedef olarak kullanmak üzere yapılandırıldığı dağıtım listesinin e-posta adresi.
RsDurumTabloAdı İsteğin başlangıcından tamamlanmasına kadar çeşitli aşamaların durumunu yakalamak için durum tablosunun adı.

Bu şablon yalnızca Amazon Redshift Data API, Lambda ve API Gateway kullanarak bir uygulama API'sini nasıl kurabileceğinizi göstermek için tasarlanmıştır. Bu kurulum, değişiklik yapılmadan üretimde kullanılmak üzere tasarlanmamıştır.

Uygulamayı test edin

Sen kullanabilirsiniz Postacı veya API Gateway'e bağlanmak ve Amazon Redshift'ten veri kümesine erişim isteğini iletmek için başka bir uygulama. API'ler, IAM kullanıcıları aracılığıyla yetkilendirilir. Bir istek göndermeden önce, yetkilendirme türünüzü AWS SigV4 olarak seçin ve aşağıdaki değerleri girin. AccessKey ve SecretKey IAM kullanıcısı için.

Aşağıdaki ekran görüntüsü örnek bir isteği göstermektedir.

Aşağıdaki ekran görüntüsü e-posta yanıtını göstermektedir.

Aşağıdaki ekran görüntüsü, bir isteğin durumuyla birlikte örnek yanıtı gösterir. İstek kimliğini geçmeniz ve girmeniz gerekir all durum geçmişi için veya latest son durum için.

Temizlemek

Bu çözümü test etmeyi bitirdiğinizde, AWS SAM kullanarak oluşturduğunuz tüm AWS kaynaklarını temizlemeyi unutmayın.

Amazon S3 konsolu aracılığıyla yükleme ve indirme S3 paketlerini silin ve ardından SAM CLI'de aşağıdakileri çalıştırın:

sam delete

Daha fazla bilgi için bkz: sam sil.

Özet

Bu gönderide, Amazon Redshift Data API, Lambda ve API Gateway kullanan bir uygulama API'sini nasıl kurabileceğinizi gösterdik. API, kullanıcı isteklerini eşzamansız olarak işler, kullanıcı bildirimleri gönderir, işlenen verileri Amazon S3'e kaydeder ve kullanıcı veya uygulamanın veri kümesini HTTP'ler üzerinden indirmesi için önceden belirlenmiş bir URL döndürür.

Bu çözümü bir deneyin ve deneyiminizi bizimle paylaşın!


Yazarlar Hakkında

Jeetesh Srivastva AWS'de Kıdemli Yönetici Uzman Çözüm Mimarıdır. Amazon Redshift konusunda uzmandır ve Amazon Redshift ve diğer AWS Analytic hizmetlerini kullanarak ölçeklenebilir çözümler uygulamak için müşterilerle birlikte çalışır. Bankacılık, finans ve konaklama sektörü sektörlerindeki müşteriler için şirket içi ve bulut tabanlı analitik çözümler sunmak için çalıştı.

Ripunjaya Pattnaik AWS'de Kurumsal Çözümler Mimarıdır. Müşterileriyle problem çözmekten ve onların danışmanı olmaktan hoşlanır. Boş zamanlarında yeni sporları denemeyi, masa tenisi oynamayı ve film izlemeyi sever.

spot_img

En Son İstihbarat

spot_img