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:
- İstemci uygulaması, API Gateway'e bir istek gönderir ve yanıt olarak bir istek kimliği alır.
- API Gateway, istek alıcı Lambda işlevini çağırır.
- İstek alıcı işlevi aşağıdaki eylemleri gerçekleştirir:
- durumu bir Amazon DinamoDB kontrol masası.
- için bir istek yazar Amazon Basit Kuyruk Hizmeti (Amazon SQS).
- İstek işlemcisi olan ikinci bir Lambda işlevi aşağıdaki eylemleri gerçekleştirir:
- Anketler Amazon SQS.
- Durumu DynamoDB tablosuna geri yazar.
- Amazon Redshift'te bir SQL sorgusu çalıştırır.
- Amazon Redshift, verileri bir S3 kovasına aktarır.
- Üçüncü bir Lambda işlevi olan anketör, DynamoDB tablosundaki sonuçların durumunu kontrol eder.
- Poller işlevi, Amazon S3'ten sonuçları getirir.
- 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).
- İ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:
- İstemci uygulaması veya kullanıcı, Adım 1'de oluşturulan API Gateway'e bir istek kimliği gönderir.
- API Gateway, durum denetimi Lambda işlevini çağırır.
- İşlev, durumu DynamoDB kontrol tablosundan okur.
- 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:
- Şema ve tabloyu oluşturmak için sorgu düzenleyiciyi kullanarak Amazon Redshift kümesinde aşağıdaki DDL'yi çalıştırın:
- yapılandırma AWS Sırları Yöneticisi Amazon Redshift kimlik bilgilerini saklamak için.
- 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:
- Depoyu klonlayın ve örnek kaynak kodunu AWS SAM'in kurulu olduğu ortamınıza indirin:
- içeren proje dizinine geçin.
template.yaml
Dosya: - 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:
- AWS SAM kullanarak uygulamayı oluşturun:
- 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 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:
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.