AWS Lambda - Hızlı Kılavuz
AWS Lambdaherhangi bir sunucu olmadan bilgi işlem yapmayı içeren sunucusuz bilgi işlem gerçekleştiren bir hizmettir. Kod, S3 klasörüne dosya ekleme / kaldırma, Amazon dynamo dB tablolarını güncelleme, Amazon API ağ geçidinden HTTP isteği gibi AWS hizmetlerindeki olayların yanıtına göre yürütülür.
İle çalışmak için AWS LambdaAWS Lambda hizmetinde kodu aktarmamız gerekiyor. Altyapı, işletim sistemi, sunucu bakımı, kod izleme, günlükler ve güvenlik gibi diğer tüm görevler ve kaynaklar AWS tarafından karşılanır.
AWS LambdaJava, NodeJS, Python, C # ve Go gibi dilleri destekler. AWS Lambda'nın yalnızca AWS hizmetleriyle çalışacağını unutmayın.
AWS Lambda nedir?
Resmi belgelerinde verilen AWS Lambda tanımı aşağıdaki gibidir:
AWS Lambda, sunucuları sağlamadan veya yönetmeden kod çalıştırmanıza olanak tanıyan bir bilgi işlem hizmetidir. AWS Lambda, kodunuzu yalnızca ihtiyaç duyulduğunda yürütür ve günlük birkaç istekten saniyede binlerce istekten otomatik olarak ölçeklendirilir. Yalnızca tükettiğiniz işlem süresi için ödeme yaparsınız - kodunuz çalışmadığında ücret alınmaz.
AWS Lambda Nasıl Çalışır?
AWS Lambda'nın çalışmasını beş kolay adımda açıklayan blok şema aşağıda gösterilmiştir -
Step 1 − AWS lambda kodunu AWS lambda'nın desteklediği herhangi bir dilde (NodeJS, Java, Python, C # ve Go) yükleyin.
Step 2 − Bunlar, AWS lambda'nın tetiklenebileceği birkaç AWS hizmetidir.
Step 3 −Yükleme koduna ve tetikleyicinin gerçekleştiği olay ayrıntılarına sahip AWS Lambda. Örneğin Amazon S3, Amazon API Gateway, Dynamo dB, Amazon SNS, Amazon Kinesis, CloudFront, Amazon SES, CloudTrail, mobil uygulama vb.
Step 4 − AWS Lambda Kodunu yalnızca aşağıdaki senaryolar altında AWS hizmetleri tarafından tetiklendiğinde çalıştırır:
- Kullanıcı, dosyaları S3 klasörüne yükler
- http uç nokta URL'sini al / gönder isabet aldı
- veriler dinamo dB tablolarına eklenir / güncellenir / silinir
- bildirim almak
- veri akışı koleksiyonu
- web sitesinin barındırılması
- e-posta gönderme
- mobil uygulama vb.
Step 5 − AWS'nin yalnızca AWS lambda kodu yürütüldüğünde ücret aldığını, başka türlü olmadığını unutmayın.
AWS Lambda kullanmanın avantajları
AWS Lambda, üzerinde çalışırken birçok avantaj sunar. Bu bölüm bunları ayrıntılı olarak tartışmaktadır -
Kodla çalışma kolaylığı
AWS Lambda, kodunuzu yüklemeniz için size altyapı sağlar. Kodu korumaya özen gösterir ve gerekli olay gerçekleştiğinde kodu tetikler. Kod için gereken belleği ve zaman aşımını seçmenize olanak tanır.
AWS Lambda, olay tetikleyicilerine göre paralel istekleri de yürütebilir.
Günlük Sağlama
AWS Lambda, bir kodun kaç kez çalıştırıldığının ve yürütme için harcanan sürenin, tüketilen belleğin vb. Ayrıntılarını verir. AWS CloudWatch, yürütme akışının anlaşılmasına ve kodun hata ayıklamasına yardımcı olan tüm günlükleri toplar.
Kullanıma göre faturalandırma
AWS Lambda faturalandırması, bellek kullanımı, talep edilen ve minimum 100 ms'lik artışlarla faturalandırılan yürütme üzerinden yapılır. Dolayısıyla, 500 ms'lik bir yürütme için, faturalama her 100 ms'de bir olacaktır. AWS lambda kodunuzun 500 ms'de yürütüleceğini belirtirseniz ve yürütme süresi yalnızca 200 ms ise, AWS sizi yalnızca alınan süre için, yani 500 ms yerine 200 ms yürütme için faturalandırır. AWS, her zaman kullanılan yürütme süresi için ücret alır. İşlev uygulanmazsa ödeme yapmanız gerekmez.
Çoklu Dil Desteği
AWS Lambda, Node gibi popüler dilleri destekler. js, Python, Java, C # ve Go. Bunlar yaygın olarak kullanılan dillerdir ve tüm geliştiriciler AWS Lambda için kod yazmayı kolay bulacaktır.
Kod yazma ve dağıtma kolaylığı
Kod yazmak ve dağıtmak için Lambda için birçok seçenek vardır. Kodunuzu yazmak için AWS çevrimiçi düzenleyicisini, Visual Studio IDE'yi veya Eclipse IDE'yi kullanabilirsiniz. Ayrıca, AWS Lambda kodunun yazılmasını ve dağıtılmasını kolaylaştıran sunucusuz çerçeve desteğine sahiptir. AWS konsolunun yanı sıra, kod oluşturmak ve dağıtmak için AWS-cli'ye sahibiz.
Diğer özellikler
AWS ücretsiz katmanına giriş yaparak AWS Lambda'yı ücretsiz olarak kullanabilirsiniz. Size 1 yıl boyunca ücretsiz hizmet verir. AWS ücretsiz kullanımı tarafından sunulan ücretsiz hizmetlere bir göz atın.
AWS Lambda kullanmanın dezavantajları
AWS Lambda, birçok avantajına rağmen aşağıdaki dezavantajlara sahiptir:
Küçük projeler için uygun değildir.
Kodunuzu dikkatlice analiz etmeniz ve bellek ve zaman aşımına karar vermeniz gerekir. Eğer fonksiyonunuz tahsis edilenden daha fazla zamana ihtiyaç duyuyorsa, üzerinde belirtilen zaman aşımına göre sonlandırılacak ve kod tam olarak çalıştırılmayacaktır.
AWS Lambda, altyapı için tamamen AWS'ye dayandığından, kodunuz gerektiriyorsa ek yazılım yükleyemezsiniz.
AWS Lambda'yı Tetikleyen Olaylar
AWS Lambda'yı tetikleyebilecek olaylar aşağıdaki gibidir:
- Bir S3 nesnesine giriş
- Dynamo DB tablosundaki verilerin eklenmesi, güncellenmesi ve silinmesi
- SNS'den push bildirimleri
- API Ağ Geçidine GET / POST çağrıları
- Görüntüleyicide üstbilgi değişikliği veya CloudFront'ta kaynak isteği / yanıtı
- AWS Kinesis veri akışındaki günlük girişleri
- CloudTrail'de günlük geçmişi
AWS Lambda'nın Kullanım Örnekleri
AWS Lambda, esas olarak arka plan işlemlerini çalıştırmak için kullanılan bir bilgi işlem hizmetidir. Diğer AWS hizmetleriyle kullanıldığında tetiklenebilir. AWS Lambda'yı kullanabileceğimiz AWS hizmetlerinin listesi aşağıda verilmiştir -
S3 Nesnesi ve AWS Lambda
Amazon S3, S3'te herhangi bir dosya yüklemesi olduğunda olay ayrıntılarını AWS Lambda'ya iletir. Dosya yükleme veya dosyanın silinmesi ya da dosyanın taşınmasıyla ilgili ayrıntılar AWS Lambda'ya iletilir. AWS Lambda'daki kod, olay ayrıntılarını aldığında gerekli adımı atabilir. Örneğin, S3'e eklenen görüntünün küçük resmini oluşturma.
DynamoDB ve AWS Lambda
DynamoDB, tabloya veri eklendiğinde, güncellendiğinde ve silindiğinde AWS Lambda'yı tetikleyebilir. AWS Lambda olayı, ekleme / güncelleme veya silme ile ilgili AWS DynamoDB tablosunun tüm ayrıntılarını içerir.
API Ağ Geçidi ve AWS Lambda
API Gateway, GET / POST yöntemlerinde AWS Lambda'yı tetikleyebilir. Bir form oluşturabilir ve ayrıntıları API Gateway uç noktasıyla paylaşabilir ve daha ileri işlemler için AWS Lambda ile kullanabiliriz, örneğin DynamoDB tablosundaki verilerin girişini yapabiliriz.
SNS ve AWS Lambda
SNS push bildirimi, SMS gönderimi vb. İçin kullanılır. SNS'de herhangi bir push bildirimi olduğunda AWS lambda'yı tetikleyebiliriz. Ayrıca tetikleyiciyi aldığında AWS Lambda'dan telefon numarasına SMS gönderebiliriz.
Planlanmış Olaylar ve AWS Lambda
Zamanlanmış Olaylar, cron işleri için kullanılabilir. Görevi normal zaman düzeninde gerçekleştirmek için AWS Lambda'yı tetikleyebilir.
CloudTrail ve AWS Lambda
CloudTrail, hesaptaki günlüklerin izlenmesinde yardımcı olabilir. CloudTrail günlüklerini daha fazla işlemek için AWS Lambda'yı kullanabiliriz.
Kinesis ve AWS Lambda
Kinesis, web sitesi tıklamalarından, günlüklerden, sosyal medya akışlarından gelen gerçek zamanlı izleme verilerini yakalamak / depolamak için kullanılır ve AWS Lambda'ya yönelik bir tetikleyici bu günlüklerde ek işlemler yapabilir.
CloudFront ve Lambda @ Edge
CloudFront, web sitenizi barındırabileceğiniz bir içerik dağıtım ağıdır ve Lambda @ Edge, izleyici isteği, kaynak talebi, kaynak yanıtı ve izleyici yanıtından gelen başlıkları işlemek için kullanılabilir. Üstbilgi değişikliği, çerez verilerini değiştirme, URL yeniden yazma, kullanıcıya geri gönderilen yanıtı değiştirmek için AB testi için kullanılan, güvenlik amacıyla fazladan üstbilgi bilgisi ekleme gibi görevleri içerir.
AWS Lambda ile çalışmaya başlamadan önce Amazon konsolunda oturum açmanız gerekir. AWS Lambda iki IDE'yi destekler:Visual studio ve Eclipse. Bu bölümde, AWS Lambda'nın kurulumunu ayrıntılı olarak tartışacağız.
AWS Konsolunda oturum açma oluşturun
Oturum açma bilgilerinizi Amazon ücretsiz katmanını kullanarak AWS Konsolunda ücretsiz olarak oluşturabilirsiniz. Amazon hizmetlerinden yararlanmak için amazon ile bir giriş oluşturmak için aşağıda verilen bu adımları takip edebilirsiniz -
Aşama 1
Git https://aws.amazon.com/free/ve ücretsiz hesap oluştur'a tıklayın. Ekran görüntüsünü aşağıda verildiği gibi görebilirsiniz -
Adım 2
Tıklamak Create a Free Account düğmesi ve aşağıda gösterildiği gibi ekrana yönlendirileceksiniz -
Şimdi, yukarıda gösterilen bu formda seçiminize göre e-posta adresi, şifre ve AWS hesap adı ayrıntılarını girin ve tıklayın Continue.
Aşama 3
Şimdi, ekranı aşağıda gösterildiği gibi bulabilirsiniz -
Bu forma gerekli tüm ayrıntıları girin.
Seçilen ülkeye göre ödenmesi gereken minimum ücretler olduğunu unutmayın. Aynısı, girilen ayrıntılar doğrulandıktan sonra iade edilir. Ücretsiz hesabı oluşturmak için kredi veya banka kartı bilgilerine ihtiyacınız var. Hintli kullanıcılar içinRs 2/- düşülür ve ABD için $1 Kullanıcı doğrulandıktan sonra aynı kart kullanıcısına iade edilir.
Lütfen hesabın ücretsiz olduğunu ve hizmetlerin kullanımının sınırlı olduğunu unutmayın. Kullanım sınırı aşarsa, kullanıcı bunun için ücretlendirilecektir.
Ayrıntılar yukarıda gösterilen forma girildikten sonra tıklayın Create Account and Continue.
Aşağıda gösterildiği gibi bir sonraki ekrana yönlendirileceksiniz.
4. adım
Kredi kartı veya banka kartı olan ödeme ayrıntılarını, son kullanma tarihi ve kart sahibinin adı ile birlikte aşağıda gösterildiği gibi girmeniz gerekir -
Adım 5
Tüm ayrıntılar girildikten sonra tıklayın Secure Submit ve kartı banka ile doğrulayacak ve size OTPkarta bağlı olan cep telefonunuzda. Aşağıda gösterildiği gibi bir pencere bulabilirsiniz -
Şimdi, girin OTP detaylar ve tıklayın Make Payment. Seçilen ülkeye göre ücretlendirilirsiniz.
6. Adım
Ödeme tamamlandıktan sonraki adım telefon doğrulamasıdır. Cep telefonu numaranızı aşağıda gösterildiği gibi girmeniz gerekiyor -
Ayrıntılar doldurulduktan sonra tıklayın Call Me Now. AWS, otomatikleştirilmiş sistemi kullanarak hemen arayacaktır. Çağrı sırasında istendiğinde, AWS sitenizde görünecek 4 basamaklı numarayı telefon tuş takımınızı kullanarak telefonunuza girin. Bu, numaranızı doğrulayacak ve giriş oluştururken başlangıçta belirtilen posta kimliğine posta etkinleştirmesini alacaksınız.
7. Adım
Posta bağlantısını tıklayın ve hesap adını veya e-posta kimliğini ve parolayı girin ve aşağıda gösterildiği gibi AWS hizmetlerinde oturum açın -
Hesap adı yukarıda gösterildiği gibi sağ üst köşede görüntülenir. Artık AWS Lambda hizmetini kullanmaya başlayabilirsiniz. AWS Lambda hizmeti için desteklenen diller NodeJS, Python, Java, C # ve Go'dur.
Visual Studio 2017 Kurulumu
AWS ile uyumlu 2 IDE vardır: Visual Studio ve Eclipse. Bu bölümde, Visual studio 2017'nin Windows, Linux Mac'e kurulumunu tartışacağız. Visual Studio'nun resmi sitesine gidin:https://www.visualstudio.com/downloads/. Karşılama ekranını gösterildiği gibi bulabilirsiniz -
Topluluk sürümünü indirin ie Visual Studio Community 2017artık pratik için ücretsiz. Kurulduktan sonra, daha sonra kullanılacak paketleri seçmeniz gereken kurulum adımlarında sizi çalıştıracaktır. Seçebilirsin nodejs, python, c# daha sonra çalışabilmemiz için paket.
Visual Studio 2017 için AWS Toolkit Desteği
Visual Studio 2017'yi yükledikten sonra, Visual Studio 2017 için AWS Toolkit desteğini yüklemek için verilen adımları izlemeniz gerekecektir -
Aşama 1
Git https://aws.amazon.com/visualstudio/ ve Visual Studio için AWS araç setini indirin. Ekran aşağıda gösterildiği gibidir -
Visual Studio 2017 için indirilen paketin vsixpaketi. Görsel stüdyo sürümünüz 2013-2015 arasındaysa, birmsiyükleyici. TıklaDownload düğmesine aşağıda gösterildiği gibi.
Adım 2
Şimdi, indirilen vsix paketine çift tıklayın ve aşağıda gösterildiği gibi kurulum adımlarında sizi çalıştıracaktır -
Visual Studio başarıyla yüklendikten sonra, aşağıda gösterildiği gibi bir pencere görebilirsiniz -
Aşama 3
Şimdi, Visual Studio 2017'yi açın ve aşağıda gösterildiği gibi AWS'den bir karşılama sayfası görmelisiniz -
Visual Studio'dan AWS hizmetlerini kullanmaya başlamak ve kullanmak için erişim anahtarı, gizli anahtar, hesap numarası eklemeniz gerektiğini unutmayın.
NodeJS için AWS Lambda BoilerPlate
İle kullanabilirsiniz visual studio code Aşağıda gösterildiği gibi.
Aşama 1
İndirebilirsin Visual studio code resmi web sitesinden ücretsiz olarak:https://www.visualstudio.com/downloads/. Visual Studio indirmelerinin ana sayfası şuna benzer -
Adım 2
Şimdi, aşağıda gösterildiği gibi Visual Studio kodunu açın -
Aşama 3
AWS desteğini yüklemek için, support for nodejsseçeneği uzantıların içinde mevcuttur. AWS'yi arayabilirsiniz ve seçenek aşağıdaki gibi görüntülenecektir -
4. adım
Şimdi, AWS Lambda için standart metni nodejs gösterildiği gibi -
Adım 5
Kod deposuna tıklayın ve Visual Studio'da Lambda işlevini yazmaya başlamak için Visual Studio'da kopyalayın. Sizi Visual Studio'da klonlayabileceğimiz bu depoya yönlendirir:https://github.com/loganarnett/vscode-lambda-snippets. Şimdi, komut paletini açın.View Visual Studio'da seçenek.
6. Adım
Üzerine tıklayın ve aşağıda gösterildiği gibi git klonunu seçin -
7. Adım
Depo url'sini girin ve seçiminize göre yerel olarak kaydedin. Oluşturmakindex.js lambda işlevi ile çalışmak için aşağıda gösterildiği gibi dosya -
Eclipse IDE Kurulumu
Şimdi, en son eclipse Java EE IDE'yi yüklemeniz gerekecek. Eclipse resmi sitesinden indirebilirsiniz:https://www.eclipse.org/downloads/
Eclipse IDE için AWS Toolkit Desteği
Eclipse kurulduktan sonra aşağıdaki adımları uygulayın -
Aşama 1
Menüden yardıma gidin ve tıklayın Install New Software.
Adım 2
Giriş https://aws.amazon.com/eclipse etiketli metin kutusunda Work with iletişim kutusunun üst kısmında.
Aşama 3
Şimdi gerekli olanı seçin AWS Core Management Tools ve aşağıda gösterilen listedeki diğer isteğe bağlı öğeler.
4. adım
Şimdi tıklayın Next. Eclipse, aşağıda verilen diğer adımlarda verildiği gibi kalan kurulum adımlarında size rehberlik edecektir.
Adım 5
AWS çekirdek modülleri, aşağıda verilen ekran görüntüsünde gösterildiği gibi aşağıdaki ızgarada görüntülenir -
6. Adım
AWS aracı yüklendikten sonra aşağıda gösterildiği gibi Eclipse'de kullanılabilir olacaktır -
7. Adım
Amazon servisine tıkladığınızda aşağıdaki ekranı görebilirsiniz.
Şimdi, mevcut hizmetleri görmek için AWS Explorer'a tıklayın. İlerleyen bölümlerde kurulu IDE ile nasıl çalışılacağını tartışacağız.
AWS Lambda, kodunuzu herhangi bir sunucu olmadan hesaplamakla ilgilenen bir hizmettir. Sunucusuz işlem olduğu söyleniyor. Kod, S3 klasörüne dosya ekleme / kaldırma, Amazon DynamoDBtables'ı güncelleme, Amazon Api ağ geçidinden HTTP isteği gibi AWS hizmetlerindeki olayların yanıtına göre yürütülür.
AWS Lambda kodu NodeJS, Java, C #, Python ve Go'da yazılabilir. Bu bölüm, AWS konsolunda AWS Lambda işlevi oluşturma hakkında ayrıntılı olarak konuşacaktır.
AWS Konsolu
Bağlantıdan AWS Konsolu'na giriş yapın https://aws.amazon.com/console. Giriş yaptıktan sonra, sizi AWS hizmetlerinin görüntülendiği ekrana yönlendirecektir.
Örnek: Bir Fonksiyon Oluşturma
Bir Örnek yardımıyla AWS Konsolunun işlevselliğini anlayalım. Lambda'ya tıklayın (yukarıda işaretli), aşağıda gösterildiği gibi işlev oluşturmak için yeniden yönlendirilecektir -
Tıklayın Create function düğmesine basın ve ekran aşağıdaki ayrıntıları gösterir -
Varsayılan olarak seçeneğin Author from scratch. Bu seçenek, Lambda kodunu sıfırdan yazmanıza olanak tanır. Sadece basit bir işlevi olacakhello world İleti.
İkinci seçenek Blue prints aşağıdaki ayrıntılara sahiptir.
AWS Lambda ile kullanılabilen dillerde bazı aws hizmetleri için önceden yazılmış kodun ayrıntılarını verir. Check-in yapabileceğiniz tüm hizmetler için AWS Lambda kodu yazmanız gerektiğindeblue prints ve başlayın.
Üçüncü seçenek Serverless Application Repository AWS Lambda kodunu dağıtmaya yardımcı olacak sunucusuz uygulama kurulumuna sahiptir.
Tartışmanın ilerleyen kısımlarında, AWS lambda işlevini oluşturduğumuz ilk seçenek üzerinde çalışacağız. Author from scratch.
Lambda işlevini oluşturmadan önce bir role, yani AWS hizmetleri ve aws lambda ile çalışma iznine ihtiyaç duyacağız. Daha sonra Rol, aws lambda işlevine atanmalıdır.
AWS Konsolunda rol oluşturma
AWS Konsolunda bir rol oluşturmak için AWS konsol hizmetlerine gidin ve aşağıda gösterildiği gibi IAM'ye tıklayın -
Şimdi, tıklarsan IAM, aşağıdaki gibi ekrana geleceksiniz -
Seçerseniz Roles, ekranda aşağıdaki düğmeleri görebilirsiniz -
Şimdi tıklayın Create role. Oluşturulan rolü kullanmanız gereken hizmeti seçmenizi isteyecektir.
Bu rolü AWS Lambda ile kullanmamız gerektiğinden, Lambda ve tıklayın Next:Permissionsdüğmesine yukarıda gösterildiği gibi. Sonraki ekranda, AWS hizmetlerine göre kullanılabilen ilke adı görüntülenir. Politikayı buradan seçebilirsiniz -
Örneğin, AWS Lambda'nın S3 ve DynamoDB ile çalışmasına izin vermek istiyorsanız politikayı seçmeniz gerekir. Arama kutusuna AWS hizmetini girin ve onay kutusuna tıklayın. Birden fazla politika seçebilir ve daha sonraNext:Review.
Kendi politikanızı oluşturmak da mümkündür. Örneğin dynamodb tablosu var ve sadece o tabloya izin vermeniz gerekiyor, bu gibi durumlarda poliçe oluşturabilirsiniz.
Tıklamak Create policydüğmesine yukarıdaki ekranda gösterildiği gibi. Ekranda görüntülenen ayrıntılar aşağıdadır.
Seçin Servicebunun için politikayı oluşturuyorsunuz. Daha sonra Eylemler için verileri gösterecek,resources ve Request conditions.
Şimdi servisi seçmeliyiz. SeçelimAWS Dynamodb aramadan. Actions aşağıdaki ayrıntılara sahiptir -
Şimdi, girin Access levelDynamoDB'ye vermek istiyorsunuz. Sonra,resources aşağıdaki ayrıntıları gösterecek -
Şimdi, tablo kaynak türünü seçin. Aşağıdaki çıktıyı görebilirsiniz -
Masada izin almak için yapmanız gerekenler Add ARN. ARN, AWS DynamoDB'de oluşturulan tabloya özgü ayrıntılardır. Tablo dynamodb'da oluşturulduğunda ayrıntıları alacaksınız.
Eğer tıklarsan Add ARN ve aşağıdaki ayrıntıları gösterecektir -
Şimdi, eğer girerseniz ARN ve Region, Account ve Tableisim doldurulacak. TıklamalısınAddPolitikayı eklemek için düğmesine basın. Benzer şekilde, diğer hizmetler için de politikalar oluşturabilirsiniz.
Burada iki politika seçtik AmazonS3FullAccess ve AmazonDynamoDBFullACcess. Bu rolde S3 ve DynamoDB'ye tam erişim verdik. Ancak sadece gerekli kova ve tablolara izin vermeniz önerilir.
Politikaları oluşturmak için daha önce tartışılan adımları takip edebilirsiniz. ARN.
Aşama 1
Tıklayın Create roleRol oluşturmak için düğmeye basın. Oluşturulan tüm roller gösterildiği gibi görüntülenir -
Adım 2
Oluşturulan rol için herhangi bir değişikliğe ihtiyaç duymanız durumunda ihtiyaç duyduğunuz rolü seçebileceğinizi unutmayın. Biz seçersekAuthor from scratch option, girmek zorundasın Name, Runtime and Role.
Aşama 3
Aşağıdaki detayları şurada inceleyebilirsiniz: Runtime açılır -
4. adım
İstediğiniz çalışma süresini seçebilir ve gösterildiği gibi devam edebilirsiniz.
Role açılır menüde aşağıdaki seçenekler bulunur -
Choose an existing role − Bu, IAM rollerinde oluşturulan tüm rolleri gösterecektir.
Create new role from template(s) −Bu, rol oluşturmanıza izin verecek ve bu rol için seçilme iznini gösterecektir. Daha iyi anlamak için ekran görüntüsünü inceleyin.
Create a custom role − Bu, kullanıcının daha önce tartıştığımız gibi politikalar oluşturmasına izin verir.
Adım 5
Seçin runtime, roleve işlevi ekleyin. TıklamakCreate functionLambda işlevini oluşturmak için düğme. Görüntülenen sonraki ekran aşağıdaki gibidir -
AWS Lambda İşlevinin Parçaları
AWS Lambda işlevi için iki bölüm vardır:Configuration ve Monitoring. Her birini ayrıntılı olarak tartışalım.
Yapılandırma
Yapılandırmaya aşağıdaki işlevler dahildir.
Add Triggers
AWS Lambda işlevine eklenmesi gereken tetikleyiciler aşağıdaki gibi görüntülenir -
Bir tetikleyici seçtiğimizde, o tetikleyici için yapılandırma ayrıntılarını eklememiz gerektiğini unutmayın. Örneğin S3 tetikleyicisi için klasör adını seçmemiz gerekiyor; Dynamodb tetikleyicisi için tablo adını seçmemiz gerekiyor.
Misal
Bir S3 tetikleyicisi için yapılandırma ayrıntılarının bir örneğini görelim -
Şimdi, S3 tetikleyicisi için yapılandırma ayrıntılarını ekleyin -
Burada seçmeniz gerekiyor bucket name, event type Lambda'yı tetiklemek istediğiniz, varsa önek ve filtre kalıbı ve Add Tetik.
Lambda'da Kod Ekleme
Şimdi, yazılacak Lambda koduna odaklanmalıyız. Aws lambda'ya kod eklemek için üç seçenek vardır -
- Satır içi düzenleyiciyi kullanma
- .Zip dosyası kullanarak
- Amazon S3'ten dosya yükleyin
Aşağıda verilen ekran görüntüsünde gösterilmektedir -
Her birini ayrıntılı olarak tartışalım.
Using the inline editor
Size kod yazabileceğiniz satır içi kod düzenleyicisi aşağıdaki gibidir -
Seçtiğiniz dili seçerek kodunuzu yazabilirsiniz. Burada tekrar çalışma zamanını seçmenize izin verilir.
Daha iyi anlamak için aşağıdaki ekran görüntüsünü inceleyin -
Kodun yazılması gerekir index.js.Handler. Ayrıntılar çalışma süresine göre farklılık gösterecektir. İçinnodejs, bu filename.export function hangisi şimdi index.lambda handler.
Upload a .ZIP file
Önce kodu yazabilir, sıkıştırabilir ve zip dosyasını seçerek yükleyebilirsiniz. Upload a .ZIP file.
Upload a file from Amazon S3
Dosyayı S3 klasörüne yükleyebilir ve seçeneği belirleyebilirsiniz. Upload a file from Amazon S3.
İçin unutmayın .ZIP ve S3 çalışma zamanını değiştirmek mümkün olmayacaktır.
Ortam Değişkenleri
Anahtar değer çiftlerini alıp bunları AWS Lambda koduyla paylaşırlar. Veritabanı bağlantı ayrıntılarını, çıktıyı depolamak için dosya ayrıntılarını, günlük dosyası ayrıntılarını vb. Depolamak için AWS Lambda'daki ortam değişkenlerini kullanabiliriz.
Etiketler
Farklı bölgelerde kullanıldığında işlevi daha iyi organize etmek için AWS Lambda'ya eklenen anahtar / değer çiftleridir. Basit bir kullanım durumu için gerekli değildir. Oluşturulan çok sayıda Lambda işlevi olduğunda, etiketleme, Lambda işlevlerinin filtrelenmesine ve yönetilmesine yardımcı olur.
Yürütme rolü
Lambda işlevi oluşturmanın başlangıcında doğru şekilde yapılmazsa, rolü burada tekrar değiştirebilirsiniz. Burada yeni rolü güncelleyebilir veya oluşturabilirsiniz. Lambda işlevi oluşturmanın başlangıcında görüntülenenlerle aynı seçenekleri sağlar.
Temel Ayarlar
Buraya, Lambda işlevinizin ne yaptığının kısa açıklamasını girmeniz gerekir. Lambda işlevi için gerekli olan belleği ve zaman aşımını seçin.
Ağ
Bu, Lambda işlevine VPC'den erişmenizi sağlayacak VPC'yi seçmenize olanak tanır. Varsayılan olarak, hiçbir VPC seçilmez.
Hata Ayıklama ve Hata İşleme
Hata ayıklama ve hata işleme için ayrıntıları göndermek üzere AWS hizmetini seçebilirsiniz. Mevcut seçenekler şunlardırNone, SNS ve SQS.
Eşzamanlılık
Bu, bu işlev için izin verilen belirli bir eşzamanlı yürütme sınırı atamanıza olanak tanır.
Denetim ve Uyum
Bu, AWS CloudTrail yardımı ile yönetilen günlükleri içerir.
Tamamlandıktan sonra, burada gösterildiği gibi Kaydet düğmesini kullanarak değişiklikleri kaydetmeniz gerekir -
Şimdi, tıklarsan Testdüğmesi, bir test etkinliği isteyecektir. Örnek bir test olayını aşağıdaki şekilde geçebilirsiniz -
Oluşturulan test etkinliği burada gösterildiği gibidir -
Şimdi, test olayını kaydedin ve AWS Lambda işlevinin yürütülmesini görmek için test düğmesine tıklayın -
İçin kod index.js aşağıdaki gibidir -
exports.lambdahandler = (event, context, callback) => {
// TODO implement
console.log(event.key1);
console.log(event.key2);
console.log(event.key3);
callback(null, 'Lambda test');
};
Hata veya başarı olduğunda geri çağırma işlevinin çağrıldığını unutmayın. Başarılı olursa, görebilirsinLambda test görüntülenecek.
İzleme
Lambda işlevinin yürütme ayrıntılarını görüntülemek için izleme sekmesini seçin. Grafikler yürütme süresinin, oluşan hataların vb. Ayrıntılarını gösterir.
Günlükleri Cloudwatch'ta da görüntüleyebilirsiniz. Bunun için AWS hizmetlerine gidin ve gösterildiği gibi cloudwatch'ı seçin -
Şimdi, sol taraftan günlükleri seçin ve filtreye işlev adınızı girin -
AWS Lambda işlevi çağrıldığında bir kodu yürütür. Bu bölüm, AWS Lambda işlevinin yaşam döngüsüne dahil olan tüm bu adımları ayrıntılı olarak tartışır.
Lambda işlevi oluşturmaya yönelik adımlar
Lambda işlevinin yaşam döngüsü dört gerekli adımı içerir -
- Authoring
- Deploying
- Monitoring
- Troubleshooting
Yazma Lambda Kodu
AWS Lambda işlev kodu aşağıdaki dillerde yazılabilir -
- NodeJS
- Java,
- Python
- C#
- Go.
AWS Lambda için AWS konsolunu, AWS CLI'yi, Eclipse IDE'den, Visual Studio IDE'den, sunucusuz çerçeveden vb. Kullanarak kod yazabiliriz.
Aşağıdaki tablo, Lambda işlevini yazmak için kullanılabilecek dillerin ve farklı araçların ve IDE'nin bir listesini gösterir -
Dil | Lambda Kodu Yazma için IDE |
---|---|
NodeJS | AWS Lambda Konsolu Visual Studio IDE |
Java | Eclipse IDE |
Python | AWS Lambda Konsolu |
C # | Visual Studio IDE .NET çekirdeği |
Git | AWS Lambda Konsolu |
Lambda Kodunu Dağıtma
Lambda işlevini yazmak istediğiniz dile karar verdiğinizde, kodu dağıtmanın iki yolu vardır:
- Kodu doğrudan AWS konsoluna yazın
- Dosyaları tüm dosyalar ve bağımlılıklarla sıkıştırın veya sıkıştırın
Ancak, zip dosyasına uygun iznin verilmesi gerektiğini unutmayın.
Lambda Kodunu Test Etme
Lambda Kodu, AWS Lambda konsolu içindeki olaylar için test edilebilir. Lambda işlevini AWS cli ve sunucusuz cli'den test etmek de mümkündür. AWS konsolunda, AWS Lambda işlevini test ederken örnek olaylar olarak kullanılabilecek olay verileri de vardır.
Lambda işlevini izleme
Lambda işlevinin izlenmesi, AWS CloudWatch kullanılarak yapılabilir. İstediğimiz dillerde gerekli günlük mesajlarını ekleyebilir ve aynısını AWS CloudWatch'ta görebiliriz.
Lambda işlevini yazmaya başlamak için izlenecek kalıp vardır. Aşağıdakiler, bir Lambda işlevi yazmak için izlenecek ana temel kavramlardır -
İşleyici
İşleyici, yürütmenin başladığı yerden AWS lambda işlevinin adıdır. AWS konsolunda aşağıda gösterildiği gibi görünür -
Burada varsayılan işleyiciyi başka bir adla değiştirdiğimize ve İşleyicide de aynısını güncellediğimize dikkat edin -
Bir işleyicinin çağrılma şeklinin, çalışma zamanı olarak seçilen dillerden farklı olduğunu unutmayın.
İşleyiciye geçen parametreler
İşleyici işlevini gözlemlerseniz, geçirilen parametreler event, context ve call back function aşağıda gösterildiği gibi -
Event parametresi, kullanılan tetikleyicinin tüm ayrıntılarını içerir.
Contextparametresi, temel olarak Lambda işlevinin çalıştırılması için çalışma zamanı ayrıntılarıyla ilgilenir. Lambda işlevi ile etkileşime girebiliriz.contextparam. AWS Lambda'nın bir işlevi sonlandırmadan önce kalan süre, yani Lambda işlevi oluşturulurken belirtilen zaman aşımı, Lambda işlevinin adı, bulut saat grubu adı, arn ayrıntıları vb.
Misal
AWS Lambda bağlam nesnesinden elde edilen ayrıntıları bir örnek yardımıyla anlayalım -
exports.lambdahandler = (event, context, callback) => {
// TODO implement
console.log("context object details");
console.log(JSON.stringify(context));
callback(null, 'Lambda test');
};
Yukarıda gösterilen Lambda işlevini çalıştırdığınızda, aşağıdaki çıktıyı görebilirsiniz -
Çıktı
context detaylar aşağıdaki gibidir -
{
"callbackWaitsForEmptyEventLoop":true,"logGroupName":"/aws/lambda/myfirstlambdafunction",
"logStreamName":"2018/05/20/[$LATEST]04f17ee4ff7048d5bb1fedffaa807c71","functionName":
"myfirstlambdafunction","memoryLimitInMB":"128","functionVersion":"$LATEST","invokeid":
"c931e21c-5bf3-11e8-acfe-47fdbb39eee9","awsRequestId":"c931e21c-5bf3-11e8-acfe-47fdbb39eee9",
"invokedFunctionArn":"arn:aws:lambda:us-east-1:625297745038:function:myfirstlambdafunction"
}
FunctionName, memorylimit, requestId gibi ayrıntılara sahip olduğunu gözlemleyin.
Kerestecilik
Lambda işlevinin içine eklenen günlükler, AWS işlevi yürütüldüğünde AWS CloudWatch'ta görüntülenir. Günlük söz dizimi, seçilen dilden farklı olacaktır. Örnek içinnodejs, console.log.
Bu, AWSCloudWatch'ta görebileceğiniz çıktıdır -
Hata yönetimi
AWS Lambda işlevi, Lambda işlevine bir hata veya başarı olduğunu bildirmek için kullanılan bir geri arama işlevi sağlar. Burada çalışma zamanı olarak nodejs kullandığımıza dikkat edin. Hata işleme, seçilen dile göre farklılık gösterecektir.
Daha iyi bir anlayış için burada verilen Örneği inceleyin -
exports.lambdahandler = (event, context, callback) => {
// TODO implement
var error = new Error("There is error in code");
callback(error);
};
Çıktı
Lambda kodunu test ettiğinizde, çıktıyı aşağıda gösterildiği gibi bulabilirsiniz -
Günlük ayrıntıları aşağıdaki gibidir -
Nodejs, AWS Lambda işlevinin desteklediği dillerden biridir. Nodejs ile desteklenen sürüm v6.10 ve v8.10'dur. Bu bölümde, NODEJS'de AWS Lambda işlevinin çeşitli işlevlerini ayrıntılı olarak öğreneceğiz.
NodeJS'de işleyici
AWS Lambda işlevini nodejs'de yazmak için önce bir işleyici bildirmeliyiz. Nodejs'deki işleyici, dosyanın adı ve dışa aktarma işlevinin adıdır. Örneğin, dosyanın adıindex.js ve dışa aktarma işlevi adı lambda handler, dolayısıyla karşılık gelen işleyicisi index.lambdahandler
Burada gösterilen örnek işleyiciyi inceleyin -
exports.lambdahandler = function(event, context, callback) { //code goes here}
İşleyiciye Parametreler
İşleyici, Lambda işlevi oluşturmanın ana çekirdeğidir. İşleyici üç parametre alır:event, context ve callback.
Etkinlik Parametresi
Tetiklenen olayın tüm ayrıntılarına sahiptir. Örneğin, S3'te tetiklenecek Lambda işlevini kullanıyorsak, olay S3 nesnesinin ayrıntılarına sahip olacaktır.
Bağlam Parametresi
Lambda işlevinin özellikleri ve yapılandırma ayrıntıları gibi bağlamın ayrıntılarına sahiptir.
Geri Arama Fonksiyonu
Arayana ayrıntıları geri vermede yardımcı olur. Geri aramanın yapısı aşağıdaki gibidir -
callback(error, result);
Geri arama işlevinin parametreleri aşağıda açıklanmıştır -
Error −Bu, Lambda işlevinin yürütülmesi sırasında herhangi bir hata meydana gelirse ayrıntılara sahip olacaktır. Lambda işlevi başarılı olursa,null geri arama işlevi için ilk parametre olarak geçirilebilir.
Result −Bu, lambda işlevinin başarılı bir şekilde yürütülmesinin ayrıntılarını verecektir. Bir hata oluşursa, sonuç parametresi dikkate alınmaz.
Note −AWS Lambda'da geri arama işlevinin kullanılması zorunlu değildir. Geri çağırma işlevi yoksa, işleyici onu boş olarak döndürecektir.
Geçerli geri arama imzaları aşağıda verilmiştir -
callback(); // It will return success, but no indication to the caller
callback(null); // It will return success, but no indication to the caller
callback(null, "success"); // It will return the success indication to the caller
callback(error); // It will return the error indication to the caller
AWS Lambda çalıştırıldığında, hata veya başarı gibi geri arama ayrıntıları, varsa konsol mesajlarıyla birlikte AWS CloudWatch'a kaydedilir.
Nodejs8.10'da AWS Lambda ile çalışma
AWS Lambda ile nodejs8.10'da nasıl çalışılacağını anlayalım ve işlevi senkronize ve zaman uyumsuz bir şekilde çağıralım.
Lambda İşlevini Eşitleme Yolunda Çağırma
Aşağıdaki örnek, Lambda işlevini senkronize bir şekilde çağırma hakkında size bir fikir verir -
exports.handler = function(event, context, callback) {
let arrItems = [4,5,6,8,9,10,35,70,80,31];
function countevennumbers (items) {
return new Promise(resolve => {
setTimeout(() => {
let a = 0;
for (var i in items) {
if (items[i] % 2 == 0) {
a++;
}
}
resolve(a);
},2000);
});
}
let evennumber = countevennumbers(arrItems);
callback(null,'even numbers equals ='+evennumber);
};
Bu kodu AWS konsolunda test ettikten sonra aşağıdaki çıktıyı gözlemleyebilirsiniz -
Yukarıdaki kodun çıktısının bir vaat nesnesi olduğuna dikkat edin. Sayım bir setTimeout içinde arttığından ve işlev çağrısı setTimeout içinde yürütmeyi beklemediğinden ve promise nesnesini döndürdüğünden, sayımı vermez.
Biz olsaydı async/await işleyici işlevinde lambda işlevinin tam çıktısını alır.
İşleyiciyi Async Bir Şekilde Çağırma
Aşağıdaki örnek, Lambda işlevini zaman uyumsuz bir şekilde çağırma hakkında size bir fikir verir -
exports.handler = async function(event, context, callback) {
let arrItems = [4,5,6,8,9,10,35,70,80,31];
function countevennumbers (items) {
return new Promise(resolve => {
setTimeout(() => {
let a = 0;
for (var i in items) {
if (items[i] % 2 == 0) {
a++;
}
}
resolve(a);
}, 2000);
});
}
let evennumber = await countevennumbers(arrItems);
callback(null,'even numbers equals ='+evennumber);
};
Biz ekledik async ve awaityukarıdaki kodda. Kullandığımız zamanawaitişlev çağrısının yanında, işlev içindeki söz çözülene kadar yürütme durur. Bunu not etawait sadece için geçerlidir async fonksiyonlar.
Bu kodu AWS konsolunda test ettikten sonra aşağıdaki çıktıyı gözlemleyebilirsiniz -
NodeJS'deki ContextDetails
Bağlam nesnesi, Lambda işlevinin adı, milisaniye cinsinden kalan süre, istek kimliği, bulut saat grubu adı, zaman aşımı ayrıntıları vb. Gibi ayrıntıları verir.
Aşağıdaki tablolar, bağlam nesnesiyle kullanılabilen yöntemlerin ve özniteliklerin listesini gösterir -
Bağlam nesnesi için kullanılabilen yöntem
Sr.No | Yöntem Adı ve Açıklaması |
---|---|
1 | getRemainingTimeInMillis() Bu yöntem, Lambda işlevi işlevi sonlandırana kadar kalan süreyi milisaniye cinsinden verir |
Bağlam nesnesi için kullanılabilen öznitelikler
Sr.No | Öznitelik adı ve Açıklama |
---|---|
1 | functionName Bu, AWS Lambda işlev adını verir |
2 | functionVersion Bu, AWS Lambda işlevinin çalıştırılma sürümünü verir |
3 | nvokedFunctionArn Bu ARN ayrıntılarını verecektir. |
4 | memoryLimitInMB Bu, Lambda işlevi oluşturulurken eklenen bellek sınırını gösterir |
5 | awsRequestId Bu, AWS istek kimliğini verir. |
6 | logGroupName Bu, cloudwatch grup adını verecektir |
7 | logStreamName Bu, günlüklerin yazıldığı bulut izleme günlük akışı adını verecektir. |
8 | identity Bu, aws mobile sdk ile birlikte kullanıldığında amazon cognito kimlik sağlayıcısı hakkında ayrıntılı bilgi verecektir. Verilen detaylar aşağıdaki gibidir -
|
9 | clientContext Bu, aws mobile sdk ile kullanıldığında istemci uygulamasının ayrıntılarını verecektir. Verilen detaylar aşağıdaki gibidir -
|
Bağlam nesnesi hakkında daha iyi bir fikir edinmek için aşağıdaki örneğe bakın -
exports.handler = (event, context, callback) => {
// TODO implement
console.log('Remaining time =>', context.getRemainingTimeInMillis());
console.log('functionName =>', context.functionName);
console.log('AWSrequestID =>', context.awsRequestId);
console.log('logGroupName =>', context.log_group_name);
console.log('logStreamName =>', context.log_stream_name);
console.log('clientContext =>', context.clientContext);
callback(null, 'Name of aws Lambda is=>'+context.functionName);
};
Bu kodu AWS konsolunda test ettikten sonra aşağıdaki çıktıyı gözlemleyebilirsiniz -
Bu kodu AWS konsolunda test ettikten sonra aşağıdaki günlük çıktısını gözlemleyebilirsiniz:
NodeJS'de oturum açılıyor
NodeJS'de oturum açmak için console.log kullanabiliriz. Log detayları Lambda fonksiyonuna karşı CloudWatch servisinden alınabilir.
Daha iyi anlamak için aşağıdaki örneği inceleyin -
exports.handler = (event, context, callback) => {
// TODO implement
console.log('Logging for AWS Lamnda in NodeJS');
callback(null, 'Name of aws Lambda is=>'+context.functionName);
};
Bu kodu AWS konsolunda test ettikten sonra aşağıdaki çıktıyı gözlemleyebilirsiniz -
CloudWatch'tan aşağıdaki ekran görüntüsünü gözlemleyebilirsiniz -
NodeJS'de Hata İşleme
NodeJS'de hata bildiriminin nasıl yapıldığını anlayalım. Aşağıdaki kodu inceleyin -
exports.handler = function(event, context, callback) {
// This Source code only throws error.
var error = new Error("something is wrong");
callback(error);
};
Günlük çıktısında aşağıdakileri gözlemleyebilirsiniz -
Geri aramada hata ayrıntıları aşağıdaki şekilde verilmiştir -
{
"errorMessage": "something is wrong",
"errorType": "Error",
"stackTrace": [ "exports.handler (/var/task/index.js:2:17)" ]
}
Bu bölümde, Java'da basit bir AWS Lambda işlevinin nasıl oluşturulacağını ayrıntılı olarak anlayalım.
Eclipse'de JAR dosyası oluşturma
AWS'de bir lambda işlevi oluşturmaya başlamadan önce Eclipse için AWS araç seti desteğine ihtiyacımız var. Aynısının kurulumuyla ilgili herhangi bir rehberlik için,Environment Setup Bu eğitimdeki bölüm.
Kurulumu tamamladığınızda, burada verilen adımları izleyin -
Aşama 1
Eclipse IDE'yi açın ve yeni bir proje oluşturun AWS Lambda Java Project. Daha iyi anlamak için aşağıda verilen ekran görüntüsüne bakın -
Adım 2
Seçtikten sonra Next, sizi aşağıda gösterilen ekrana yönlendirecektir -
Aşama 3
Şimdi, Giriş Türü için varsayılan bir kod oluşturulur Custom. TıkladığınızdaFinish düğmesi aşağıda gösterildiği gibi proje oluşturulur -
4. adım
Şimdi, projenize sağ tıklayın ve dışa aktarın. SeçinizJava / JAR dosyadan Export sihirbaz ve tıklama Next.
Adım 5
Şimdi, tıklarsan Next, dosyayı hedef klasöre kaydetmeniz istenecek ve bir sonraki tıkladığınızda sorulacaktır.
Dosya kaydedildikten sonra AWS Konsolu'na geri dönün ve Java için AWS Lambda işlevini oluşturun.
6. Adım
Şimdi yükleyin .jar kullanarak oluşturduğumuz dosya Upload düğmesi aşağıda verilen ekran görüntüsünde gösterildiği gibi -
Java için İşleyici Ayrıntıları
Handler dır-dir package name ve class name. İşleyiciyi ayrıntılı olarak anlamak için aşağıdaki örneğe bakın -
Misal
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler
Yukarıdaki koddan, işleyicinin com.amazonaws.lambda.demo.LambdaFunctionHandler
Şimdi değişiklikleri test edelim ve çıktıyı görelim -
Java'da Bağlam Nesnesi
AWS Lambda yürütme ile etkileşim, bağlam kullanılarak yapılır. Java içinde kullanılacak aşağıdaki yöntemleri sağlar -
Sr.No | Bağlam Yöntemleri ve Açıklama |
---|---|
1 | getMemoryLimitInMB() bu, lambda işlevini oluştururken belirlediğiniz bellek sınırını verecektir. |
2 | getFunctionName() bu, lambda işlevinin adını verecektir. |
3 | getFunctionVersion() bu, çalışan lambda işlevinin sürümünü verecektir. |
4 | getInvokedFunctionArn() bu, işlevi çağırmak için kullanılan ARN'yi verecektir. |
5 | getAwsRequestId() bu, aws istek kimliğini verecektir. Bu kimlik lambda işlevi için oluşturulur ve benzersizdir. Kimlik, herhangi bir sorunla karşılaşırsanız aws desteği ile birlikte kullanılabilir. |
6 | getLogGroupName() bu, oluşturulan aws lambda işlevi ile bağlantılı aws cloudwatch grup adını verecektir. İam kullanıcısının cloudwatch günlüğe kaydetme izni yoksa boş olacaktır. |
7 | getClientContext() bu, aws mobile sdk ile birlikte kullanıldığında uygulama ve cihaz hakkında ayrıntılı bilgi verecektir. Sürüm adı ve kodu, müşteri kimliği, başlık, uygulama paketi adı gibi ayrıntıları verecektir. Boş olabilir. |
8 | getIdentity() bu, aws mobile sdk ile kullanıldığında amazon cognito kimliği hakkında ayrıntılar verecektir. Boş olabilir. |
9 | getRemainingTimeInMillis() bu, belirtilen zaman aşımından sonra işlev sonlandırıldığında kalan süreyi milisaniye cinsinden verecektir. |
10 | getLogger() bu, bağlam nesnesiyle bağlantılı lambda kaydediciyi verecektir. |
Şimdi yukarıda verilen kodu güncelleyelim ve yukarıda listelenen yöntemlerden bazıları için çıktıyı gözlemleyelim. Daha iyi anlamak için aşağıda verilen Örnek kodu inceleyin -
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
context.getLogger().log("Input: " + input);
System.out.println("AWS Lambda function name: " + context.getFunctionName());
System.out.println("Memory Allocated: " + context.getMemoryLimitInMB());
System.out.println("Time remaining in milliseconds: " + context.getRemainingTimeInMillis());
System.out.println("Cloudwatch group name " + context.getLogGroupName());
System.out.println("AWS Lambda Request Id " + context.getAwsRequestId());
// TODO: implement your handler
return "Hello from Lambda!";
}
}
Yukarıda verilen kodu çalıştırdıktan sonra çıktıyı aşağıda verildiği gibi bulabilirsiniz -
Bağlam için günlükler
Günlük çıktınızı görüntülerken aşağıdaki çıktıyı gözlemleyebilirsiniz -
Lambda işlevi için ayrılan bellek 512MB'dir. Ayrılan süre 25 saniyedir. Yukarıda gösterildiği gibi kalan süre milisaniye cinsinden 24961'dir. Dolayısıyla, Lambda işlevinin yürütülmesi için 39 milisaniyeye eşit olan 25000 - 24961 kullanılır. Cloudwatch grup adı ve istek kimliğinin de yukarıda gösterildiği gibi görüntülendiğini unutmayın.
Java'da günlükleri yazdırmak için aşağıdaki komutu kullandığımızı unutmayın -
System.out.println (“log message”)
Aynısı CloudWatch'ta da mevcuttur. Bunun için AWS hizmetlerine gidin, seçinCloudWatchservices ve tıklayın Logs.
Şimdi, Lambda işlevini seçerseniz, günlükleri aşağıda gösterildiği gibi tarih bilgisine göre gösterecektir -
Java'da oturum açma
Verileri günlüğe kaydetmek için Java'daki Lambdalogger'ı da kullanabilirsiniz. Aynı şeyi gösteren aşağıdaki örneği inceleyin -
Misal
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
LambdaLogger logger = context.getLogger();
logger.log("Input: " + input);
logger.log("AWS Lambda function name: " + context.getFunctionName()+"\n");
logger.log("Memory Allocated: " + context.getMemoryLimitInMB()+"\n");
logger.log("Time remaining in milliseconds: " + context.getRemainingTimeInMillis()+"\n");
logger.log("Cloudwatch group name " + context.getLogGroupName()+"\n");
logger.log("AWS Lambda Request Id " + context.getAwsRequestId()+"\n");
// TODO: implement your handler
return "Hello from Lambda!";
}
}
Yukarıda gösterilen kod size şu çıktıyı verecektir -
CloudWatch'taki çıktı aşağıda gösterildiği gibi olacaktır -
Lambda İşlevi için Java'da hata işleme
Bu bölüm, Lambda işlevi için Java'daki hataların nasıl işleneceğini açıklayacaktır. Aynı şeyi gösteren aşağıdaki kodu inceleyin -
package com.amazonaws.lambda.errorhandling;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
throw new RuntimeException("Error from aws lambda");
}
}
Hata ayrıntılarının görüntülendiğini unutmayın. json errorMessage ile biçimlendirme Error from AWS Lambda. AyrıcaErrorType ve stackTrace hata hakkında daha fazla ayrıntı verir.
Yukarıda verilen kodun çıktısı ve ilgili günlük çıktısı, aşağıda verilen aşağıdaki ekran görüntülerinde gösterildiği gibi olacaktır -
Bu bölümde, Python'da basit bir AWS Lambda işlevi oluşturacağız ve ayrıntılarını takip ederek çalışma kavramlarını anlayacağız.
AWS'de Lambda işlevi oluşturmaya başlamadan önce Python için AWS araç seti desteğine ihtiyacımız var. Bu amaçla, aşağıda verilen adımları izleyin ve ekteki ilgili ekran görüntülerini izleyin -
Aşama 1
AWS konsolunda oturum açın ve Lambda işlevi oluşturun ve dili Python olarak seçin.
Adım 2
Şimdi tıklayın Create functiondüğmesini tıklayın ve Python'da basit bir AWS Lambda oluşturmanın ayrıntılarını girin. Bu kod mesajı döndürürHello from Lambda using Python ve burada gösterildiği gibi görünüyor -
Aşama 3
Şimdi değişiklikleri kaydedin ve çıktıyı görmek için kodu test edin. UI'daki test düğmesini kullanarak AWS konsolunda test ettiğinizde aşağıdaki çıktıyı ve günlükleri görmelisiniz.
4. adım
Artık herhangi bir düzenleyicinin veya Python için bir IDE'nin içine kod yazabilirsiniz. Burada kodu yazmak için görsel stüdyo kodunu kullanıyoruz. Daha sonra dosyayı sıkıştırmalı ve AWS konsoluna yüklemelisiniz.
Burada kodu sıkıştırdık ve AWS konsolunu kullandık.
Adım 5
Şimdi seçin Upload a .ZIP file aşağıda gösterildiği gibi seçenek -
Python için İşleyici Ayrıntıları
İşleyicinin dosyanın adı ve ardından işlevin adı olması gerektiğini unutmayın. Yukarıdaki durumda, dosya adımızhellopython.py ve işlevin adı my_handler; böylece işleyici olacak hellopython.my_handler.
Yükleme tamamlandıktan ve değişiklikler kaydedildikten sonra, aslında zip dosyasının ayrıntılarını AWS Lambda konsolundaki çevrimiçi düzenleyicide gösterir. Şimdi, çıktıyı ve günlükleri görmek için kodu test edelim.
Şimdi, aşağıdaki örnek kodu kullanarak Lambda işlevinin ayrıntılarını anlayalım -
def my_handler(event, context):
return "aws lambda in python using zip file"
Yukarıdaki kodda, my_handler işlev adı 2 parametreye sahiptir, olay ve bağlam.
Python'da Bağlam Nesnesi
Bağlam nesnesi, Lambda işlevinin adı, milisaniye cinsinden kalan süre, istek kimliği, bulut izleme grubu adı, zaman aşımı ayrıntıları gibi ayrıntıları verir.
Bağlam nesnesinde bulunan yöntemler ve nitelikler aşağıda verilen tablolarda gösterilmektedir -
Sr.No | Yöntem Adı ve Açıklaması |
---|---|
1 | get_remaining_time_in_millis() Bu yöntem, lambda işlevi işlevi sonlandırana kadar kalan süreyi milisaniye cinsinden verir. |
Sr.No | Öznitelik ve Açıklama |
---|---|
1 | function_name Bu, aws lambda işlev adını verir |
2 | function_version Bu, aws lambda işlevinin çalıştırılma sürümünü verir |
3 | invoked_function_arn Bu ARN ayrıntılarını verecektir. |
4 | memory_limit_in_mb Bu, lambda işlevi oluşturulurken eklenen bellek sınırını gösterir |
5 | aws_request_id Bu, aws istek kimliğini verir. |
6 | og_group_name Bu, cloudwatch grup adını verecektir |
7 | log_stream_name Bu, günlüklerin yazıldığı bulut izleme günlük akışı adını verecektir. |
8 | identity Bu, aws mobile sdk ile birlikte kullanıldığında amazon cognito kimlik sağlayıcısı hakkında ayrıntılı bilgi verecektir. Verilen detaylar aşağıdaki gibidir -
|
9 | client_context Bu, aws mobile sdk ile kullanıldığında istemci uygulamasının ayrıntılarını verecektir. Verilen detaylar aşağıdaki gibidir -
|
Python'da bağlam ayrıntılarını veren çalışan bir örnek görelim. Aşağıda verilen koda uyun -
def my_handler(event, context):
print("Log stream name:", context.log_stream_name)
print("Log group name:", context.log_group_name)
print("Request ID:",context.aws_request_id)
print("Mem. limits(MB):", context.memory_limit_in_mb)
print("Time remaining (MS):", context.get_remaining_time_in_millis())
return "aws lambda in python using zip file"
Yukarıda gösterilen kodun ilgili çıktısı aşağıda verilmiştir -
Python kullanarak günlük kaydı
Python kullanarak bilgileri günlüğe kaydetmek için, mevcut yazdırma veya günlükleyici işlevini kullanabiliriz. Yukarıdaki bağlam örneğini kullanalım ve günlüklerin yazdırılıp yazdırılmadığını görmek için inCloudWatch'ı kontrol edelim. Aşağıdaki kodu inceleyin -
def my_handler(event, context):
print("Log stream name:", context.log_stream_name)
print("Log group name:", context.log_group_name)
print("Request ID:",context.aws_request_id)
print("Mem. limits(MB):", context.memory_limit_in_mb)
print("Time remaining (MS):", context.get_remaining_time_in_millis())
return "aws lambda in python using zip file"
Bu kodun CloudWatch'taki çıktısı aşağıda gösterildiği gibidir -
Günlükleri CloudWatch'a yazdırmak için günlükçüyü kullanmayı anlamak için aşağıdaki örneği inceleyin -
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def my_handler(event, context):
logger.info('Using logger to print messages to cloudwatch logs')
return "aws lambda in python using zip file"
Bunun çıktısı aşağıda verilen ekran görüntüsünde gösterildiği gibi olacaktır -
Lambda işlevi için Python'da Hata İşleme
Bu bölümde, Python'da hataların nasıl işleneceğini gösteren çalışan bir örnek görelim. Burada verilen kod parçasına bakın -
def error_handler(event, context):
raise Exception('Error Occured!')
Günlük görüntüsü, buradaki resimde gösterildiği gibidir -
Go Dil desteği, AWS'ye yeni bir ektir. Go ile çalışmak için AWS Lambda işlevini oluştururken AWS konsolundan dili seçmeniz gerekir. Bu bölümde, Go dilinde AWS Lambda işlevi hakkında ayrıntılı bilgi edinelim.
Go Kurulumu
Başlamak için Go Language desteğine ihtiyacımız var. Bu bölümde, Go'da AWS Lambda ile çalışmaya başlamak için aşağıdaki ayrıntıları inceleyeceğiz. Bu, Go indirmenin resmi sitesidir:https://golang.org/dl/
Şimdi paketi işletim sistemine göre indirin. Go'yu ilgili işletim sistemine yüklemek için burada verilen prosedürü izleyin.
Windows üzerine kurulum
Windows için 32 bit ve 64 bit indirmenin mevcut olduğuna dikkat edin. Zip dosyasını indirin ve içeriği çıkarın ve seçtiğiniz bir dizinde saklayın.
Şurada bulunan ortam değişkenlerini ekleyin: ControlPanel ---> System ---> Advanced system settings.
Şimdi tıklayın Environment Variables düğmesini tıklayın ve burada gösterildiği gibi dizin yolunu ekleyin -
Ayrıca sistem değişkenini burada gösterildiği gibi düzenleyebilirsiniz -
Bu adımlar tamamlandıktan sonra, Go ile çalışmaya başlayabilmelisiniz. Komut istemini açın ve sürüm için Git komutunu kontrol edin. Aynısı için aşağıdaki ekran görüntüsüne bakın.
Linux ve Mac OS için Kurulum
Linux ve Mac OS üzerine paket yüklemek için, aşağıda gösterilen talimatları izleyin -
Paketleri açın ve yerinde saklayın /usr/local/go. Şimdi ekle/usr/local/go/binPATH ortam değişkenine. Kullanılarak yapılabilir/etc/profile veya $HOME/.profile.
Bu amaçla aşağıdaki komutu kullanabilirsiniz
export PATH=$PATH:/usr/local/go/bin
Windows, Linux ve Mac'e AWS desteği eklemek için git komut satırınızda aşağıdakileri kullanın -
go.exe get -u github.com/aws/aws-lambda-go/lambda
go.exe get -u github.com/aws/aws-lambda-go/lambdacontext
go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip
Windows / Linux / Mac kodunu derlemek için aşağıdaki komutları kullanın -
GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main
GO kullanarak AWS Lambda İşlevi
Derleme çalıştırılabilir bir dosya verdiğinde Go'da döndürülen bir program. Aşağıda, AWS Lambda desteğiyle Go'da basit bir program yer almaktadır. İthal etmemiz gerekiyorgithub.com/aws/aws-lambda-go/lambdaBu, Lambda programlama işlevine sahip olduğundan AWS Lambda için bir diğer önemli ihtiyaç da işleyicidir.
Main.go
// main.go
package main
import (
"github.com/aws/aws-lambda-go/lambda"
)
func hello() (string, error) {
return "Hello Lambda", nil
}
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Unutmayın ki Goprogram main'den başlar. start işleyici işlevi ile çağrılır. Aşağıda gösterilen kodu inceleyin -
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Şimdi, yukarıdaki dosyayı Go komutunu kullanarak çalıştıralım ve ardından çalıştırılabilir dosyayı zipleyelim.
Kullandığımız dosyanın yapısı burada gösterildiği gibidir -
İle go build, main.exe adında bir yürütülebilir dosya oluşturur. Dosyayı sıkıştırmak ve AWS Lambda'ya yüklemek için aşağıdaki prosedürü kullanabilirsiniz -
Windows / Linux / Mac kodunu derlemek için aşağıdaki komutları kullanın -
GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main
Ardından, AWS konsolunda oturum açın ve şunu kullanarak Lambda işlevi oluşturun Go çalışma zamanı olarak -
İşlev oluşturulduktan sonra, yukarıda oluşturulan çalıştırılabilir zip dosyasını yükleyin.
Go ile Lambda işlev işleyicisi
İşleyici, Go programının yürütülmesinin başladığı yerdir. Ana aramadanlambda.start, yürütme eylemci işlevi ile çağrılır. Eklenecek işleyicininmain.
Anlamak için buradaki kodu inceleyin -
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Aşağıda verilen ekran görüntülerine göre izleyin -
Şimdi işlevi kaydedin ve test edin. Yürütme sonucunu burada gösterildiği gibi görebilirsiniz.
Karşılık gelen günlük çıktısı burada gösterildiği gibi olacaktır -
Go ile bağlam nesnesi
AWS Lambda in Go, bağlam için aşağıdaki genel değişkenleri ve özellikleri sağlar.
MemoryLimitInMB - aws lambda'da yapılandırılan MB cinsinden bellek sınırı.
FunctionName - aws lambda işlevinin adı.
FunctionVersion - çalıştırılan aws lambda işlevinin sürümü.
LogStreamName - cloudwatch günlük akışı adı.
LogGroupName - cloudwatch grup adı.
Bağlamda mevcut özellikler aşağıdaki gibi verilmiştir -
AwsRequestID
Bu, AWS Lambda işlevi çağrıldığında aldığınız AWS istek kimliğidir.
ClientContext
Bu, AWS Mobile SDK aracılığıyla çağrıldığında istemci uygulaması ve cihazla ilgili ayrıntıları içerir. Boş olabilir. İstemci bağlamı, istemci kimliği, uygulama başlığı, sürüm adı, sürüm kodu ve uygulama paketi adı gibi ayrıntıları sağlar.
InvokedFunctionArn
İşlevin ARN'si çağrıldı. Niteliksiz bir ARN, $ LATEST sürümünü çalıştırır ve diğer adlar, işaret ettiği işlev sürümünü çalıştırır.
Kimlik
AWS mobil SDK ile kullanıldığında Amazon Cognito kimlik sağlayıcısı hakkında ayrıntılar verir.
Eklenen değişiklikler main.go bağlam ayrıntılarını yazdırmak için -
// main.go
package main
import (
"context"
"log"
"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-lambda-go/lambdacontext"
)
func hello(ctx context.Context) (string, error) {
lc, _ := lambdacontext.FromContext(ctx);
log.Print(lc);
log.Print(lc.AwsRequestID);
log.Print(lc.InvokedFunctionArn);
return "Hello Lambda", nil
}
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
İthal etmemiz gerekiyor log ve lambda contextGo ile kullanmak için. Bağlam ayrıntıları aşağıdaki gibidir -
func hello(ctx context.Context) (string, error) {
lc, _ := lambdacontext.FromContext(ctx);
log.Print(lc);
log.Print(lc.AwsRequestID);
log.Print(lc.InvokedFunctionArn);
return "Hello Lambda", nil
}
Yukarıdaki kodu test ederken aşağıdaki çıktıyı gözlemleyebilirsiniz -
Günlük verileri
İle Go aşağıda gösterildiği gibi günlük veya fmt modülünü kullanarak verileri günlüğe kaydedebilirsiniz -
// main.go
package main
import (
"log"
"fmt"
"github.com/aws/aws-lambda-go/lambda"
)
func hello() (string, error) {
log.Print("Hello from Lambda Go using log");
fmt.Print("Hello from Lambda Go using fmt");
return "Hello Lambda", nil
}
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Aynı çıktı aşağıda gösterildiği gibidir -
CloudWatch'ta Günlükleri Kontrol Etme
Günlükleri CloudWatch'ta da görebilirsiniz. Bunun için AWS hizmetine gidin ve cloudwatch'ı seçin ve tıklayınLogssol tarafta. Şimdi, günlükleri görmek için listede Lambda işlevini arayın -
İşlev Hataları
Aşağıdaki kodda gösterildiği gibi hata modülünü kullanarak AWS Lambda'da özel hata işleme oluşturabilirsiniz -
// main.go
package main
import (
"errors"
"github.com/aws/aws-lambda-go/lambda"
)
func hello() error {
return errors.New("There is an error in the code!")
}
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Yukarıda gösterilen kod için çıktı aşağıda verildiği gibidir -
Bu bölüm size C # dilinde AWS Lambda işleviyle nasıl çalışılacağını ayrıntılı olarak açıklayacaktır. Burada, kodu yazıp AWS Lambda'ya dağıtmak için visual studio kullanacağız. Visual Studio'nun yüklenmesi ve AWS araç setinin Visual Studio'ya eklenmesiyle ilgili her türlü bilgi ve yardım için lütfen şu adrese bakın:IntroductionBu eğitimdeki bölüm. Visual Studio kurulumunu tamamladığınızda, lütfen aşağıda verilen adımları izleyin. Daha iyi anlamak için ilgili ekran görüntülerine bakın -
Aşama 1
Visual Studio'nuzu açın ve yeni proje oluşturmak için adımları izleyin. TıklamakFile -> New -> Project.
Adım 2
Şimdi, seçtiğiniz yerde aşağıdaki ekran görüntülenir. AWS Lambda for Visual C#. SeçinizAWS Lambda Project (.NET Core).
Gerekirse adı değiştirebilirsiniz, burada varsayılan ad kalacaktır. TıklayınOK devam etmek.
Sonraki adımda sizden bir Blueprint.
Seçiniz Empty function bu örnek için ve tıklayın Finish. Aşağıda gösterildiği gibi yeni bir proje yapısı oluşturacaktır -
Şimdi seçin Function.cs AWS Lambda için olay ve bağlam içeren işleyicinin oluşturulduğu ana dosyadır.
Functions.cs dosyasının görüntüsü aşağıdaki gibidir -
Giriş ve çıkış parametrelerini AWS Lambda işlevine serileştirmek için aşağıda verilen komutu kullanabilirsiniz.
[assembly:
LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
C # için İşleyici Ayrıntıları
İşleyici şu şekilde görüntülenir -
public string FunctionHandler(string input, ILambdaContext context) {
return input?.ToUpper();
}
Yukarıdaki kodun çeşitli bileşenleri aşağıda açıklanmıştır -
FunctionHandler −Bu, C # AWS Lambda işlevinin başlangıç noktasıdır.
String input − İşleyicinin parametreleri string input S3 nesnesi, API ağ geçidi ayrıntıları vb. gibi tüm olay verilerine sahiptir.
ILambdaContext context −ILamdaContext, bağlam ayrıntılarına sahip bir arabirimdir. Lambda işlev adı, bellek ayrıntıları, zaman aşımı ayrıntıları vb. Gibi ayrıntılara sahiptir.
Lambda işleyicisi eşzamanlı ve eşzamansız bir şekilde çağrılabilir. Yukarıda gösterildiği gibi senkronize bir şekilde çağrılırsa, dönüş türüne sahip olabilirsiniz. Eşzamansızsa, dönüş türünün geçersiz olması gerekir.
Şimdi, AWS Lambda C #'yi dağıtalım ve aynısını test edelim. Projeye sağ tıklayın ve tıklayınPublish to AWS Lambda aşağıda gösterildiği gibi -
Doldurun Function Name ve tıklayın Next. Görüntülenen bir sonraki ekran,Advanced Function Details gösterildiği gibi -
Giriş Role Name, Memory ve Timeout. Ayrıntılar Burada yaratılan ve kullanılan belleği 128MB ve zaman aşımını 10 saniye olarak seçtiğimizi unutmayın. Bittiğinde tıklayınUpload AWS Lambda konsolunda yayınlamak için.
AWS Lambda işlevi yüklendiğinde aşağıdaki ekranı görebilirsiniz. TıklayınInvokeoluşturulan AWS Lambda işlevini çalıştırmak için. Şu anda, yazılan koda göre bazı girdilere ihtiyaç duyduğu için hata gösteriyor.
Şimdi, bazı örnek girişler girelim ve Invoketekrar dene. Burada giriş kutusuna bir metin girdiğimizi ve aynı şeyi tıkladığımızı unutmayın.invokeyanıt bölümünde büyük harfle görüntülenir. Günlük çıktısı aşağıda gösterilmektedir -
Şimdi, işlevi Visual Studio'dan dağıtırken işlevin oluşturulup oluşturulmadığını görmek için AWS konsolunu da kontrol edelim.
Yukarıda oluşturulan Lambda işlevi aws lambda using csharp ve aynısı aşağıda verilen ekran görüntülerinde gösterildiği gibi AWS konsolunda görüntülenir -
İşleyici İmzası
İşleyici, AWS'nin yürütmesi için başlangıç noktasıdır. İşleyicinin adı şu şekilde tanımlanmalıdır -
ASSEMBLY::TYPE::METHOD
İmza detayları aşağıda açıklanmıştır -
ASSEMBLY- Bu, oluşturulan uygulama için .NET derlemesinin adıdır. Temelde projenin oluşturulduğu klasörün adıdır.
TYPE- Bu, işleyicinin adıdır. Temelde namespace.classname'dir.
METHOD - Bu, işlev işleyicisinin adıdır.
İşleyici imzası kodu aşağıda gösterildiği gibidir -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
namespace AWSLambda3 {
public class Function {
/// <summary>
/// A simple function that takes a string and does a ToUpper
/// </summary>
/// <param name="input"></param>
/// <param name="context"></param>
/// <returns></returns>
public string FunctionHandler(string input, ILambdaContext context) {
return input?.ToUpper();
}
}
}
Burada montajın AWSLamda3Tür, isim alanı.classname'dir. AWSLambda3.Function ve Yöntem FunctionHandler. Böylece, işleyici imzasıAWSLamda3::AWSLambda3.Function::FunctionHandler
C # 'da bağlam nesnesi
Context Object, AWS ortamındaki çalışma zamanı hakkında yararlı bilgiler verir. Bağlam nesnesinde bulunan özellikler aşağıdaki tabloda gösterildiği gibidir -
Sr.No | Özellikler ve Açıklama |
---|---|
1 | MemoryLimitInMB Bu, AWS Lambda işlevi için yapılandırılan belleğin ayrıntılarını verecektir |
2 | FunctionName AWS Lambda işlevinin adı |
3 | FunctionVersion AWS Lambda işlevinin sürümü |
4 | InvokedFunctionArn ARN bu işlevi çağırmak için kullanılır. |
5 | AwsRequestId Oluşturulan AWS işlevi için AWS istek kimliği |
6 | LogStreamName Cloudwatch günlük akışı adı |
7 | LogGroupName Cloudwatch grup adı |
8 | ClientContext AWS mobil SDK ile kullanıldığında istemci uygulaması ve cihazı hakkında bilgiler |
9 | Identity AWS mobil SDK ile kullanıldığında amazon cogbnito kimliği hakkında bilgiler |
10 | RemainingTime İşlev sonlandırılana kadar kalan yürütme süresi |
11 | Logger Bağlamla ilişkili kaydedici |
Misal
Bu bölümde, yukarıdaki özelliklerden bazılarını AWS Lambda'da C # ile test edelim. Aşağıda verilen örnek kodu inceleyin -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
namespace AWSLambda6 {
public class Function {
/// <summary>
/// </summary>
/// <param name="input"></param>
/// <param name="context"></param>
/// <returns></returns>
public void FunctionHandler(ILambdaContext context) {
LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");
}
}
}
Yukarıdaki kodu çağırdığınızda gözlemleyebileceğiniz ilgili çıktı C# aşağıda gösterildiği gibidir -
Yukarıdaki kodu çağırdığınızda gözlemleyebileceğiniz ilgili çıktı AWS Console aşağıda gösterildiği gibidir -
C # kullanarak günlük kaydı
Günlük kaydı için iki işlevi kullanabilirsiniz -
context.Logger.Log
LambdaLogger.Log
Burada gösterilen aşağıdaki örneği inceleyin -
public void FunctionHandler(ILambdaContext context) {
LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");
}
Yukarıda verilen koda karşılık gelen çıktı burada gösterilmektedir -
Günlükleri CloudWatch'tan aşağıda gösterildiği gibi alabilirsiniz -
Lambda İşlevi için C # 'da Hata İşleme
Bu bölümde C # 'da hata işleme anlatılmaktadır. Hata işleme için,Exception sınıf aşağıda gösterilen örnekte gösterildiği gibi uzatılmalıdır -
misal
namespace example {
public class AccountAlreadyExistsException : Exception {
public AccountAlreadyExistsException(String message) :
base(message) {
}
}
}
namespace example {
public class Handler {
public static void CreateAccount() {
throw new AccountAlreadyExistsException("Error in AWS Lambda!");
}
}
}
Yukarıda verilen koda karşılık gelen çıktı aşağıda verildiği gibidir -
{
"errorType": "LambdaException",
"errorMessage": "Error in AWS Lambda!"
}
Önceki bölümlerde, AWS konsolunda AWS Lambda işlevinin nasıl oluşturulacağını öğrendik. Ancak, bir Lambda işlevi oluşturmak için başka parametreler de vardır. Bunlar, bellek ayırma, zaman aşımı vb. İçerir.
Bu bölümde, AWS Lambda için aşağıdaki yapılandırma özelliklerini ayrıntılı olarak anlayalım.
Hafıza Tahsisi
AWS konsolunda oturum açın ve mevcut lambda işlevini oluşturun veya seçin. TıklaConfigurationayrılan belleğin ayrıntılarını almak için sekmesi. Aşağıda gösterilen ekran görüntüsüne bakın -
Varsayılan olarak ayrılan belleğin 128MB. Belleği artırmak istiyorsanız kaydırıcıya tıklayabilirsiniz.
Hafıza şu şekilde artacaktır: 64MBkaydırıcıyı hareket ettirirken. Kullanılabilir maksimum belleğin3008MB. Aşağıda gösterilen ekran görüntüsüne bakın -
Ayrıca kullanabilirsin aws clibellek sınırını artırmak için komut isteminden. Belleği 64MB'lık artışlarla vermeniz gerekecek.
Şimdi, AWS Lambda'nın bellek sınırını şu adla artıralım:myfirstlambdafunction.
Fonksiyonun hafıza detayları aşağıda verilen ekran görüntüsünde gösterilmektedir -
Hafızayı değiştirmek için kullanılan komut aws cli aşağıdaki gibidir -
aws lambda update-function-configuration --function-name your function name --
region region where your function resides --memory-size memory amount --
profile admin user
AWS Lambda işlevinin karşılık gelen çıkışı myfirstlambdafunctionAWS konsolunda burada gösterilmektedir. Belleğin 128MB'den 256MB'ye değiştiğini gözlemleyin.
Maksimum Yürütme Süresi
Zaman aşımı, zaman aşımı meydana gelirse sona erdirmek için AWS Lambda işlevine ayrılan süredir. AWS Lambda işlevi, ayrılan süre içinde çalışır veya belirtilen zaman aşımını aşarsa sona erer. İşlevin çalışması için gereken süreyi değerlendirmeniz ve buna göre zamanı seçmeniz gerekir.Configuration AWS konsolundaki sekme aşağıda gösterildiği gibi -
IAM Rolü
AWS Lambda işlevi oluştururken, rolün veya iznin atanması gerekir. AWS Lambda for S3 veya dynamoDB'ye ihtiyacınız olması durumunda lambda hizmetlerine ilişkin iznin atanması gerekir. AWS Lambda, atanan role bağlı olarak atılacak adımlara karar verecektir. Örneğin, dynamodb'a tam erişim verirseniz, dynamodb tablosundaki satırları ekleyebilir, güncelleyebilir ve silebilirsiniz.
İşleyici Adı
Bu, AWS Lambda işlevinin yürütülmesinin başlangıcıdır. İşleyici işlevi, tetiklenen olayın, bağlam nesnesinin ve geri gönderilmesi gereken geri aramanın ayrıntılarına sahiptir.success veya error AWS Lambda.
Nodejs'deki işleyici işlevinin biçimi burada gösterilmektedir -
exports.handler = (event, context, callback) => {
callback(null, "hello from lambda");
};
Ortam Değişkenlerini kullanan Lambda Fonksiyonu
Bu bölümde, yapılandırma bölümüne eklenen ortam değişkenlerini kullanarak basit bir Lambda işlevi oluşturacağız. Bu amaçla, aşağıda verilen adımları izleyin ve ilgili ekran görüntülerine bakın -
Aşama 1
AWS konsoluna gidin ve gösterildiği gibi Lambda'da bir işlev oluşturun.
Adım 2
Şimdi, ortam değişkenlerini gösterildiği gibi ekleyin -
Aşama 3
Şimdi aynısını Lambda kodunda aşağıdaki gibi getirelim -
exports.handler = (event, context, callback) => {
var hostName = process.env.host;
var userName = process.env.username;
callback(null, "Environment Variables =>"+hostName+" and "+userName);
};
4. adım
Ayrıntıları ortam değişkenlerinden almak için kullanmamız gereken process.envgosterildigi gibi. Bu söz diziminin şuna dikkat edin:NodeJS Çalışma süresi.
var hostName = process.env.host;
var userName = process.env.username;
Adım 5
Lambda işlevinin yürütme sırasında çıktısı gösterildiği gibi olacaktır -
Lambda işlevi oluşturabilir ve aynısını AWS konsolunda test edebiliriz. Bu bölüm bunu ayrıntılı olarak tartışmaktadır. Bu amaçla, burada verilen adımları izlemeniz ve verilen ilgili ekran görüntülerine bakmanız gerekecektir -
Aşama 1
AWS Konsolunda oturum açın https://aws.amazon.com/console/. Şimdi, AWS hizmetlerinin görüntülendiği ekrana yönlendirileceksiniz.
Adım 2
Şimdi tıklayın Lambdayukarıda vurgulandığı gibi hizmet. Bu, aşağıda gösterildiği gibi işlev oluşturmak için yeniden yönlendirecektir -
Aşama 3
Şimdi tıklayın Create functionve işlevin ayrıntılarını girin. Daha sonra aşağıda gösterildiği gibi bir ekran görebilirsiniz -
4. adım
Seçtiğiniz dili seçerek kodunuzu yazabilirsiniz. Seçilen seçenek kodu satır içinde düzenle ise kod düzenleyicide yazılmalıdır. Mevcut diğer seçenekler aşağıdaki gibidir -
Adım 5
Tamamlandığında, aşağıda gösterildiği gibi sağ üst köşede düğmenin verildiği değişiklikleri kaydetmeniz gerekir -
6. Adım
Şimdi tıklayın Testbuton. Bu, aşağıda gösterildiği gibi, Lambda işlevinin çalıştırılmasına ilişkin tüm ayrıntıları verir -
7. Adım
İçin kod index.js aşağıdaki gibidir -
exports.handler = (event, context, callback) => {
// TODO implement
callback(null, 'Lambda test');
};
Bu arayacak Callback functionve sonuç hata veya başarı olabilir. Başarı durumunda bir göreceksinizLambda testİleti; hata varsa, boş geçecektir.
8. Adım
Role Lambda işlevi ayrıntıları, yapılandırmanın bir parçasıdır ve aşağıda gösterildiği gibi görüntülenir -
9. Adım
Artık, gerekirse rolü güncelleyebilir ve Lambda işlevini kaydedebilirsiniz. Ardından, lambda işlevi için bellek ve zaman aşımı ayrıntıları aşağıda gösterildiği gibi görüntülenir -
10. adım
Şimdi, olay gerçekleştiğinde çalışması için Lambda işlevine tetikleyici eklememiz gerekiyor. Tetikleme ayrıntıları, aşağıda gösterildiği gibi AWS Lambda işlevi ekranının başlangıcında görüntülenir -
Buradan, Lambda işlevinizin tetiklenmesini istediğiniz tetikleyiciyi seçebilirsiniz. Tetikleyiciyi seçtiğinizde, tetikleyici için yapılandırma ayrıntılarının eklenmesi gerekir.
Örneğin, S3'teki tetikleyici için eklenecek yapılandırma ayrıntıları aşağıdaki gibidir -
11. adım
Şimdi, tetikleyicinin açılmasını istediğiniz kovayı seçin. Olay türü aşağıdaki ayrıntılara sahiptir -
Adım 1/2
Tetikleyici için, önek türü dosyalarından veya dosya modelinden de bahsedebilirsiniz, Lambda'nın tetiklenmesi gerekir. Ayrıntılar gösterildiği gibidir -
Adım 13
Şimdi, tetikleyici için gerekli ayrıntıları doldurun ve Add Tetikleyicinin eklenmesi için Lambda işlevini kaydedin. İşlev kaydedildiğinde ayrıntılar dağıtılır ve bundan böyle dosyalar S3 klasörüne her eklendiğinde Lambda tetiklenir.
AWS Lambda'ya eklenen S3 tetikleyicisini gösteren aşağıdaki ekran görüntüsünü inceleyin -
14. adım
Şimdi, Lambda işlevini test etmek için S3 örnek olayını kullanalım. Aynı kod burada gösterilmektedir -
Amazon S3 Örnek Olay Koydu
{
"Records": [{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"ExampleIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg",
"size": 1024
},
"bucket": {
"arn": bucketarn,
"name": "Examplebucket",
"ownerIdentity": {
"principalId": "Example"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "Example123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "Example123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "Example"
},
"eventSource": "aws:s3"
}]
}
S3 koyma olayından yüklenen dosyanın ayrıntılarını almak için aşağıdaki komutu kullanmanız gerekecek -
event.Records[0].s3.object.key //will display the name of the file
Paket adını almak için aşağıdaki komutu kullanmanız gerekecek -
event.Records[0].s3.bucket.name //will give the name of the bucket.
EventName'i almak için aşağıdaki komutu kullanmanız gerekecek -
event.Records[0].eventName // will display the event name
Adım 15
Şimdi, S3 ayrıntılarını aşağıda gösterildiği gibi yazdırmak için AWS Lambda kodunu güncelleyelim -
exports.lambdahandler = (event, context, callback) => {
callback(null, "Bucket name: "+event.Records[0].s3.bucket.name+"
File name:"+event.Records[0].s3.object.key );
};
16. adım
Değişiklikleri kaydedin. TıklayınTest ve S3 örnek olayını girin -
17. Adım
Şimdi tıklayın Test ve çıktıyı gösterildiği gibi görebilirsiniz -
Adım 18
S3 AWS hizmetini kullanarak tetikleyiciyi S3 üzerinde test etmek için S3 klasörüne bir dosya yükleyin: test bucket trigger. İzinler için S3 ve SES politikasını (posta göndermek için) almak üzere Lambda ile kullanılan rolü güncelleyin. Bu, tetikleyicinin çalıştığını görmek için posta göndermek için AWS Lambda kodunu günceller -
Güncellenen AWS Lambda kodu gösterildiği gibidir -
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
exports.lambdahandler = function(event, context, callback) {
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "Bucket name: "+event.Records[0].s3.bucket.name+" File name:"+event.Records[0].s3.object.key
}
},
Subject: {
Data: "S3 and AWS Lambda"
}
},
Example: "[email protected]"
};
console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
İlgili ekran görüntüsü burada gösterildiği gibidir -
Adım 19
Şimdi, dosyayı yükleyin ve AWS Lambda kodunda sağlanan posta kimliğini kontrol edin -
AWS CLIAWS hizmetleriyle çalışmaya yardımcı olan bir komut satırı aracıdır. Bunu, aws lambda işlevini oluşturmak, güncellemek, silmek, çağırmak için kullanabiliriz. Bu bölümde, AWS CLI'nın kurulumu ve kullanımı hakkında ayrıntılı olarak tartışacaksınız.
AWS CLI kurulumu
Bu bölüm, AWS CLI'nin çeşitli işletim sistemlerine yüklenmesi sırasında size yol gösterecektir. Verilen adımları izleyin ve eklenen her yerde ilgili ekran görüntülerini izleyin.
Pencereler için
Windows yapılandırmanızı kontrol edin ve AWS CLI MSI'yı yüklemek için aşağıdaki bağlantılardan birini seçin -
Windows 64 bit için - Windows (64bit) için AWS CLI MSI yüklemesi
Windows 32 bit için - Windows için AWS CLI MSI yüklemesi (32)
İlgili bağlantıyı seçip tıkladığınızda, burada gösterildiği gibi bir Pencere bulabilirsiniz -
Ardından, Environment path in windows aşağıdaki ekran görüntülerinde gösterildiği gibi -
Tamamlandıktan sonra, komut isteminde aşağıdaki komutu kullanarak aws cli yüklendi -
aws --version
Aşağıdaki ekran görüntüsünde gösterildiği gibi aws-cli sürümünün ayrıntılarını görüntüler -
Linux / Mac için
Linux ve Mac'e yüklemek için Python 2.6.3 veya daha yüksek sürümüne ihtiyacınız var. Ardından, sonraki yükleme işlemleri için aşağıdaki komutları kullanın -
$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" $ unzip awscli-bundle.zip
$ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
Şimdi, AWS ayarlarını yapılandırmamız gerekiyor. Bu amaçla aşağıdaki komutu kullanabilirsiniz -
aws configure
Bu amaçla, aşağıdaki gibi ayrıntılar gerektirir:
- AWS Erişim Anahtarı Kimliği
- AWS Gizli Erişim Anahtarı
- Varsayılan bölge adı
- Biçimden varsayılan çıktı
Bu ayrıntıları aws konsolunuzdan edinebilirsiniz. Gösterildiği gibi sağ üst köşedeki Hesap adınıza gidin -
Şimdi tıklayın My Security Credentialsve sol taraftan kullanıcıları seçin. İstendiği gibi ayrıntılarla kullanıcı ekleyin.
Kullanıcıyı ekleyin ve erişim anahtarını ve gizli anahtarı alın. Yeni erişim anahtarını görmek içinShow. Kimlik bilgileriniz aşağıda gösterildiği gibi görünecektir -
Access key ID − AOSAIOSFOCDD7Example
Secret access key − aJuirCVtnROUN/K7MDENG/bPxRfiCYExampleKEY
AWS CLIS için Referans Komutlar
Aşağıdaki tablo, çalışmak için mevcut komut referanslarını verecektir. aws cli.
Aws cli komutunun adı | Komut referansı |
---|---|
create-function | create-function --function-name <value> --runtime <value> --role <value> --handler <value> [--code <value>] [--description <value>] [--timeout < değer>] [--memory-size <value>] [--environment <value>] [--kms-key-arn <value>] [--tags <value>] [--zip-file <value> ] [--cli-input-json <değer>] |
list-functions | liste-işlevleri [--master-region <value>] [--function-version <value>] [--max-items <value>] [--cli-input-json <value>] [--starting- simge <value>] [--page-size <value>] [--generate-cli-skeleton <value>] |
get-function | get-function --function-name <value> [--qualifier <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>] |
get-function-configuration | get-function-configuration --function-name <value> [--qualifier <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>] |
get-account-settings | get-hesap-ayarları [--cli-input-json <value>] [--generate-cli-skeleton <value>] |
update-function-configuration | güncelleme-fonksiyon-yapılandırma --function-name <value> [--role <value>] [--handler <value>] [--description <value>] [--timeout <value>] [--memory- size <value>] [--vpc-config <value>] [--environment <value>] [--runtime <value>] [--dead-letter-config <value>] [--kms-key- arn <value>] [--tracing-config <value>] [--revision-id <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>] |
update-function-code | güncelleme-işlevi-kodu --function-adı <değer> [--zip-dosyası <değer>] [--s3-kova <değer>] [--s3-anahtar <değer>] [--s3-nesne- sürüm <değer>] [--yayınla | --no-publish] [--dry-run | - no-dry-run] [--revision-id <value>] [- cli-input-json <value>] [- generate-cli-skeleton <value>] |
delete-function | delete-function --function-name <value> [--qualifier <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>] |
Şimdi bu komutları tek tek ayrıntılı olarak tartışalım.
işlev oluşturma
Bu api, yeni bir lambda işlevi yaratacaktır. Kodun zip formatında verilmesi gerekir. Oluşturulacak işlev zaten mevcutsa, api başarısız olur. İşlev adının büyük / küçük harfe duyarlı olduğunu unutmayın.
Dahil Edilen Komutlar
Create-function ile kullanabileceğiniz komutların listesi burada verilmiştir -
create-function
--function-name <value>
--runtime <value>
--role <value>
--handler <value>
[--code <value>]
[--description <value>]
[--timeout <value>]
[--memory-size <value>]
[--environment <value>]
[--kms-key-arn <value>]
[--tags <value>]
[--zip-file <value>]
[--cli-input-json <value>]
Dahil Olan Seçenekler
Yukarıdaki işlevlerle kullanabileceğiniz çeşitli seçenekler aşağıdaki gibidir -
--function-name (string)- Bu, işlevin adını alır. İsim 64 bitlik karakterler olabilir.
--runtime(string)- Burada çalışma zamanı ortamını, yani dil seçimini belirtmeniz gerekir. Çalışma zamanının ayrıntıları aşağıda verilmiştir -
Mevcut seçenekler | Çalışma süresi |
---|---|
Python v3.6 | python3.6 |
Python v2.7 | python2.7 |
NodeJS v6.10 | nodejs6.10 |
NodeJS v8.10 | nodejs8.10 |
Java | java8 |
C # 1 | dotnetcore1.0 |
C # 2 | dotnetcore2.0 |
Git | go1.x |
--role(string)- Bu, lambda politikasının adı, yani diğer servislere erişim için lambda fonksiyonuna verilecek rol olacaktır. Belirtilen role göre izne sahip olacaktır.
--handler (string) - Bu, lambda kod yürütmesinin başlayacağı işleyicinin adıdır.
- Nodejs için eylemci adı, dışarı aktardığımız modül adıdır.
- Java için bu, package.classname :: handler veya package.classname'dir.
- Python için işleyici, dosyanın adıdır.
--code (structure) −AWS Lambda kodu
--description (string) - AWS Lambda işlevi açıklaması
--timeout (integer)- zaman aşımı, lambda işlevinin yürütmeyi sonlandırması gereken zamana sahip olacaktır. Varsayılan 3s'dir.
--memory-size (integer)- Bu, aws lambda fonksiyonuna verilen hafızadır. AWS, verilen belleğe göre CPU ve bellek ayırma miktarını tahsis eder.
--environment (structure) - aws lambda işlevinde gerekli olan ortam ayrıntılarına sahip bir nesnedir.
e.g : Variables = {Name1 = string, Name2 = string}
--kms-key-arn (string)- bu, ortam değişkenlerini şifrelemek için kullanılan amazon kaynak adıdır (ARN). Sağlanmazsa, şifreleme için varsayılan ayarları alacaktır.
--zip-file (blob) - kodun ayrıntılarını içeren zip dosyasının yolu.
--cli-input-json (string): Sağlanan JSON dizesine göre hizmet işlemini gerçekleştirir. JSON dizesi --generate-cli-skeleton tarafından sağlanan biçimi izler. Komut satırında başka bağımsız değişkenler sağlanmışsa, CLI değerleri JSON tarafından sağlanan değerleri geçersiz kılar.
Şimdi, çalışma zamanını nodejs olarak kullanarak basit bir AWS Lambda işlevi oluşturalım ve yazdırılacak bazı console.log'lar ekleyelim.
Aynısını anlamak için örnek bir kod düşünün -
exports.handler = async (event) => {
console.log("Using aws cli");
return 'Hello from Lambda from aws cli!'
};
Şimdi dosyayı sıkıştırın ve awscli.zip.
ARN alınıyor
Rol için şunu kullanalım: arnoluşturduğumuz mevcut rolden. ARN'yi almak için, burada gösterilen adımları izlemeniz gerekecektir. Ekli her yerde ilgili ekran görüntülerini izleyin -
Aşama 1
IAM'ye gidin ve istediğiniz rolü seçin Roles. Rol için ARN ayrıntıları aşağıda gösterildiği gibi görüntülenir. KullanımRole ARN ile create-function içinde aws cli.
Burada arn rolünün: arn: aws: iam :: 625297745038: role / lambdaapipolicy olduğunu gözlemleyin
Değerleri olan komut create-function aşağıdaki gibidir -
aws lambda create-function
--function-name "awslambdausingcli"
--runtime "nodejs8.10"
--role "arn:aws:iam::625297745038:role/lambdaapipolicy"
--handler "awscli.handler"
--timeout 5
--memory-size 256
--zip-file "fileb://awscli.zip"
Şimdi, komutu aws cli'da çalıştırırsanız, aşağıda gösterildiği gibi bir çıktı bulabilirsiniz -
AWS konsolunda, Lambda işlevi aşağıda gösterildiği gibi görüntülenir -
Fonksiyonların ayrıntıları burada gösterildiği gibidir -
Yapılandırmanın ayrıntıları aşağıda verilmiştir -
İşlevi test edebilir ve çıktıyı gösterildiği gibi kontrol edebilirsiniz -
Karşılık gelen Günlük çıkışı burada gösterilir -
liste işlevleri
Bu api, AWS Lambda'da şimdiye kadar oluşturulmuş işlevlerin listesini verir.
Dahil Edilen Komutlar
Aşağıdakiler, bu API ile ilişkilendirilen komutlardır -
list-functions
[--master-region <value>]
[--function-version <value>]
[--max-items <value>]
[--cli-input-json <value>]
Liste fonksiyonları altındaki seçenekler
Aşağıdakiler, bu liste işlevleri api altında kullanabileceğiniz çeşitli seçeneklerdir -
--master-region(string)- isteğe bağlı. İşlevlerin görüntülenmesi gereken bölge.
--function-version(string)- isteğe bağlı. Bu, fonksiyon versiyonunu verecektir.
--max-items(integer)- isteğe bağlı. Bu, öğeleri belirtilen değere göre verecektir.
--cli-input-json(string)- isteğe bağlı. Sağlanan json dosyasına göre işlem gerçekleştirecek.
Değerleri olan komut list-functions aşağıdaki gibidir -
aws lambda list-functions --max-items 3
Komut, ayrıntıları aşağıdaki gibi görüntüler -
get-işlevi
Bu api, işlevlerin ayrıntılarını ve ayrıca create-function kullanılarak yüklenmiş zip dosyası içeren bir url bağlantısını verecektir. Zip ayrıntılarını içeren url yalnızca 10 dakika geçerli olacaktır.
Dahil Edilen Komutlar
Aşağıdakiler bu api ile ilişkili komutlardır -
get-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Dahil Olan Seçenekler
--function-name- AWS Lambda işlevinin adı. İşlevin Amazon Kaynak Adını da belirtebilirsiniz.
--qualifier(string)- İsteğe bağlı. İşlevin ayrıntılarını almak için işlev sürümü kullanılabilir.
Get-function değerlerine sahip komutlar -
aws lambda get-function --function-name awslambdausingcli
Komut ekranı ayrıntıları aşağıdaki gibidir -
Posta kodunun yüklendiği url'yi verir. Yukarıdaki durumda url -
https://prod-04-2014-
tasks.s3.amazonaws.com/snapshots/625297745038/awslambdausingcli-97048f8d-4a08
-4ed9-99d9-acb00d2063d2?versionId=d04HKvPu9S2zz8pzjbW6Rmf5o5fxnc_r&X-Amz-Security
-Token=FQoDYXdzEKT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDCpTmGvtwKToPBiWcyK3A96UcJEnwvYDhMbbxu
%2Bg2gffK2ocfnlEeiCHak8QqqE1RFpbKrdks9NzxP9gNbagL4M9RValxJ1a9PUY%2FOdAekscRHOiX00MVAxUlI8
2pKryhdOwLJWSj0uRzqvOxCcBwJenHrSNPeG6lMa2ZDo0qZFEUDONSaTg4nuSnJK1f6t3pMAKu4vF9wPvf92G%2BU
60rUxwleggigISmD9l1IlZse3%2BVF1JlNuN%2F5d85v0y2Q%2F%2BO515CybcZpn91sHPYG8JMJ00LsrkQ2Ww4VU
9Zz5c5QYH4JYPj0CyEgSz9b%2FMceMPpOoPUAMjctb%2FEwQqcShZeqAr9%2Fcd2ZI%2BXl2%2Bs4ri0ucgPvQQvs
eGIIiZbX3GqdwR2jb1nylrAEIfiuFMoSWfcFYoYtuL0MZnjGR9jy2GNkp6MB%2BlHHr7%2BnuFRUzU26rgDYmdE1w
Rb3%2B21Jm49WGDa9opRLvUxFaux57Or70haib2FuKzN6Gf3Vzzk5KPdWsYUpaLyf%2B1ovEytOZhB1JEXuCs%2FG
IlOXS88yxT%2BpOKmyxweiezpGgI%2FAkSAQTbSRsYQKIOFyIJNHzplwrJKhy28vy60numIBIo9Zqq2AU%3D
&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20180527T112426Z&X-Amz-
SignedHeaders=host&X-Amz-Expires=600&X-Amz-
Credential=ASIAICSQHLSBWFP37U4Q%2F20180527%2Fus-
east-1%2Fs3%2Faws4_request&X-Amz-Signature=
8b97e7d6d7da13313068e027894d2c875be5e50a0c5a62550f55307985bdc1aa
get-function-configuration
Bu, AWS Lambda işlevinin yapılandırma ayrıntılarını verecektir.
Aşağıdakiler bu api ile birlikte kullanılan komutlardır -
get-function-configuration
--function-name <value>
[--qualifier <value>]
The following are the options used with
--function-name (string) −aws lambda işlevinin adı. İşlevin Amazon Kaynak Adını da belirtebilirsiniz.
--qualifier(string) − Opsiyonel.Fonksiyon versiyonu, fonksiyonun detaylarını almak için kullanılabilir.
Get-function değerlerine sahip komutlar -
aws lambda get-function-configuration --function-name awslambdausingcli
Komut, ayrıntıları aşağıdaki gibi görüntüler -
get-account-settings
Bu api, hesap ayarlarını verir.
İlgili Komutlar
Bu api ile kullanabileceğiniz komut:
get-account-settings
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
İlgili Seçenekler
Bu API ile aşağıdaki seçenekleri kullanabilirsiniz -
--cli-input-json(string) − Sağlanan json dizesine göre hizmeti gerçekleştirir.
--generate-cli-skeleton(string) − API isteği göndermeden json çıktısını yazdırır.
Get-account-settings için aşağıdaki komutu kullanabilirsiniz -
aws lambda get-account-settings
Yukarıda verilen komutu çalıştırdığınızda aşağıdaki çıktıyı görebilirsiniz -
güncelleme-fonksiyon-konfigürasyonu
Bu api, oluşturulan AWS Lambda işlevi için yapılandırma ayrıntılarının güncellenmesine yardımcı olur. Belleği, zaman aşımını, işleyiciyi, rolü, çalışma zamanını, açıklamayı vb. Değiştirebilirsiniz.
İlgili Komutlar
Aşağıdakiler, güncelleme-işlevi-yapılandırma api ile ilgili komutlardır -
update-function-configuration
--function-name <value>
[--role <value>]
[--handler <value>]
[--description <value>]
[--timeout <value>]
[--memory-size <value>]
[--environment <value>]
[--runtime <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
İlgili Seçenekler
Aşağıdakiler update-function-configuration api ile ilgili seçeneklerdir -
--function-name − aws lambda işlevinin adı
--role (string) −isteğe bağlı. Rolün ARN'sinin güncellenmesi gerekiyor.
--handler (string) −isteğe bağlı. Aws lambda işlevinin işleyici ayrıntıları.
--description(string) −isteğe bağlı. İşlevin açıklaması.
--timeout(integer) −isteğe bağlı. Aws lambda işlevinin sona erdirilebilmesi için gereken süre.
--memory-size(integer) −isteğe bağlı. Bu, aws lambda fonksiyonuna verilen hafızadır. AWS, verilen belleğe göre CPU ve bellek ayırma miktarını tahsis eder.
--environment (structure) −isteğe bağlı. Aws lambda işlevinde gerekli olan ortam ayrıntılarına sahip bir nesnedir.
e.g: Variables = {Name1 = string, Name2 = string}
--runtime(string) − Burada çalışma zamanı ortamını, yani dil seçimini belirtmeniz gerekir.
Çalışma süresinin ayrıntıları aşağıdaki tabloda gösterilmektedir -
Mevcut seçenekler | Çalışma süresi |
---|---|
Python v3.6 | python3.6 |
Python v2.7 | python2.7 |
NodeJS v6.10 | nodejs6.10 |
NodeJS v8.10 | nodejs8.10 |
Java | java8 |
C # 1 | dotnetcore1.0 |
C # 2 | dotnetcore2.0 |
Git | go1.x |
--cli-input-json (string) −isteğe bağlı. Bu, sağlanan json dizesinde belirtildiği gibi api üzerinde işlemi gerçekleştirecektir.
--generate-cli-skeleton (string) −isteğe bağlı. Bu, api'yi çalıştırmadan tüm ayrıntıların JSON iskeletini çıkaracaktır. Çıktı, giriş olarak kullanılabilir.--cli-input-json.
Şimdi, daha önce oluşturduğumuz AWS Lambda işlevinin belleğini ve zaman aşımını değerlendirelim. Aşağıda verilen Adımları izleyin ve bu amaç için ekli ilgili ekran görüntülerini izleyin -
Aşama 1
Değişiklik gerçekleşmeden önceki bellek ve zaman aşımı aşağıdaki gibidir -
Adım 2
Şimdi birlikte update-function-configuration, bellek ve zaman aşımını 320MB ve zaman aşımını 10s olarak değiştirelim. Bu amaçla, aşağıdaki komutu değerlerle kullanın -
aws lambda update-function-configuration --function-name “awslambdusingcli”
--timeout 10 --memory-size 320
Aşama 3
Ardından aşağıdaki çıktıyı ekran olarak görebilirsiniz -
4. adım
Kullandıktan sonra AWS konsolundaki ekran update-function-configuration aşağıdaki gibidir -
Güncelleme işlevi kodu
Bu API, mevcut bir AWS Lambda işlevinin kodunu güncelleyecektir.
İlgili Komutlar
update-function-code
--function-name <value>
[--zip-file <value>]
[--s3-bucket <value>]
[--s3-key <value>]
[--s3-object-version <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
İlgili Seçenekler
Aşağıdakiler, güncelleme işlevi kodu api ile ilgili seçeneklerdir -
--function-name(string) − aws lambda işlevinin adı
--zip-file (blob) −isteğe bağlı. Güncellenecek kodun bulunduğu zip dosyasının yolu.
--s3-bucket(string) −isteğe bağlı. Kodun yüklendiği zip dosyasının bulunduğu S3 paket adı.
--s3-key(string) −isteğe bağlı. Yüklenmesi gereken AWS s3 nesne anahtarı adı.
--s3-object-version (string) −isteğe bağlı. AWS s3 nesne sürümü.
--cli-input-json (string) −isteğe bağlı. Bu, sağlanan json dizesinde belirtildiği gibi api üzerinde işlemi gerçekleştirecektir.
--generate-cli-skeleton (string) −isteğe bağlı. Bu, api'yi çalıştırmadan tüm ayrıntıların JSON iskeletini çıkaracaktır. Çıktı, --cli-input-json için bir girdi olarak kullanılabilir.
Güncellenen kod aşağıda gösterildiği gibidir -
exports.handler = async (event, context) => {
console.log("Using aws cli");
console.log()
return 'Hello from Lambda from aws cli!'
};
Aşağıdakileri kullanabilirsiniz command with values for this purpose -
aws lambda update-function-code --function-name "awslambdausingcli"
--zip-file "fileb://awscli.zip"
Karşılık gelen çıktı burada gösterildiği gibidir -
AWS konsolundan gelen ekran burada gösterildiği gibidir -
Karşılık gelen günlük çıktısı aşağıda gösterildiği gibidir -
silme işlevi
delete aws cli api verilen işlevi silecektir.
Dahil Edilen Komutlar
Aynısı için komut ayrıntıları burada verilmiştir -
delete-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Dahil Olan Seçenekler
Bu api'de yer alan seçenekler aşağıda verilmiştir -
--function-name(string) − bu lambda işlev adını veya aws lambda işlevinin arnını alacaktır.
--qualifier (string) −Bu isteğe bağlıdır. Burada, silinmesi gereken aws lambda sürümünü belirtebilirsiniz.
-- cli-input-json(string) −Sağlanan JSON dizesine göre hizmet işlemini gerçekleştirir. JSON dizesi --generate-cli-skeleton tarafından sağlanan biçimi izler. Komut satırında başka bağımsız değişkenler sağlanmışsa, CLI değerleri JSON tarafından sağlanan değerleri geçersiz kılar.
--generate-cli-skeleton(string) − API isteğini göndermeden json iskeletini standart çıktıya yazdırır.
aws lambda delete-function --function-name "lambdatestcli"
Şimdi, işlevin AWS Lambda işlev listesinde görünmeyeceğini gözlemleyin -
AWS Lambda, sunucusuz çerçeve kullanılarak oluşturulabilir ve dağıtılabilir. AWS Lambda tetikleyicileri oluşturmanıza ve gerekli rolleri oluşturarak aynısını dağıtmanıza olanak tanır. Sunucusuz çerçeve, büyük projelerin daha kolay bir şekilde ele alınmasını sağlar. Gereken olaylar ve kaynaklar tek bir yerde yazılır ve yalnızca birkaç komut, AWS konsolunda tam işlevselliğin dağıtılmasına yardımcı olur.
Bu bölümde, AWS sunucusuz çerçeveye nasıl başlayacağınızı ayrıntılı olarak öğreneceksiniz.
Npm kurulumunu kullanarak Sunucusuz Çerçeveyi kurun
Başlamak için önce yüklemeniz gerekir nodejs. Düğümleri aşağıdaki gibi kontrol edebilirsiniz -
Npm paketini kullanarak sunucusuz kurmak için aşağıdaki komutu kullanmanız gerekecek -
npm install -g serverless
Npm tamamlandığında, AWS Lambda işlevini oluşturmak ve dağıtmak için kullanılacak komut listesini gösteren sunucusuz komutu yürütün. Aşağıda verilen ekran görüntülerine bakın -
Sunucusuz yerine sls de kullanabilirsiniz. sls sunucusuz için kısa komuttur.
Komutla ilgili yardıma ihtiyacınız olursa sls, aşağıdaki komutu kullanabilirsiniz -
sls create --help
Sunucusuz bir çerçeve oluşturmak için aşağıda verilen adımları izlemelisiniz -
Aşama 1
Sunucusuz çerçeveyi kullanmaya başlamak için kimlik bilgilerini eklememiz gerekiyor. Bununla, AWS konsolunda ilk olarak kullanıcıyı aşağıdaki gibi yapabilirsiniz -
Adım 2
Tıklamak Next:Permissionsizin eklemek için düğme. Bu kullanıcıya mevcut politikaları veya Yönetici Erişimini eklemeniz gerekecektir.
Aşama 3
Tıklayın Create Userkullanıcıyı eklemek için. Sunucusuz çerçeveyi yapılandırmamız için gereken erişim anahtarını ve gizli anahtarı gösterecektir -
AWS Sunucusuz Çerçeveyi Yapılandırın
AWS sunucusuz çerçevesini nasıl yapılandıracağımızı görelim. Bu amaçla aşağıdaki komutu kullanabilirsiniz -
sls config credentials --provider aws --key accesskey --secret secretkey
Girilen kimlik bilgilerinin ayrıntılarının, yani access key ve secret key içinde saklanır file /aws/credentials.
İlk olarak, proje dosyalarınızın depolanmasını istediğiniz bir klasör oluşturun.
Sonra, çalışmaya başlayacağız aws-serverless Klasör.
Sunucusuz Çerçeve kullanarak AWS Lambda oluşturun
Şimdi, aşağıda verilen Adımları kullanarak sunucusuz çerçeve ile bir Lambda fonksiyonu oluşturalım -
Aşama 1
Sunucusuzluğun ayrıntıları aşağıdadır create komut -
Adım 2
Şimdi, aşağıdaki gibi şablonu atamamız gerekiyor -
AWS-nodejs, aws-nodejs-typescript, aws-nodejs-ecma-script, aws-python, aws-python3, aws-groovy-gradle etc.
Aşama 3
Kullanacağız aws-nodejssunucusuz çerçeve kullanarak ilk projemizi oluşturmak için şablon. Aynı amaca yönelik komut burada gösterildiği gibidir -
sls create --template aws-nodejs
Bu komutun aws-nodejs şablonu için bir ortak metin oluşturduğuna dikkat edin.
4. adım
Şimdi, bir IDE'de oluşturulan klasörü açın. Burada Visual Studio kodunu kullanıyoruz ve klasör yapısı aşağıdaki gibidir -
Adım 5
Oluşturulan 2 dosya var: handler.js ve Serverless.yml
AWS Lambda temel işlev ayrıntıları şurada gösterilmiştir: handler.js aşağıdaki gibi -
'use strict';
module.exports.hello = (event, context, callback) => {
const response = {
statusCode: 200,
body: JSON.stringify({
message: 'Go Serverless v1.0! Your function executed successfully!',
input: event,
}),
};
callback(null, response);
// Use this code if you don't use the http event with the LAMBDA-PROXY integration
// callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};
Bu dosya Serverless.yml aşağıda gösterildiği gibi sunucusuz çerçevenin yapılandırma ayrıntılarına sahiptir -
# Welcome to Serverless!
#
# This file is the main config file for your service.
# It's very minimal at this point and uses default values.
# You can always add more config options for more control.
# We've included some commented out config Examples here.
# Just uncomment any of them to get that config option.
#
# For full config options, check the docs:
# docs.serverless.com
#
# Happy Coding!
service: aws-nodejs # NOTE: update this with your service name
# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"
provider:
name: aws
runtime: nodejs6.10
# you can overwrite defaults here
# stage: dev
# region: us-east-1
# you can add statements to the Lambda function's IAM Role here
# iamRoleStatements:
# - Effect: "Allow"
# Action:
# - "s3:ListBucket"
# Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] }
# - Effect: "Allow"
# Action:
# - "s3:PutObject"
# Resource:
# Fn::Join:
# - ""
# - - "arn:aws:s3:::"
# - "Ref" : "ServerlessDeploymentBucket"
# - "/*"
# you can define service wide environment variables here
# environment:
# variable1: value1
# you can add packaging information here
#package:
# include:
# - include-me.js
# - include-me-dir/**
# exclude:
# - exclude-me.js
# - exclude-me-dir/**
functions:
hello:
handler: handler.hello
# The following are a few example events you can configure
# NOTE: Please make sure to change your handler code to work with those events
# Check the event documentation for details
# events:
# - http:
# path: users/create
# method: get
# - s3: ${env:BUCKET}
# - schedule: rate(10 minutes)
# - sns: greeter-topic
# - stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000
# - alexaSkill: amzn1.ask.skill.xx-xx-xx-xx
# - alexaSmartHome: amzn1.ask.skill.xx-xx-xx-xx
# - iot:
# sql: "SELECT * FROM 'some_topic'"
# - cloudwatchEvent:
# event:
# Example:
# - "aws.ec2"
# detail-type:
# - "EC2 Instance State-change Notification"
# detail:
# state:
# - pending
# - cloudwatchLog: '/aws/lambda/hello'
# - cognitoUserPool:
# pool: MyUserPool
# trigger: PreSignUp
# Define function environment variables here
# environment:
# variable2: value2
# you can add CloudFormation resource templates here
#resources:
# resources:
# NewResource:
# Type: AWS::S3::Bucket
# Properties:
# BucketName: my-new-bucket
# Outputs:
# NewOutput:
# Description: "Description for the output"
# Value: "Some output value"
Şimdi, gereksinimlerimize göre serverless.yml dosyasında değişiklikler eklememiz gerekiyor. Komutları aşağıda verilen şekilde kullanabilirsiniz -
Aşağıdaki komutu kullanabilirsiniz: Service -
service: aws-nodejs # NOTE: update this with your service name
Şimdi, buradan hizmeti değiştirin ve klasörümüze verilen adı gösterildiği gibi ekleyin -
service: aws-serverless # NOTE: update this with your service name
Sağlayıcı ayrıntıları gösterildiği gibidir -
provider:
name: aws
runtime: nodejs6.10
Sağlayıcı aws ve çalışma zamanı nodejs6.10. Eklememiz gerekiyorregion çalışacağımız ve stage, yani dev or prodproje için ortam. İşte sağlayıcının güncellenmiş ayrıntıları: sağlayıcı -
name: aws
runtime: nodejs6.10
# you can overwrite defaults here
stage: prod
region: us-east-1
IAM Rolü
iam roleyani, Lambda ile çalışma izninin kodu burada, .yml dosya -
# iamRoleStatements:
# - Effect: "Allow"
# Action:
# - "s3:ListBucket"
# Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] }
# - Effect: "Allow"
# Action:
# - "s3:PutObject"
# Resource:
# Fn::Join:
# - ""
# - - "arn:aws:s3:::"
# - "Ref" : "ServerlessDeploymentBucket"
# - "/*"
Diğer AWS hizmetleri için gerekli olan izin olan rolün ayrıntılarını yukarıdaki bölümde vermemiz gerektiğini unutmayın.
AWS Lambda İşleyici Ayrıntıları
Dışa aktarma işlevinin adı handler.jsmerhaba. Dolayısıyla, işleyici dosyanın adı ve ardından dışa aktarma adıdır.
functions:
hello:
handler: handler.hello
Aşağıda gösterildiği gibi eklenen s3 hizmetiyle ilgili kaynak ayrıntıları burada -
# you can add CloudFormation resource templates here
#resources:
# resources:
# NewResource:
# Type: AWS::S3::Bucket
# Properties:
# BucketName: my-new-bucket
# Outputs:
# NewOutput:
# Description: "Description for the output"
# Value: "Some output value"
Sunucusuz Çerçeve kullanarak AWS Lambda'yı dağıtın
Yukarıdaki lambda işlevini AWS konsoluna dağıtalım. Bu amaçla aşağıdaki Adımları kullanabilirsiniz -
Aşama 1
İlk önce, aşağıdaki komutu kullanmanız gerekecek -
sls deploy
Adım 2
Şimdi, AWS konsolunda şimdi gösterildiği gibi işlevi görmelisiniz. Sunucusuz AWS'nin ayrıntıları, AWS bulut oluşumunda kaydedilir. Bu amaçla AWS hizmetine gidin veCloudFormation. AWS Lambda'nın ayrıntıları aşağıdaki gibi görüntülenir -
Verilen adın proje adı ve ardından kullanılan aşama olduğunu gözlemleyin.
Aşama 3
AWS Lambda için iam rolünü ve AWS cloudwatch için günlük grubunu oluşturur. Depolanan kod ayrıntılarına ve yapılandırma ayrıntılarına sahip bir S3 paketi oluşturulur.
Bu komut tarafından oluşturulur sls deploy. İam rolünü belirtmenize gerek yoktur, bunun yerine, varsayılan olarakdeploy sahne.
4. adım
Ayrıntılı olay akışı, bulut oluşumu hizmetinde aşağıda gösterilmektedir.
AWS Lambda Kodu
AWS Lambda kodu ve yürütme ayarları, aşağıda verilen ekran görüntüsünde gösterilmektedir -
Lambda işlevini test ettiğinizde aşağıdaki çıktıyı bulabilirsiniz -
Yukarıdaki işlev için Günlük çıkışı burada gösterilmektedir -
AWS Lambda işlevini aşağıda gösterildiği gibi sunucusuz komutu kullanarak da test edebiliriz -
sls invoke --function hello
İnvoke komutunun sözdizimi burada gösterilmektedir -
sls invoke --function hello
Bu çağırma komutu AWS Lambda işlevini tetikler ve çıktıyı aşağıda gösterildiği gibi komut isteminde görüntüler -
Ayrıca, aşağıdaki komutu kullanarak, dağıtmadan önce Lambda işlevini ve aynı komutu test edebilirsiniz -
sls invoke local --function hello
S3 veDynanoDB gibi kaynaklar yerel ortamda simüle edilemediğinden yerel olarak test etmenin her zaman mümkün olmadığını lütfen unutmayın. Yalnızca temel işlev çağrıları yerel olarak test edilebilir.
API Ağ Geçidini ve AWS Lambda'yı Sunucusuz Çerçeve ile Kullanma
Lambda ve api gateway ile çalışmak için nasıl yeni proje oluşturacağımızı görelim. Bu amaçla aşağıdaki komutu kullanabilirsiniz -
sls create --template aws-nodejs
Şimdi aç aws-apigörsel kodda proje. Görebilirsinizhandler.js ve serverless.ymldosyalar oluşturuldu. API ağ geçidinin eklenmesi için bu değişiklikleri yapalım.
Aşağıdaki değişiklikleri yapmanız gerekecek serverless.yml -
Şimdi, AWS Lambda ile API ağ geçidi etkinleştirmesi için eklenen olay ayrıntıları -
Burada adında yeni bir şey eklendi events. Etkinliği şu şekilde belirledik:httpyolu ve yöntemi ile birlikte.
Yol, api ağ geçidi yolu oluşturulduğunda ve kullanılan yöntem GET olduğunda kullanacağımız son noktadır.
İşleyicinin handler.hellove merhaba, handler.js'deki dışa aktarma adıdır.
Sunucusuz çerçeve bunu gerçekleştireceğinden, api ağ geçidini burada dağıtmanız gerekmediğini unutmayın.
Şimdi çalıştıracağız sls deploy aşağıdaki tetikleyici ile AWS Lambda işlevi oluşturma komutu api gateway.
sls deploy
Dağıtım ayrıntılarının yukarıda listelendiğini gözlemleyin. VerirGetyol ayrıntıları olarak uç noktası olan url. Sahneprodaynı url'de kullanılır. İşlevin adıaws-api-prod-hello.
URL'yi bulalım ve çıktıyı görelim. Aşağıdaki api-gateway get url'den aldığımız cevabı görebilirsiniz -
{"message":"Go Serverless v1.0! Your function executed
successfully!","input":{"resource":"/first-api","path":"/first-api","httpMethod":
"GET","headers":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,
image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate, br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto":
"https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":
"false","CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":
"false","CloudFront-Viewer-Country":"IN","Host":"nvbhfdojfg.execute-api.us-east-1.
amazonaws.com","upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0
(Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/66.0.3359.181 Safari/537.36","Via":"2.0 707912794802dbb4825c79b7d8626a5d.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"j70MMqkWFp6kmvuauzp_nvTbI-WwKIQmm2Jl5hzSoN6gkdvX11hh-g==",
"X-Amzn-Trace-Id":"Root=1-5b13f9ef-5b012e36b7f40b5013a326fc","X-Forwarded-For":"157.33.133.217, 54.182.242.73","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},
"queryStringParameters":null,"pathParameters":null,"stageVariables":null,
"requestContext":{"resourceId":"pes5sy","resourcePath":"/first-api","httpMethod":
"GET","extendedRequestId":"H6P9fE-MoAMFdIg=","requestTime":"03/Jun/2018:14:23:
43 +0000","path":"/prod/first-api","accountId":"625297745038","protocol":"HTTP/1.1",
"stage":"prod","requestTimeEpoch":1528035823928,"requestId":"b865dbd6-6739-11e8-b135
-a30269a8ec58","identity":{"cognitoIdentityPoolId":null,"accountId":null,
"cognitoIdentityId":null,"caller":null,"SourceIp":"157.33.133.217","accessKey":null,
"cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null,
"userAgent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/66.0.3359.181 Safari/537.36","user":null},"apiId":"nvbhfdojfg"},"body":null,
"isBase64Encoded":false}}
Olay ayrıntıları, url'yi tıkladığınızda çıktıda da mevcuttur. Sorgu dizesinde hiçbir şey geçirilmediğinden httpMethod GET ve queryStringParameters null. Olay ayrıntıları verilirinput AWS Lambda işleyicisinde belirttiğimiz -
API ağ geçidinden aldığımız çıktı yalnızca body gibi detaylar message ve input. Yanıt tamamen api ağ geçidi tarafından ve bunun çıktı olarak nasıl görüntüleneceği tarafından kontrol edilir.
Şimdi, girişleri sorgu dizesindeki GET url'sine geçirelim ve ekrana bakalım -
Ardından, sorgu dizesinin çıktısını aşağıda gösterildiği gibi görebilirsiniz -
{"message":"Go Serverless v1.0! Your function executed
successfully!","input":{"resource":"/first-api","path":"/first-api","httpMethod":
"GET","headers":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,
image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate,
br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto":"https",
"CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":"false",
"CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":"false",
"CloudFront-Viewer-Country":"IN","Host":"nvbhfdojfg.execute-api.us-east-1.amazonaws.com",
"upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36","Via":"2.0
8b1d3263c2fbd0a2c270b174d7aa3d61.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"JIBZw3I-blKbnpHP8LYXPVolCgdW5KmEukZS4at9mi4vrWBMI-UKNw==",
"X-Amzn-Trace-Id":"Root=1-5b13ff90-7d6e38d4c0e4a5d4e6184f30","X-Forwarded-For":
"157.33.133.217, 54.182.242.127","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"queryString
Parameters":{"displaymessage":"Hello"},"pathParameters":null,"stageVariables":null,
"requestContext":{"resourceId":"pes5sy","resourcePath":"/first-api","httpMethod":
"GET","extendedRequestId":"H6TeiG34oAMFguA=","requestTime":"03/Jun/2018:14:47:44 +0000","path":"/prod/first-api","accountId":"625297745038","protocol":"HTTP/1.1",
"stage":"prod","requestTimeEpoch":1528037264252,"requestId":"12e5dca3-
673d-11e8-8966-69fcf43bd4db","identity":{"cognitoIdentityPoolId":null,"accountId":null,
"cognitoIdentityId":null,"caller":null,"exmpleIp":"157.33.133.217","accessKey":null,
"cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null,
"userAgent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/66.0.3359.181 Safari/537.36","user":null},"apiId":"nvbhfdojfg"},"body":
null,"isBase64Encoded":false}}
AWS Lambda işlevini yalnızca sorgu dizesi ayrıntılarını aşağıda gösterildiği gibi gösterecek şekilde değiştirelim -
'use strict';
module.exports.hello = (event, context, callback) => {
const response = {
statusCode: 200,
body: JSON.stringify({
message:(event.queryStringParameters && event.queryStringParameters.displaymessage!="") ? event.queryStringParameters.displaymessage : 'Go Serverless v1.0! Your function executed successfully!'
}),
};
callback(null, response);
// Use this code if you don't use the http event with the LAMBDA-PROXY integration
// callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};
İletiyi sorgu dizesine göre değiştirdiğimizi gözlemleyin display message. Bu, işlevi tekrar devreye alacak ve çıktıyı kontrol edecektir. Sorgu dizisi değişken ekran mesajında bulunan ayrıntıları aşağıda gösterildiği gibi görüntüler.
Şimdi ekleyelim post aşağıda gösterildiği gibi oluşturulan olayların yöntemi -
Şimdi, yapılan değişiklikleri dağıtın ve dağıtma komutundan aşağıdaki çıktıyı görebilirsiniz -
Posta URL'sini doğrudan tarayıcıda test etmenin ayrıntıları vermeyeceğini unutmayın. Posta URL'sini test etmelisinizpostman.
Postacı almak için git https://www.getpostman.com/apps. Uygulamayı işletim sisteminize göre indirin. Yüklendikten sonra, posta URL'nizi aşağıda gösterildiği gibi test edebilmelisiniz -
Bu, Lambda işlevine eklediğimiz mesajı görüntüler.
Bu bölümde, Lambda işlevini çalıştırma ve çalıştırma süreci ve bununla ilgili adımlar ayrıntılı olarak açıklanacaktır.
AWS Lambda Yürütme Modeli
AWS yürütme, AWS Lambda Function için eklenen yapılandırma ayrıntılarına bağlıdır. İşlev oluşturulduğunda, birmemory ve time allottedAWS Lambda işlevinin yürütülmesi için kullanılan.
Yapılandırma ayrıntılarının yardımıyla AWS Lambda bir yürütme bağlamı oluşturur. Yürütme bağlamı, varsa veritabanı bağlantısı, http uç noktaları, üçüncü taraf kitaplıkları vb. Gibi herhangi bir harici bağımlılıkla hazır hale getirilen geçici bir çalışma ortamıdır.
AWS Lambda işlevi ilk kez çağrıldığında veya lambda işlevi güncellendiğinde, yürütme bağlamı kurulumu nedeniyle çok az gecikme eklenir. Ancak sonraki aramalar birincisine göre daha hızlıdır. Lambda işlevi daha kısa sürede çağrılırsa AWS Lambda yürütme bağlamını yeniden kullanmayı dener.
Yürütme bağlamının yeniden kullanımı aşağıdaki sonuçlara sahiptir:
Lambda'nın yürütülmesi için yapılan herhangi bir veritabanı bağlantısı varsa, bağlantı yeniden kullanılmak üzere korunur. Bu nedenle, Lambda kodu, bağlantının varsa ve yeniden kullanılıp kullanılmadığı kontrol edilecek şekilde olmalıdır; aksi takdirde yeni bir bağlantı kurmamız gerekir.
Yürütme bağlamı, içinde 500MB'lık bir disk alanı sağlar /tmpdizin. Gerekli veriler bu dizinde önbelleğe alınır. Verilerin mevcut olup olmadığını görmek için kodda ek kontrol yaptırabilirsiniz.
Geri çağırmalar veya bazı arka plan işlemleri, Lambda işlevi çağrıldığında tamamlanmadıysa, lambda işlevi yeniden çağrıldığında yürütme başlayacaktır. Böyle bir şeye ihtiyacınız yoksa, işlevin yürütülmesi tamamlandığında tüm süreçlerinizin doğru şekilde sonlandırıldığından emin olun.
Yürütme bağlamını ve tmp dizininde depolanan verileri kullanmalısınız. Yenilerini oluşturmadan önce gerekli verilerin mevcut olup olmadığını görmek için koda gerekli kontrolleri eklemeniz gerekecektir. Bu, yürütme sırasında zamandan tasarruf edecek ve daha hızlı hale getirecektir.
AWS Lambda işlevini çağırma
AWS'yi kullanarak manuel olarak çalıştırabiliriz aws cli. AWS Lambda'nın nasıl oluşturulacağını ve dağıtılacağını zaten görmüştük.cli. Burada ilk önce kullanarak bir fonksiyon oluşturacağızaws cli ve aynısını çağırın.
AWS CLI kullanarak AWS Lambda İşlevi Oluşturma
Aşağıdaki komutları kullanarak AWS Lambda işlevi oluşturabilirsiniz. aws cli -
Commands
create-function
--function-name <value>
--runtime <value>
--role <value>
--handler <value>
[--code <value>]
[--description <value>]
[--timeout <value>]
[--memory-size <value>]
[--environment <value>]
[--kms-key-arn <value>]
[--tags <value>]
[--zip-file <value>]
[--cli-input-json <value>]
Command with values
aws lambda create-function
--function-name "lambdainvoke"
--runtime "nodejs8.10"
--role "arn:aws:iam::625297745038:role/lambdaapipolicy"
--handler "index.handler"
--timeout 5
--memory-size 256
--zip-file "fileb://C:\nodeproject\index.zip"
Çıktı aşağıda gösterildiği gibidir -
AWS konsolunda oluşturulan işlev aşağıda gösterildiği gibidir -
Şimdi, şu komutu kullanarak işlevi çağırabilirsiniz:invoke
--function-name <value>
[--invocation-type <value>]
[--log-type <value>]
[--client-context <value>]
[--payload <value>]
[--qualifier <value>]
outfile <value>
Options
--function-name − Çağırmak istediğiniz işlevin adını belirtin.
--invocation-type(string) − varsayılan olarak çağrı türü requestresponse. İnvokation-type ile kullanılabilecek değerler:RequestResponse, Event ve DryRun.
Olay çağırma türü, zaman uyumsuz yanıt için kullanılacak.
DryRun, Lambda işlevini yürütmeye gerek kalmadan doğrulamak istediğinizde kullanılacaktır.
--log-type − Olacak Tailçağrı türü RequestResponse ise. En son 4KB base64 ile kodlanmış günlük verilerini verir. Olası değerlerTail ve None.
--client-context −İstemciye özgü ayrıntıları Lambda işlevine aktarabilirsiniz. İstemci bağlamı json biçiminde ve base64 olarak kodlanmış olmalıdır. Maksimum dosya boyutu 3583 bayttır.
--payload − json formatında girdi lambda işlevi için.
--qualifier −Lambda işlevi sürümünü veya takma adı belirtebilirsiniz. İşlev sürümünü geçerseniz, api Lambda işlevini çağırmak için nitelikli işlev arn kullanacaktır. Takma ad belirtirseniz, api Lambda işlevini çağırmak için ARN takma adını kullanır.
outfile − Bu, içeriğin kaydedileceği dosya adıdır.
Command with values
aws lambda invoke --function-name "lambdainvoke" --log-type
Tail C:\nodeproject\outputfile.txt
Aşağıda gösterildiği gibi json formatında kukla olayı lambda işlevine göndermek için yük seçeneğini kullanabilirsiniz.
İlgili AWS Lambda kodu aşağıdaki gibidir -
exports.handler = async (event, callback) => {
console.log("Hello => "+ event.name);
console.log("Address =>"+ event.addr);
callback(null, 'Hello '+event.name +" and address is "+ event.addr);
};
Kodda konsolumuz olduğunu gözlemleyin event.name ve event.addr. Şimdi, olayı ad ve adresle aşağıdaki gibi göndermek için aws cli'de payload seçeneğini kullanalım -
aws lambda invoke --function-name "lambdainvoke" --log-type
Tail --payload file://C:\clioutput\input.txt C:\clioutput\outputfile.txt
Ardından, yükleme, aşağıda gösterildiği gibi json girdisine sahip bir dosya yolu olarak girişi alır -
{"name":"Roy Singh", "addr":"Mumbai"}
Karşılık gelen çıktı aşağıda gösterildiği gibidir -
Çıktı dosyada saklanır C:\clioutput\outputfile.txt aşağıdaki gibi -
"Hello Roy Singh and address is Mumbai"
Örnek Olaylar
Örnek bir olay geçirerek AWS Lambda işlevini test edebilirsiniz. Bu bölüm, AWS Hizmetleri için bazı örnek olayları verir. Kullanabilirsinizinvokehizmetlerden herhangi biriyle tetiklendiğinde çıktıyı test etmek için komut. Aşağıdaki ilgili örnek olaylar için verilen kodları inceleyin -
Amazon S3 Örnek Olay Koydu
{
"Records": [{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"SourceIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg",
"size": 1024
},
"bucket": {
"arn": bucketarn,
"name": "Sourcebucket",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "EXAMPLE"
},
"eventSource": "aws:s3"
}]
}
Almak için details of the file from the s3 put event, aşağıdaki komutu kullanabilirsiniz -
event.Records[0].s3.object.key //will display the name of the file
İçin get the bucket name, aşağıdaki komutu kullanabilirsiniz -
event.Records[0].s3.bucket.name //will give the name of the bucket.
İçin see the EventName, aşağıdaki komutu kullanabilirsiniz -
event.Records[0].eventName // will display the eventname
Amazon S3 Örnek Olayı Silme
{
"Records": [{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"SourceIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg"
},
"bucket": {
"arn": bucketarn,
"name": "Sourcebucket",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectRemoved:Delete",
"userIdentity": {
"principalId": "EXAMPLE"
},
"eventSource": "aws:s3"
}]
}
Amazon DynamoDB
Amazon DynamoDB, DynamoDB tablosunda değişiklik yapıldığında AWS Lambda'da bir olay olabilir. DynamodDB tablosundan kayıt ekleme, güncelleme ve kayıt silme gibi işlemler gerçekleştirebiliriz.
DynamoDB ekleme, ekleme ve silme olayı için örnek bir olay burada gösterilmektedir -
{
"Records": [{
"eventID": "1",
"eventVersion": "1.0",
"dynamodb": {
"Keys": {
"Id": {
"N": "101"
}
},
"NewImage": {
"Message": {
"S": "New item!"
},
"Id": {
"N": "101"
}
},
"StreamViewType": "NEW_AND_OLD_IMAGES",
"SequenceNumber": "111",
"SizeBytes": 26
},
"awsRegion": "us-west-2",
"eventName": "INSERT",
"eventSourceARN": eventSourcearn,
"eventSource": "aws:dynamodb"
},
{
"eventID": "2",
"eventVersion": "1.0",
"dynamodb": {
"OldImage": {
"Message": {
"S": "New item!"
},
"Id": {
"N": "101"
}
},
"SequenceNumber": "222",
"Keys": {
"Id": {
"N": "101"
}
},
"SizeBytes": 59,
"NewImage": {
"Message": {
"S": "This item has changed"
},
"Id": {
"N": "101"
}
},
"StreamViewType": "NEW_AND_OLD_IMAGES"
},
"awsRegion": "us-west-2",
"eventName": "MODIFY",
"eventSourceARN": Sourcearn,
"eventSource": "aws:dynamodb"
},
{
"eventID": "3",
"eventVersion": "1.0",
"dynamodb": {
"Keys": {
"Id": {
"N": "101"
}
},
"SizeBytes": 38,
"SequenceNumber": "333",
"OldImage": {
"Message": {
"S": "This item has changed"
},
"Id": {
"N": "101"
}
},
"StreamViewType": "NEW_AND_OLD_IMAGES"
}, "awsRegion": "us-west-2",
"eventName": "REMOVE",
"eventSourceARN": Sourcearn,
"eventSource": "aws:dynamodb"
}]
}
Amazon Basit Bildirim Hizmeti
AWS Lambda, içinde oluşturulan bildirimi işlemek için Simple Notification Service (SNS). SNS'de her mesaj yayınlandığında, Lambda işlevi mesajların ayrıntılarını içeren bir SNS olayı ile tetiklenebilir. Bu mesajlar Lambda işlevi içinde işlenebilir ve ihtiyaca göre diğer hizmetlere gönderilebilir.
Mesaj girildiğinde, SNS Lambda işlevini tetikleyecektir. Herhangi bir hata Lambda işlevini çağırmaya çalışırsa, SNS lambda işlevini en fazla üç kez çağırmayı yeniden deneyecektir.
Amazon SNS Örnek Etkinliği
AWS Lambda işlevinde mevcut tüm ayrıntıları içeren örnek olay, daha sonraki süreci gerçekleştirmek için aşağıda gösterilmiştir -
{
"Records": [{
"EventVersion": "1.0",
"EventSubscriptionArn": eventsubscriptionarn,
"EventSource": "aws:sns",
"Sns": {
"SignatureVersion": "1",
"Timestamp": "1970-01-01T00:00:00.000Z",
"Signature": "EXAMPLE",
"SigningCertUrl": "EXAMPLE",
"MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
"Message": "Hello from SNS!",
"MessageAttributes": {
"Test": {
"Type": "String",
"Value": "TestString"
},
"TestBinary": {
"Type": "Binary",
"Value": "TestBinary"
}
},
"Type": "Notification",
"UnsubscribeUrl": "EXAMPLE",
"TopicArn": topicarn,
"Subject": "TestInvoke"
}
}]
}
Amazon Basit Posta Hizmeti
Amazon Simple Mail Service, mesaj göndermek ve ayrıca mesaj almak için kullanılabilir. AWS Lambda işlevi, ileti alındığında Basit Posta Hizmetinde çağrılabilir.
Amazon SES E-postası Alma Örnek Olayı
AWS Lambda içinde kullanıldığında SES olayının ayrıntıları aşağıda gösterilmiştir -
{
"Records": [{
"eventVersion": "1.0",
"ses": {
"mail": {
"commonHeaders": {
"from": [
"Jane Doe <[email protected]>"
],
"to": [
"[email protected]"
],
"returnPath": "[email protected]",
"messageId": "<0123456789Source.com>",
"date": "Wed, 7 Oct 2015 12:34:56 -0700",
"subject": "Test Subject"
},
"example": "[email protected]",
"timestamp": "1970-01-01T00:00:00.000Z",
"destination": [
"[email protected]"
],
"headers": [{
"name": "Return-Path",
"value": "<[email protected]>"
},
{
"name": "Received",
"value": "from mailer.example.com (mailer.example.com [203.0.113.1]) by inbound-smtp.us-west-2.amazonaws.com with SMTP id o3vrnil0e2ic for [email protected]; Wed, 07 Oct 2015 12:34:56 +0000 (UTC)"
},
{
"name": "DKIM-Signature",
"value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=example; h=mime-version:from:date:message-id:subject:to:content-type; bh=jX3F0bCAI7sIbkHyy3mLYO28ieDQz2R0P8HwQkklFj4=; b=sQwJ+LMe9RjkesGu+vqU56asvMhrLRRYrWCbV"
},
{
"name": "MIME-Version",
"value": "1.0"
},
{
"name": "From",
"value": "Jane Doe <[email protected]>"
},
{
"name": "Date",
"value": "Wed, 7 Oct 2015 12:34:56 -0700"
},
{
"name": "Message-ID",
"value": "<0123456789example.com>"
},
{
"name": "Subject",
"value": "Test Subject"
},
{
"name": "To",
"value": "[email protected]"
},
{
"name": "Content-Type",
"value": "text/plain; charset=UTF-8"
}],
"headersTruncated": false,
"messageId": "o3vrnil0e2ic28tr"
},
"receipt": {
"recipients": [
"[email protected]"
],
"timestamp": "1970-01-01T00:00:00.000Z",
"spamVerdict": {
"status": "PASS"
},
"dkimVerdict": {
"status": "PASS"
},
"processingTimeMillis": 574,
"action": {
"type": "Lambda",
"invocationType": "Event",
"functionArn": "arn:aws:lambda:us-west-2:012345678912:function:example"
},
"spfVerdict": {
"status": "PASS"
},
"virusVerdict": {
"status": "PASS"
}
}
},
"eventexample": "aws:ses"
}]
}
Amazon Cloudwatch Günlükleri
AWS Lambda, aşağıdakiler kullanılarak Amazon CloudWatch Günlüklerinden tetiklenebilir CloudWatch Logs Subscriptions. CloudWatch Logs abonelikleri, AWS Lambda içinde işlenip analiz edilebilen veya diğer sistemlere yüklemek için kullanılabilen günlükler hakkında gerçek zamanlı verilere sahiptir.
Amazon CloudWatch Günlükleri Örnek Olay
{
"awslogs": {
"data": "H4sIAAAAAAAAAHWPwQqCQBCGX0Xm7EFtK+smZBEUgXoLCdMhFtKV3akI8d0bLYmibvPPN3wz00CJxmQnTO41whwW
QRIctmEcB6sQbFC3CjW3XW8kxpOpP+OC22d1Wml1qZkQGtoMsScxaczKN3plG8zlaHIta5KqWsozoTYw3/djzwhpL
wivWFGHGpAFe7DL68JlBUk+l7KSN7tCOEJ4M3/qOI49vMHj+zCKdlFqLaU2ZHV2a4Ct/an0/ivdX8oYc1UVX860fQ
DQiMdxRQEAAA=="
}
}
Amazon API Ağ Geçidi
AWS Lambda işlevi şu tarihte çağrılabilir: httpsurl. BT yapılabilirGET, POST, PUT. Https url çağrıldığında, AWS Lambda işlevi de tetiklenir ve get / post kullanılarak https'ye iletilen veriler, DynamoDB'ye eklemek veya posta göndermek vb. İçin kullanılmak üzere AWS Lambda'da kullanılabilir hale getirilebilir.
API Ağ Geçidi Proxy İsteği Etkinliği
{
"path": "/test/hello",
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, lzma, sdch, br",
"Accept-Language": "en-US,en;q=0.8",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-Country": "US",
"Host": "wt6mne2s9k.execute-api.us-west-2.amazonaws.com",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
"Via": "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)",
"X-Amz-Cf-Id": "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==",
"X-Forwarded-For": "192.168.100.1, 192.168.1.1",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
},
"pathParameters": {
"proxy": "hello"
},
"requestContext": {
"accountId": "123456789012",
"reexampleId": "us4z18",
"stage": "test",
"requestId": "41b45ea3-70b5-11e6-b7bd-69b5aaebc7d9",
"identity": {
"cognitoIdentityPoolId": "",
"accountId": "",
"cognitoIdentityId": "",
"caller": "",
"apiKey": "",
"exampleIp": "192.168.100.1",
"cognitoAuthenticationType": "",
"cognitoAuthenticationProvider": "",
"userArn": "",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
"user": ""
},
"reexamplePath": "/{proxy+}",
"httpMethod": "GET",
"apiId": "wt6mne2s9k"
},
"reexample": "/{proxy+}",
"httpMethod": "GET",
"queryStringParameters": {
"name": "me"
},
"stageVariables": {
"stageVarName": "stageVarValue"
}
}
API Ağ Geçidi Proxy Yanıtı Etkinliği
{
"statusCode": 200,
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, lzma, sdch, br",
"Accept-Language": "en-US,en;q=0.8",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-Country": "US",
"Host": "wt6mne2s9k.execute-api.us-west-2.amazonaws.com",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
"Via": "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)",
"X-Amz-Cf-Id": "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==",
"X-Forwarded-For": "192.168.100.1, 192.168.1.1",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
},
"body": "Hello World"
}
AWS Lambda işlevinin silinmesi, AWS Lambda'yı AWS konsolundan kaldırır. AWS Lambda işlevini silmenin 2 yolu vardır.
- AWS konsolunu kullanma.
- AWS CLI komutunu kullanma
Bu bölüm bu iki yolu ayrıntılı olarak tartışmaktadır.
AWS Konsolunu Kullanma
AWS konsolunu kullanarak bir Lambda işlevini silmek için aşağıda verilen adımları izleyin -
Aşama 1
AWS konsolunda oturum açın ve AWS Lambda hizmetine gidin. Şimdiye kadar oluşturulan AWS lambda işlevlerinin aşağıda gösterildiği gibi AWS konsolunda listelendiğini görebilirsiniz -
Liste, şimdiye kadar oluşturulmuş 23 AWS Lambda işlevinin olduğunu göstermektedir. Bunları en üstte verilen sayfalandırmayı kullanarak görüntüleyebilir veya arama kutusunu kullanarak AWS Lambda'da arama yapabilirsiniz.
Adım 2
AWS Lambda işlevlerinin her birinde bir radyo düğmesi bulunduğunu gözlemleyin. Silmek istediğiniz işlevi seçin. Aşağıda gösterilen ekran görüntüsüne bakın -
Aşama 3
AWS Lambda işlevini seçtikten sonra, ActionDaha önce gri olan açılır menü şimdi vurgulanmıştır. Şimdi, açılan kutuyu açın ve seçenekleri gösterildiği gibi gösterecektir -
4. adım
Seçin DeleteAWS Lambda işlevini silmek için düğme. TıkladığınızdaDelete, mesajı aşağıdaki gibi görüntüler -
Adım 5
Mesajı dikkatlice okuyun ve daha sonra tıklayın Delete AWS lambda işlevini kalıcı olarak kaldırmak için düğme.
Note- aws lambda'nın silinmesi bağlantılı rolü silmez. Rolü kaldırmak için IAM'ye gitmeniz ve rolü kaldırmanız gerekir.
6. Adım
Şimdiye kadar oluşturulan rollerin listesi aşağıda gösterilmektedir. BirCreate role düğmesi ve Delete role buton.
Silmek istediğiniz rolün yanındaki onay kutusunu tıklayın. Aynı anda silmek için birden fazla rol de seçebilirsiniz.
7. Adım
Sil düğmesini tıkladığınızda aşağıda gösterildiği gibi bir onay mesajı göreceksiniz -
Şimdi, belirtilen detayları dikkatlice okuyun ve daha sonra tıklayın Yes, delete buton.
AWS CLI komutunu kullanma
Önce aws cli kullanarak bir Lambda işlevi oluşturalım ve aynı komutu kullanarak aynısını silelim. Bu amaçla aşağıda verilen Adımları izleyin -
Aşama 1
Create-function için değerlere sahip komut aşağıdaki gibidir -aws lambda create-function
--function-name "lambdatestcli"
--runtime "nodejs8.10"
--role "arn:aws:iam::625297745038:role/lambdaapipolicy"
--handler "index.handler"
--timeout 5
--memory-size 256
--zip-file "fileb://C:\demotest\index.zip"
Karşılık gelen çıktı burada gösterilmektedir -
Adım 2
Oluşturulan AWS Lambda işlevi lambdatestcli. Lambda işlevini oluşturmak için mevcut rol arn'ı kullandık.
Daha sonra bu işlevi AWS konsolunda aşağıda gösterildiği gibi bulabilirsiniz -
Aşama 3
Şimdi, gösterilen komutu kullanarak çıkışı test etmek için işlevi çağıralım -aws lambda invoke --function-name "lambdatestcli" --log-type Tail
C:\demotest\outputfile.txt
Bu komut size gösterilen çıktıyı verecektir -
4. adım
Lambda işlevi için cloudwatch'tan günlükleri gözlemleyebilirsiniz lambdatestcliAdım 5
Şimdi, AWS işlevini silmenin asıl kısmına gelelim. Delete aws cli apiverilen işlevi silecektir. Bu amaçla kullanılan komutun detayları aşağıda verilmiştir -Command
delete-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Options
--function-name(string) - Bu, Lambda işlev adını veya AWS Lambda işlevinin arnını alır.
--qualifier (string)- Bu isteğe bağlıdır. Burada, silinmesi gereken AWS Lambda sürümünü belirtebilirsiniz.
-- cli-input-json(string)- Sağlanan JSON dizesine göre hizmet işlemini gerçekleştirir. JSON dizesi, sağlanan biçimi izlerby --generate-cli-skeleton. Komut satırında başka bağımsız değişkenler sağlanmışsa, CLI değerleri JSON tarafından sağlanan değerleri geçersiz kılar.
--generate-cli-skeleton(string) - API isteğini göndermeden json iskeletini standart çıktıya yazdırır.
Command with values
aws lambda delete-function --function-name "lambdatestcli"
İlgili çıktı aşağıda gösterilmiştir -
6. Adım
Şimdi kontrol ederseniz, işlevin AWS Lambda işlev listesinde aşağıda verilen ekran görüntüsünde gösterildiği gibi görünmeyeceğini gözlemleyebilirsiniz -Amazon API Gateway ile çalışma
AWS Lambda işlevi şu tarihte çağrılabilir: HTTPSurl. GET, POST, PUT üzerinde yapılabilir. HTTPS url çağrıldığında, AWS Lambda işlevi de tetiklenebilir ve veriler kullanılarak HTTPS'ye geçirilebilir.get/post DynamoDB'ye eklemek veya posta göndermek vb. için kullanılmak üzere AWS Lambda içinde kullanılabilir hale getirilebilir.
Bu bölüm, AWS lambda ve API Gateway ile çalışmaya dahil olan çeşitli süreçleri ayrıntılı olarak tartışır.
İlgili süreçler
Aşağıdakiler, AWS lambda ve API Gateway ile çalışmaya dahil olan süreçlerdir -
- İzin için IAM rolü oluşturun
- AWS lambda işlevi oluşturun
- API Ağ Geçidi Oluşturun
- Lambda işlevini api ağ geçidine bağlama
- API ağ geçidine veri iletme
API ağ geçidi ve AWS Lambda'nın çalışmasını açıklayan temel bir şema burada verilmiştir -
Bu süreçler, ilgili ekran görüntüleriyle bu bölümde ayrıntılı olarak açıklanmıştır.
İzin için IAM rolü oluşturun
Aşağıda gösterildiği gibi Amazon hizmetlerinden Lambda işlevi tarafından kullanılacak roller oluşturmak için IAM'yi seçin.
IAM'ye gidin ve seçin Roles sol taraftaki bölümden aşağıda gösterildiği gibi -
Tıklayın Create role Lambda işlevi için.
Lambda'yı seçin ve tıklayın Permissionsaltta. API Ağ Geçidi ve Lambda için gerekli izni seçin.
Aramada API ağ geçidini arayın ve size ilgili tüm izinleri listeleyecektir. Burada, aşağıda gösterildiği gibi API ağ geçidine tam erişimi seçtik -
Şimdi, API ağ geçidini arayın ve size ilgili tüm izinleri listeleyecektir. Burada, aşağıda gösterildiği gibi API ağ geçidine tam erişimi seçtik -
Aynı işlemi Politikalar için de tekrarlamanız gerekir.
Gerekli politikaları seçmeyi tamamladığınızda, tıklayın Reviewsonraki adım için. Aşağıda gösterildiği gibi seçiminize göre rolün adını girin -
Role eklenen politikaları görüntüler. TıklayınCreate role ve rol oluşturma işlemini tamamladık ve lambda işlevi ile devam edebiliriz.
AWS Lambda İşlevi Oluşturun
AWS hizmetlerine gidin ve onu api ağ geçidi ile bağlamak üzere bir işlev oluşturmak için lambda hizmetine tıklayın.
Lambda işlevi için kullanıcı arayüzü ekranı aşağıda gösterilmiştir. TıklayınCreate function Lambda işlevinin oluşturulmasına devam etmek için düğmesine basın.
Fonksiyonun adını girin ve yukarıda oluşturduğumuz mevcut rolü seçin.
İsimli fonksiyonun olduğunu belirten bir mesaj yanıp söner. lambdawithapigateway başarıyla oluşturuldu.
Burada kullanacağımızı unutmayın nodejskodu yazmak için çalışma zamanı. AWS koduhelloworld mesaj aşağıda gösterildiği gibidir -
AWS Lambda kodu şurada mevcuttur: index.jsdosya. İşleyici adı verilen işlev, yanievents, context ve callback.
Geri arama işlevi temelde hata ve başarı mesajına sahiptir. Burada hatayla ilgili herhangi bir kodumuz olmadığına dikkat edin, bu nedenle null geçirilir ve başarı mesajıHelloWorld from lambda.
Son olarak, eklenen değişiklikleri kaydedin ve Lambda işlevini API ağ geçidine eklemeye devam edelim.
API Ağ Geçidi Oluşturun
AWS hesabınıza giriş yapın ve aşağıda gösterildiği gibi API Gateway'i açın -
API Ağ Geçidi'ne tıklayın ve sizi yeni API ağ geçidinin oluşturulabileceği ekrana yönlendirecektir.
Tıklayın Create API ve aşağıda gösterildiği gibi ayrıntıları ekleyin -
Tıkla Create APIEkranın sağ tarafındaki düğmesine basın. Bu, yeni oluşturulan API'yi ekranın sol tarafında gösterecektir.
Tıkla Actions API için yeni bir kaynak oluşturmak için açılır menü.
Şimdi, aşağıda gösterildiği gibi yeni bir kaynak oluşturun -
Giriş Resource NameAşağıda gösterildiği gibi. Sonunda oluşturulan url'ye girilen kaynağın adını göreceksiniz. TıklayınCreate Resource ve ekranda aşağıdaki gibi göreceksiniz -
Ekle GET/POSTaşağıda gösterildiği gibi oluşturulan kaynağa yöntemler. Yöntemi seçinActions yıkılmak.
Tıkla GET yöntemi API'ye ekleme yöntemi.
Sonraki adım, onu Lambda işlevi ile entegre edecek entegrasyondur. Şimdi, Lambda işlevini aşağıda gösterildiği gibi ekleyin -
Lambda İşlevini API Ağ Geçidine Bağlayın
Daha önce oluşturulan lambda işlevini seçin.
Değişiklikleri kaydedin ve aşağıda gösterildiği gibi izin isteyen bir iletişim kutusu görebilirsiniz -
Tıklayın OKizin için. Bu, API ağ geçidi HTTP isteği ile Lambda işlevi arasındaki yürütme ayrıntılarıdır -
Şimdi API ağ geçidi değişikliklerini konuşlandıralım. Bu amaçla, seçmemiz gerekenDeploy API itibaren Actions aşağıda gösterildiği gibi açılır -
Seçiniz Deploy API. Dağıtım durumunu soracaktır. SeçinizNew Stage Dağıtım aşaması açılır listesinden aşama adını ekleyin Production.
Tıklayın Deploy düğmesi ve sizi aşağıda gösterildiği gibi url'ye yönlendirecektir -
Seçin GETurl'yi almak için sol taraftan yöntem. Lambda işlevinden gelen mesajı görmek için url'yi yeni bir sekmede açın.
Bu, AWS Lambda ve AWS API Gateway ile çalışmanın temel bir örneğidir. Yukarıdaki örnekte, mesajı Lambda fonksiyonunda kodladık.
Şimdi API Gateway'den mesaj detaylarını alalım. HTTPS çağrısının farklı bir etki alanından çağrılması gerekiyorsa, örneğin API'ye AJAX çağrısı, oluşturulan API ağ geçidi için CORS'u etkinleştirmemiz gerekir.
API için oluşturulan kaynağı seçin ve tıklayın Actions açılır -
Şimdi, Enable CORS aşağıdaki ekranı açacak -
CORS'U ETKİNLEŞTİRMEK için birkaç yöntem kullanabilirsiniz. Access-Control-Allow-Origin * olarak işaretlenmiştir; bu, herhangi bir etki alanından API ağ geçidinden içerik alınmasına izin vereceği anlamına gelir.
API ile çalışmak istediğiniz alan adını da belirtebilirsiniz. TıklayınEnable CORS and replace existing CORS headers düğmesi ve aşağıda gösterildiği gibi bir onay mesajı gösterecektir -
Tıklayın Yes, replace existing valuesetkinleştirmek için düğmesine basın. Enable CORS ekran aşağıda gösterildiği gibi görünüyor -
API Ağ Geçidine Veri Aktarma
API Gateway'de oluşturulan API'yi açın displayhelloworld aşağıda gösterildiği gibi -
Tıklayın Integration Request aşağıda gösterildiği gibi veri göndermek için -
Seç Body Mapping Templates ve ekle Content-Type bu örnek için application/json. Eklenen içerik türüne tıklayın, ayrıntıları aşağıdaki gibi ekleyin -
Şimdi, şablonu aşağıda gösterildiği gibi JSON biçiminde ekleyin -
API Gateway'den veri almak ve AWS Lambda ile paylaşmak için mesajı parametre olarak aldığımızı gözlemleyin. Ayrıntıları almak için sözdizimi yukarıda gösterildiği gibidir.
Şimdi, değişiklikleri API Ağ Geçidi URL'sinde kullanılabilir hale getirmek için API'yi dağıtın. Bunun için, verileri API Ağ Geçidi URL'sine göre görüntülemek için Lambda işlevini değiştirmemiz gerekiyor. Lambda işlevinin kodu aşağıda verilmiştir. Mesajı olaydan aldığımızı ve geri aramaya geçtiğimizi unutmayın.
exports.handler = (event, context, callback) => {
let message = event.message;
callback(null, message);
};
Şimdi, değişiklikleri Lambda'da kaydedin ve değişiklikleri görmek için URL'yi tıklayın. Aşağıda verilen ekran görüntüsüne bakın -
Aşağıda gösterilen URL'yi tıklayın -
https://rw2ek1xung.execute-api.us-east-
1.amazonaws.com/prod/hello?message=hello%20from%20api%20gateway
Burada iletiyi sorgu dizesi olarak GET url'sine geçirdiğimizi gözlemleyin. Ardından, çıktıyı aşağıda gösterildiği gibi gözlemleyebilirsiniz -
URL'den mesaja gönderilen detayları okur ve tarayıcıda da aynısını görüntüler.
Lambda İşlevini Amazon S3 ile Kullanma
Amazon S3 hizmeti, dosya yükleyebileceğiniz veya kaldırabileceğiniz dosya depolaması için kullanılır. S3 klasörlerinde herhangi bir dosya yüklemesi olduğunda S3'te AWS Lambda'yı tetikleyebiliriz. AWS Lambda, AWS Lambda işlevi için bir başlangıç noktası görevi gören bir işleyici işlevine sahiptir. İşleyicide olayların ayrıntıları vardır. Bu bölümde, dosyaları S3 klasörüne yüklediğimizde AWS Lambda işlevini tetiklemek için AWS S3'ün nasıl kullanılacağını görelim.
AWS Lambda İşlevini Amazon S3 ile Kullanma Adımları
AWS Lambda'yı Amazon S3 ile kullanmaya başlamak için aşağıdakilere ihtiyacımız var:
- S3 Bucket oluştur
- S3 ve lambda ile çalışma izni olan rol oluşturun
- Lambda işlevi oluşturun ve tetikleyici olarak s3'ü ekleyin.
Misal
Amazon S3 ile AWS Lambda arasındaki temel etkileşimi gösteren bir örnek yardımıyla bu adımları görelim.
Kullanıcı, Amazon S3 klasörüne bir dosya yükleyecek
Dosya yüklendikten sonra, arka planda AWS Lambda işlevini tetikleyecek ve dosyanın yüklendiğine dair bir konsol mesajı biçiminde bir çıktı görüntüleyecektir.
Dosya yüklendikten sonra kullanıcı, Cloudwatch günlüklerinde mesajı görebilir.
Örneğin akışını açıklayan blok diyagram burada gösterilmektedir -
S3 Bucket oluşturma
Öncelikle aşağıda verilen adımları kullanarak AWS konsolunda bir s3 paketi oluşturarak başlayalım -
Aşama 1
Amazon hizmetlerine gidin ve tıklayın S3 aşağıda verilen resimde vurgulandığı gibi depolama bölümünde -
Adım 2
S3 depolama alanına tıklayın ve Create bucket yüklenen dosyaları saklayacaktır.
Aşama 3
Tıkladığınızda Create bucket düğmesi, aşağıdaki gibi bir ekran görebilirsiniz -
4. adım
Ayrıntıları girin Bucket name, Select the Region ve tıklayın Createsol alt taraftaki düğmesi. Bu nedenle, şu adla bir paket oluşturduk:workingwithlambdaands3.
Adım 5
Şimdi, paket adını tıklayın ve sizden aşağıda gösterildiği gibi dosyaları yüklemenizi isteyecektir -
Böylece S3'te kova oluşturmayı bitirdik.
S3 ve Lambda ile Çalışan Rol Oluşturun
S3 ve Lambda ile çalışan bir rol oluşturmak için lütfen aşağıda verilen Adımları izleyin -
Aşama 1
AWS hizmetlerine gidin ve aşağıda gösterildiği gibi IAM'yi seçin -
Adım 2
Şimdi tıklayın IAM -> Roles aşağıda gösterildiği gibi -
Aşama 3
Şimdi tıklayın Create roleve bu rolü kullanacak hizmetleri seçin. Lambda'yı seçin ve tıklayınPermission buton.
4. adım
Aşağıdan izni ekleyin ve tıklayın Review.
Adım 5
Aşağıdaki izinleri seçtiğimize dikkat edin -
Seçtiğimiz Politikaların AmazonS3FullAccess, AWSLambdaFullAccess ve CloudWatchFullAccess.
6. Adım
Şimdi, Rol adını, Rol açıklamasını girin ve tıklayın Create Role alttaki düğme.
Böylece rolümüz lambdawiths3service yaratıldı.
Lambda işlevi oluşturun ve S3 Tetikleyici Ekleyin
Bu bölümde, bir Lambda işlevinin nasıl oluşturulacağını ve ona bir S3 tetikleyicisinin nasıl ekleneceğini görelim. Bu amaçla, aşağıda verilen Adımları izlemeniz gerekecektir -
Aşama 1
AWS Services'e gidin ve aşağıda gösterildiği gibi Lambda'yı seçin -
Adım 2
Tıklayın Lambda ve ekleme sürecini takip edin Name. SeçRuntime, Rolevb. ve işlevi oluşturun. Oluşturduğumuz Lambda işlevi aşağıdaki ekran görüntüsünde gösterilmektedir -
Aşama 3
Şimdi S3 tetikleyicisini ekleyelim.
4. adım
Yukarıdan tetikleyiciyi seçin ve aşağıda gösterildiği gibi ayrıntıları ekleyin -
Adım 5
Paket açılır listesinden oluşturulan paketi seçin. Olay türü aşağıdaki ayrıntılara sahiptir -
Seçiniz Object Created (All)dosya yüklendiğinde, kaldırıldığında vb. AWS Lambda tetikleyicisine ihtiyacımız olduğundan
6. Adım
Eklenen dosyaları filtrelemek için kullanılan Önek ve Dosya kalıbı ekleyebilirsiniz. Örneğin, lambda'yı yalnızca .jpg görüntüleri için tetiklemek için. Yüklenen tüm dosyalar için Lambda'yı tetiklememiz gerektiğinden şimdilik boş bırakalım. TıklayınAdd tetiği eklemek için düğmesine basın.
7. Adım
Lambda işlevi için tetikleyici ekranını aşağıda gösterildiği gibi bulabilirsiniz -
Aws lambda işlevi için ayrıntıları ekleyelim. Burada, kodumuzu eklemek ve nodejs'yi çalışma zamanı ortamı olarak kullanmak için çevrimiçi düzenleyiciyi kullanacağız.
8. Adım
S3'ü AWS Lambda ile tetiklemek için aşağıda gösterildiği gibi kodda S3 olayını kullanmamız gerekecek -
exports.handler = function(event, context, callback) {
console.log("Incoming Event: ", event);
const bucket = event.Records[0].s3.bucket.name;
const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, message);
};
Olay parametresinin S3event'in ayrıntılarını içerdiğini unutmayın. S3bucket'a görüntü yüklediğinizde günlüğe kaydedilecek olan paket adını ve dosya adını teselli ettik.
9. Adım
Şimdi değişiklikleri kaydedelim ve lambda fonksiyonunu S3upload ile test edelim. Aşağıdakiler, AWS Lambda'ya eklenen kod ayrıntılarıdır -
10. adım
Şimdi rolü, belleği ve zaman aşımını ekleyelim.
11. adım
Şimdi, Lambda işlevini kaydedin. Amazon hizmetlerinden S3'ü açın ve daha önce oluşturduğumuz paketi açın, yaniworkingwithlambdaands3.
İçindeki resmi aşağıda gösterildiği gibi yükleyin -
Adım 1/2
Tıklayın Upload dosyaları gösterildiği gibi eklemek için düğme -
Adım 13
Tıklayın Add filesdosya eklemek için. Ayrıca dosyaları sürükleyip bırakabilirsiniz. Şimdi tıklayınUpload buton.
Böylece, S3 klasörümüze bir resim yükledik.
14. adım
Tetikleyici ayrıntılarını görmek için AWS hizmetine gidin ve CloudWatch. Lambda işlevi için günlükleri açın ve aşağıdaki kodu kullanın -
exports.handler = function(event, context, callback) {
console.log("Incoming Event: ", event);
const bucket = event.Records[0].s3.bucket.name;
const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, message);
};
Cloudwatch'da gözlemleyebileceğiniz çıktı gösterildiği gibidir -
AWS Lambda işlevi, dosya S3 klasörüne yüklendiğinde ve ayrıntılar aşağıda gösterildiği gibi Cloudwatch'a kaydedildiğinde tetiklenir -
Lambda İşlevini Amazon DynamoDB ile Kullanma
DynamoDB, veri tablolara eklendiğinde, güncellendiğinde veya silindiğinde AWS Lambda'yı tetikleyebilir. Bu bölümde, DynamoDB tablosuna ve verileri okuyacak ve eklenen verilerle posta gönderecek AWS Lambda'ya öğeler ekleyecek basit bir örnek üzerinde çalışacağız.
Gereksinimler
Amazon DB ve AWS Lambda'yı kullanmak için aşağıda gösterilen adımları izlememiz gerekir -
DynamoDB'de birincil anahtarla bir tablo oluşturun
DynamoDBand AWS Lambda ile çalışma iznine sahip olacak bir rol oluşturun.
AWS Lambda'da işlev oluşturun
Posta göndermek için AWS Lambda Tetikleyici
DynamoDB'ye veri ekleyin
Bu adımların her birini ayrıntılı olarak tartışalım.
Misal
DynamoDB ile AWS Lambda arasındaki temel etkileşimi gösteren aşağıdaki örnek üzerinde çalışacağız. Bu örnek, aşağıdaki işlemleri anlamanıza yardımcı olacaktır -
Dynamodb tablosunda customer adında bir tablo oluşturmak ve bu tabloya veri nasıl girilir.
Veriler girildikten sonra AWS Lambda işlevini tetikleme ve Amazon SES hizmetini kullanarak posta gönderme.
Örneğin akışını açıklayan temel blok diyagram aşağıda gösterildiği gibidir -
DynamoDB'de Birincil Anahtarla Tablo Oluşturun
AWS konsolunda oturum açın. AWS Services'e gidin ve aşağıda gösterildiği gibi DynamoDB'yi seçin. DynamoDB'yi seçin.
DynamoDB, seçenekleri aşağıda gösterildiği gibi gösterir -
Şimdi tıklayın Create tableTabloyu gösterildiği gibi oluşturmak için. Tabloyu şöyle adlandırdıkcustomer bu tablo için birincil anahtarla cust_id. TıklamakCreate tabloyu dynamodb'ye eklemek için düğmeye basın.
Oluşturulan tablo aşağıda gösterildiği gibidir -
Oluşturulan tabloya aşağıdaki gibi öğeler ekleyebiliriz -
Tıklayın Items ve tıklayın Create item düğmesi gösterildiği gibi -
DynamoDB ve AWS Lambda ile Çalışma İzinlerine Sahip Rol Oluşturma
Rol oluşturmak için AWS hizmetlerine gidin ve IAM'ye tıklayın.
Yalnızca daha önce oluşturulan DynamoDB tablosu için kullanılacak bir politika oluşturalım -
Şimdi bir seçin Service. Seçtiğimiz hizmetinDynamoDB. İçinActions hepsini aldık Dynamodbeylemler, yani listeye erişim, okuma ve yazma. İçinresources, tablo kaynak türü eylemlerini seçeceğiz. Tıkladığınızda aşağıdaki gibi bir ekran görebilirsiniz -
Şimdi seçin table ve Add ARNgösterildiği gibi. AlacağızARN detaylar customer table aşağıda gösterildiği gibi oluşturulmuştur -
Giriş arn ayrıntılar burada -
Tıklayın AddDeğişiklikleri kaydetmek için düğmesine basın. BittiğindeClick on Review policy. Politikanın adını, açıklamayı vb. Aşağıda gösterildiği gibi girin -
Tıklamak create policykaydetmek için. Politikayı oluşturulacak role ekleyin. SeçinizRole sol taraftan ayrıntıları girin.
Eklenen politikaların newpolicyfordynamdb, awslambdafullaccess, cloudwatchfullaccess ve amazonsesfullaccess. Rolü ekleyin ve AWS Lambda işlevi oluştururken onu kullanacaktır.
AWS Lambda'da İşlev Oluşturun
Böylece, adında bir Lambda işlevi oluşturduk newlambdafordynamodb gosterildigi gibi.
Şimdi, oluşturulan AWS Lambda'ya DynamodDB tetikleyicisi ekleyelim. Kullanacağımız çalışma zamanı Node.js'dir.
AWS Lambda için yapılandırılacak Dynamodb tetikleyicisinde aşağıdaki ayrıntıları bulabilirsiniz -
Şimdi, basitçe tıklayın Add tetikleyiciyi AWS Lambda'ya eklemek için.
Posta Göndermek için AWS Lambda Tetikleyicisi
AWS Lambda, veriler AWS Lambda'ya eklendiğinde tetiklenir. Etkinlik parametresine dynamodb verileri eklenecektir. Bu, etkinlikteki verileri okuyacak ve e-posta gönderecektir.
Bir e-posta göndermek
E-posta göndermek için aşağıda verilen adımları izlemeniz gerekir -
Aşama 1
AWS hizmetine gidin ve SES'i (basit e-posta hizmeti) seçin. Bir e-posta göndermemiz gereken e-postayı gösterildiği gibi doğrulayın -
Adım 2
Düğmeye bas Verify a New Email Address e-posta adresini eklemek için.
Aşama 3
Doğrulamak için bir e-posta adresi girin. E-posta adresi, Amazon'dan tıklanması gereken aktivasyon postası alacak. Etkinleştirme tamamlandığında e-posta kimliği doğrulanır ve AWS hizmetleriyle kullanılabilir.
4. adım
Etkinlikten verileri okuyan ve e-posta gönderen AWS Lambda kodu aşağıda verilmiştir -
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log(event);
let tabledetails = JSON.parse(JSON.stringify(event.Records[0].dynamodb));
console.log(tabledetails.NewImage.address.S);
let customerid = tabledetails.NewImage.cust_id.S;
let name = tabledetails.NewImage.name.S;
let address = tabledetails.NewImage.address.S;
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "The data added is as follows:\n CustomerId:"+customerid+"\n Name:"+name+"\nAddress:"+address
}
},
Subject: {
Data: "Data Inserted in Dynamodb table customer"
}
},
Source: "[email protected]"
};
console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
}
Şimdi, Lambda işlevini ve verilerini DynamoDB tablosuna kaydedin.
DynamoDB'ye Veri Ekleme
DynamoDB'ye veri eklemek için aşağıdaki sırayı kullanın.
Aşama 1
Masaya git customer Dynamodb'da oluşturuldu.
Adım 2
Tıklayın Create item.
Aşama 3
Tıklayın Save düğmesini tıklayın ve postanın AWS Lambda tarafından gönderilip gönderilmediğini görmek için AWS Lambda'da sağlanan e-posta kimliğini kontrol edin.
Lambda İşlevini Zamanlanmış Olaylarla Kullanma
Zamanlanmış olayların bir kural kümesine göre düzenli aralıklarla gerçekleştiği varsayılır. Zamanlanmış olaylar, bulut saat hizmetlerinde tanımlanan bir aralıktan sonra Lambda işlevini yürütmek için kullanılır. AWS Lambda ile birlikte cron işleri üzerinde çalışmak için en iyi şekilde kullanılırlar. Bu bölüm basit bir örnekle, zamanlanmış olayları ve AWS Lambda'yı kullanarak her 5 dakikada bir nasıl posta gönderileceğini açıklayacaktır.
Gereksinimler
Lambda işlevini Zamanlanmış olaylarla kullanma gereksinimleri aşağıdaki gibidir -
- AWS SES kullanarak e-posta kimliğini doğrulayın
- AWS SES, Cloudwatch ve AWS Lambda'yı kullanmak için Rol Oluşturun
- E-posta göndermek için Lambda İşlevi oluşturun
- AWS CloudWatch'tan planlanan olaylar için kural ekleyin
Misal
Ele alacağımız örnek, CloudWatch olayını AWS Lambda işlevine ekleyecektir. Cloudwatch, kendisine eklenen zaman modeline göre AWS Lambda'yı tetikleyecektir. Örneğin, aşağıdaki örnekte tetikleyici olarak 5 dakika kullandık. Bu, her 5 dakikada bir AWS Lambda'nın tetikleneceği ve AWS Lambda'nın her tetiklendiğinde posta göndereceği anlamına gelir.
Aynısı için temel blok şeması aşağıda gösterilmiştir -
AWS SES kullanarak E-posta Kimliğini doğrulayın
AWS'de oturum açın ve aşağıda gösterildiği gibi AWS SES hizmetine gidin -
Şimdi tıklayın Simple Email Servis gösterildiği gibi -
Tıklayın Email Addresses gösterildiği gibi sol tarafta -
Bir düğme görüntüler Verify a New Email Address. Tıkla.
Giriş Email Addressdoğrulamak istiyorsun. TıklayınVerify This Email Addressbuton. Bu e-posta kimliğine ilişkin olarak AWS'den şu e-posta konulu posta alacaksınız: Amazon Web Services - ABD Doğu (K.Virginia) bölgesinde E-posta Adresi Doğrulama İsteği
E-posta adresini doğrulamak için postada verilen bağlantıya tıklayın. Doğrulandıktan sonra, e-posta kimliğini aşağıdaki gibi gösterecektir -
AWS SES, Cloudwatch ve AWS Lambda'yı kullanmak için Rol Oluşturun
Ayrıca, hizmetleri kullanma izni veren bir rol de oluşturabilirsiniz. Bunun için IAM'ye gidin ve Rol'ü seçin. Gerekli politikaları ekleyin ve rolü oluşturun. Burada yaratılan rolünevents with lambda.
E-posta Göndermek için Lambda İşlevi Oluşturun
Çalışma zamanını nodejs olarak kullanarak Lambda işlevi oluşturmak için adımları izlemeniz gerekecektir.
Şimdi, gösterildiği gibi Lambda'ya tetikleyici ekleyin -
Ayrıntıları şuraya ekle: CloudWatch Events Trigger aşağıda gösterildiği gibi -
Oluşturulan kural tetikleyicisine göre etkinliğin her 5 dakikada bir tetikleneceğini unutmayın.
E-posta göndermek için Lambda kodu aşağıda verilmiştir -
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "this mail comes from aws lambda event scheduling"
}
},
Subject: {
Data: "Event scheduling from aws lambda"
}
},
Source: "[email protected]"
};
console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
Şimdi AWS SES hizmetine ihtiyacımız var. Bunu, aşağıda gösterilen kodu kullanarak ekleyebilirsiniz -
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
E-posta göndermek için nodejs, Yarattık eParams gibi ayrıntılara sahip nesne example mail, to mail id ve the body with message aşağıdaki gibi -
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "this mail comes from aws lambda event scheduling"
}
},
Subject: {
Data: "Event scheduling from aws lambda"
}
},
Source: "[email protected]"
};
E-posta göndermek için Lambda kodu aşağıdaki gibidir -
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
Şimdi, bu Lambda işlevini kaydedelim ve postalar için e-posta kimliğini kontrol edelim. Aşağıda gösterilen ekran görüntüsü, postanın her 5 dakikada bir AWS Lambda'dan gönderildiğini göstermektedir.
Lambda İşlevini Amazon SNS ile Kullanma
Amazon SNS, push bildirimi için kullanılan bir hizmettir. Bu bölümde, AWS Lambda ve Amazon SNS'nin çalışmasını aşağıdaki eylemlerin nerede gerçekleştirileceğini bir örnekle açıklayacağız:
SNS Hizmetinde Konu Oluşturun ve AWS Lambda'yı Kullanın CloudWatch'a Konu Ekleyin
Verilen telefon numarasına SNS metin mesajı gönderin.
Gereksinimler
SNS Hizmetinde Konu oluşturmak ve AWS Lambda'yı CloudWatch'a Eklemek için, aşağıda verilen adımları izlememiz gerekmez -
- SNS'de Konu Oluştur
- IAM'de izin için Rol Oluşturun
- AWS Lambda İşlevi Oluşturun
- Tetikleyiciyi etkinleştirmek için konuya yayınlayın
- CloudWatch hizmetindeki mesaj ayrıntılarını kontrol edin.
Verilen telefon numarasına SNS metin mesajı göndermek için aşağıdakileri yapmamız gerekiyor -
- Telefonunuza mesaj göndermek için AWS Lambda'ya kod ekleyin.
Misal
Bu örnekte, SNS'de bir konu oluşturacağız. Ayrıntılar yayınlanacak konuya girildiğinde AWS Lambda tetiklenir. Konu ayrıntıları CloudWatch'a kaydedilir ve AWS Lambda tarafından telefona bir mesaj gönderilir.
İşte aynı şeyi açıklayan temel bir blok diyagramı -
SNS'de Konu Oluştur
SNS'de konu oluşturmak için aşağıda verilen adımları izlemeniz gerekecek -
Aşama 1
AWS Konsolunda oturum açın ve aşağıda gösterildiği gibi Amazon'da SNS hizmetine gidin -
Adım 2
Tıklayın Simple Notification Servis ve Create topic içinde.
Aşama 3
Sonra tıklamalısın Create new topic düğmesi gösterildiği gibi -
4. adım
Giriş Topic name ve Display name ve tıklayın Create topic. Ekranda konu adını aşağıdaki gibi görmelisiniz -
IAM'de İzin için Rol Oluşturun
AWS Lambda ve SNS hizmetiyle çalışacak bir Rol oluşturmak için AWS konsolunda oturum açmamız gerekir. Ardından, Amazon hizmetlerinden IAM'yi seçin ve aşağıda gösterildiği gibi sol taraftan role tıklayın.
SNS, Lambda ve CloudWatch için politikalar eklediğimizi gözlemleyin. Rol adı ekleyin ve rol oluşturma sürecini tamamlamak için Rol oluştur düğmesini tıklayın.
AWS Lambda İşlevi Oluşturun
Bu bölümde, çalışma zamanı olarak nodejs kullanarak AWS Lambda işlevinin nasıl oluşturulacağını anlayalım.
Bu amaçla, AWS konsolunda oturum açın ve AWS hizmetlerinden AWS Lambda'yı seçin. İşlev adını, rol ayrıntılarını vb. Ekleyin ve gösterildiği gibi AWS Lambda işlevini oluşturun.
SNS Tetikleyicisi Ekle
SNS tetikleyicisi eklemek için, gösterildiği gibi SNS yapılandırma ayrıntılarını girin -
Ardından, seçin SNS topic ve Add gösterildiği gibi AWS Lambda işlevinin tetikleyicisi -
Ardından, aşağıda verilen AWS lambda kodunu ekleyin -
exports.handler = function(event, context, callback) {
console.log("AWS lambda and SNS trigger ");
console.log(event);
const sns = event.Records[0].Sns.Message;
console.log(sns)
callback(null, sns);
};
Yukarıdaki kodda, event.Records[0].Sns.Messageeklenen mesaj detaylarını verir. Bunları CloudWatch'ta görmek için konsol günlükleri ekledik. Şimdi, Lambda işlevini gerekli bellek ve zaman ayırma ile kaydedin.
Tetikleyiciyi Etkinleştirmek için Konuya Yayınla
1. Adımda SNS'de zaten konu oluşturduğumuzu hatırlayın. Şimdi bu konuda yayınlayacağız ve AWS Lambda tarafından tetiklenecek olan CloudWatch'daki ayrıntıları göreceğiz -
Konuya Yayınla
Önce Yayınlamak istediğiniz konunun adını seçin. TıklamakPublish to topic düğmesi -
Giriş Subject ve Message ayrıntılar aşağıda gösterildiği gibidir -
Ayrıca seçebilirsiniz JSON gönderilecek mesaj biçimi JSONtarzı. TıklayınPublish the message Ekranın sonundaki düğmesine basın.
CloudWatch Hizmetinde Mesaj Ayrıntılarını Kontrol Edin
AWS konsolunda oturum açın ve CloudWatch hizmetini açın. Sol taraftaki günlüklere tıklayın ve oluşturulan AWS Lambda işlevi için günlükleri seçin. Yukarıda gösterildiği gibi oluşturulan mesajların bulunduğu günlükler için aşağıdaki ekranı bulabilirsiniz -
Telefonunuza Mesaj Göndermek için AWS Lambda'ya Kod Ekleyin
Burada, AWS Lambda'yı kullanarak telefonda mesaj göndermek için SNS Metin mesajlaşma kullanılacaktır. AWS Lambda kodunu aşağıdaki gibi güncellemek için aşağıdaki kodu kullanabilirsiniz:
const aws = require("aws-sdk");
const sns = new aws.SNS({
region:'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log("AWS lambda and SNS trigger ");
console.log(event);
const snsmessage = event.Records[0].Sns.Message;
console.log(snsmessage);
sns.publish({
Message: snsmessage,
PhoneNumber: '+911212121212'
}, function (err, data) {
if (err) {
console.log(err);
callback(err, null);
} else {
console.log(data);
callback(null, data);
}
});
};
Mesaj göndermek için kullanmak üzere AWS SDK ve SNS hizmetini ekledik. SNS'den gelen olaydan gelen mesaj, verilen telefon numarasına kısa mesaj olarak gönderilir.
Örneğin aşağıdaki kodu inceleyin -
sns.publish({
Message: snsmessage,
PhoneNumber: '+911212121212'
}, function (err, data) {
if (err) {
console.log(err);
callback(err, null);
} else {
console.log(data);
callback(null, data);
}
});
Cloudwatch'daki mesajı ve yukarıda verilen telefon numarasını görmek için konuyu şimdi girin.
Tıklayın Publish messagemesajı yayınlamak için. Aşağıdaki şekilde verilen telefon numarasında bir mesaj görüyorsunuz -
CloudTrail ile Lambda İşlevini Kullanma
AWS CloudTrailAmazon ile birlikte sunulan ve AWS konsolunda yapılan tüm etkinlikleri günlüğe kaydetmeye yardımcı olan bir hizmettir. Tüm API çağrılarını günlüğe kaydeder ve daha sonra hata ayıklama amacıyla kullanılabilecek geçmişi depolar. CloudTrail'den Lambda'yı tetikleyemeyeceğimizi unutmayın. Bunun yerine CloudTrail, tüm geçmişi S3 klasöründe günlükler şeklinde saklar ve biz de S3'ten AWS Lambda'yı tetikleyebiliriz. Herhangi bir günlük işlendikten sonra, S3 klasörüne herhangi bir günlük eklendiğinde AWS Lambda tetiklenir.
Gereksinimler
AWS CloudTrail, S3 ve AWS Lambda ile çalışmaya başlamadan önce aşağıdakileri yapmanız gerekir:
- CloudTrail günlüklerini depolamak için S3 paketi oluşturun
- SNS hizmeti oluştur
- CloudTrail'de bir iz oluşturun ve S3 klasörünü ve SNS hizmetini atayın
- İzin ile IAM rolü oluşturun.
- Aws lambda işlevi oluştur
- AWS Lambda yapılandırması
Misal
AWS CloudTrail, S3 ve AWS Lambda'nın çalışmasını gösteren bir örneği ele alalım. Burada, S3'te AWS konsolunda yapılan herhangi bir etkileşim için tüm günlükleri depolayacak bir klasör oluşturacağız. SNS konusu oluşturalım ve yayınlayalım. Bu işlem için günlükler S3'e bir dosya olarak girilecektir. AWS lambda tetiklenecek ve Amazon SES hizmeti kullanılarak posta gönderilecektir.
Bu işlemi açıklamak için blok diyagram aşağıda gösterildiği gibidir -
CloudTrail günlüklerini depolamak için S3 Bucket oluşturun
AWS konsoluna gidin ve S3 hizmetine tıklayın. TıklayınCreate bucket ve gösterildiği gibi cloudtrail günlüklerini saklamak istediğiniz paketin adını girin -
Burada bir S3 kovası oluşturduğumuzu gözlemleyin cloudtraillogsaws günlükleri saklamak için.
SNS Hizmeti Oluşturun
AWS konsoluna gidin ve tıklayın Simple notification Service. Sol taraftan konuları seçin ve Yeni konu oluştur butonuna tıklayın.
Adlı bir konu oluşturduk displaytrailbir konu yayınlamak için. Ayrıntıları, yukarıda oluşturulan S3bucket'ta saklanacaktır.
Cloudtrail'de bir İz oluşturun ve S3 klasörünü ve SNS hizmetini atayın
AWS konsoluna gidin ve tıklayın CloudTrail Gösterildiği gibi Yönetim araçlarından servis -
Tıklayın Trails sol taraftan aşağıda gösterildiği gibi -
Tıklayın Create Trailbuton. GirişTrail name, Apply trail to all regions ve Seç Yes. Daha sonra günlükler tüm bölge için uygulanacaktır.
İçin Read/Write events, Seç All. EkleS3 bucket ve SNS topicayrıntılar aşağıda gösterildiği gibidir. Burada yeni bir tane oluşturabilir veya mevcut bir tane ekleyebilirsiniz.
Kullanılabilecek seçenekler olduğunu unutmayın encrypt log files, enable log file validation, send sns notification for every log file deliveryvb. Burada varsayılan değerleri kullandım. Dosya şifrelemesine izin verebilirsiniz ve şifreleme anahtarı isteyecektir. Ayrıntılar eklendikten sonra İz Oluştur düğmesine tıklayın.
İzinli IAM Rolü Oluşturun
AWS konsoluna gidin ve IAM'yi seçin. E-posta göndermek için S3, Lambda, CloudTrail ve SES izni olan bir rol oluşturun. Oluşturulan rol aşağıda gösterildiği gibidir -
AWS Lambda İşlevi Oluşturun
AWS hizmetine gidin ve tıklayın Lambdahizmet. İşlev adını ekleyin, çalışma zamanını şu şekilde seçinnodejsve lambda işlevi için oluşturulan rolü seçin. Oluşturulan lambda işlevi aşağıdadır.
AWS Lambda Yapılandırması
Ardından, oluşturulan AWS lambda için tetikleyici olarak S3 eklememiz gerekiyor.
Tetikleyiciyi eklemek ve aşağıdaki AWS Lambda kodunu eklemek için S3 klasör ayrıntılarını ekleyin -
const aws = require("aws-sdk");
const sns = new aws.SNS({
region:'us-east-1'
});
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log("AWS lambda and SNS trigger ");
console.log(event);
const s3message = "Bucket Name:"+event.Records[0].s3.bucket.name+"\nLog details:"+event.Records[0].s3.object.key;
console.log(s3message);
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data:s3message
}
},
Subject: {
Data: "cloudtrail logs"
}
},
Source: "[email protected]"
};
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
Olaydan S3 klasörünü ve günlük ayrıntılarını aldığımızı ve yukarıda gösterildiği gibi SES hizmetini kullanarak posta gönderdiğimizi unutmayın.
AWS konsolunda herhangi bir etkinlik gerçekleştiğinde, günlükler S3 klasörüne gönderilir ve aynı zamanda AWS lambda tetiklenir ve posta, kodda belirtilen e-posta kimliğine gönderilir.
Günlükleri AWS Lambda'daki ihtiyaçlarınıza göre işleyebileceğinizi unutmayın.
Lambda İşlevini Amazon Kinesis ile Kullanma
AWS Kinesishizmeti, web sitesi tıklamaları, günlükler, sosyal medya beslemelerinden gelen gerçek zamanlı izleme verilerini yakalamak / depolamak için kullanılır. Bu günlüklerde ek işlemler gerçekleştirmek için AWS Lambda'yı tetikleyebiliriz.
Gereksinimler
Kinesis ve AWS Lambda'yı kullanmaya başlamak için temel gereksinimler aşağıda gösterildiği gibidir -
- Gerekli izinlere sahip rol oluşturun
- Kinesis'te veri akışı oluşturun
- AWS Lambda işlevi oluşturun.
- AWS Lambda'ya kod ekleyin
- Kinesis veri akışına veri ekleyin
Misal
Kinesis'ten veri akışını işlemek için AWS Lambda'yı tetikleyeceğimiz ve alınan verilerle posta göndereceğimiz bir örnek üzerinde çalışalım.
Süreci açıklamak için basit bir blok diyagram aşağıda gösterilmiştir -
Gerekli İzinlere Sahip Rol Oluşturun
AWS konsoluna gidin ve bir rol oluşturun.
Kinesis'te Veri Akışı Oluşturun
AWS konsoluna gidin ve kinesis'te veri akışı oluşturun.
Gösterildiği gibi 4 seçenek vardır. Bu örnekte Create data stream üzerinde çalışacağız.
Tıklayın Create data stream. Adı aşağıda verilen Kinesis akış adına girin.
Veri akışı için parça sayısını girin.
Kırıkların ayrıntıları aşağıda gösterildiği gibidir -
Adı girin ve tıklayın Create Kinesis stream alttaki düğme.
Akışın aktif hale gelmesinin belirli bir zaman aldığını unutmayın.
AWS Lambda İşlevi Oluşturun
AWS konsoluna gidin ve Lambda'ya tıklayın. AWS Lambda işlevini gösterildiği gibi oluşturun -
Tıklayın Create functionEkranın sonundaki düğmesine basın. Kinesis'i AWS Lambda'ya tetikleyici olarak ekleyin.
Kinesis tetikleyicisine yapılandırma ayrıntılarını ekleyin -
Tetikleyiciyi ekleyin ve şimdi AWS Lambda'ya kod ekleyin.
AWS Lambda'ya Kod Ekleme
Bu amaçla, nodejs'yi çalışma zamanı olarak kullanacağız. AWS Lambda, kinesis veri akışıyla tetiklendiğinde posta göndereceğiz.
const aws = require("aws-sdk");
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
let payload = "";
event.Records.forEach(function(record) {
// Kinesis data is base64 encoded so decode here
payload = new Buffer(record.kinesis.data, 'base64').toString('ascii');
console.log('Decoded payload:', payload);
});
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data:payload
}
},
Subject: {
Data: "Kinesis data stream"
}
},
Source: "[email protected]"
};
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
Olay parametresi, kinesis veri akışına girilen verilere sahiptir. Yukarıdaki aws lambda kodu, veri kinesis veri akışına girildiğinde etkinleştirilecektir.
Kinesis Veri Akışına Veri Ekleme
Burada, aşağıda gösterildiği gibi veri kinesis veri akışı eklemek için AWS CLI kullanacağız. Bu amaçla aşağıdaki komutu kullanabiliriz -
aws kinesis put-record --stream-name kinesisdemo --data "hello world" --
partition-key "789675"
Ardından AWS Lambda etkinleştirilir ve posta gönderilir.
Lambda İşlevini Özel Kullanıcı Uygulamalarıyla Kullanma
AWS lambda işlevini, aşağıdaki iki şekilde kullanıcı uygulaması tarafından oluşturulan olayları kullanarak işlemek için kullanabiliriz:
- AWS Konsolunu Kullanma
- AWS CLI'yi kullanma
AWS Konsolunu Kullanma
AWS konsolundan etkinlikler ve AWS Lambda ile çalışacağız. Bu amaçla AWS konsoluna gidin ve bir lambda işlevi oluşturun.
Ardından, AWS Lambda kodunu ekleyelim -
exports.handler = (event, context, callback) => {
// TODO implement
console.log("Hello => "+ event.name);
console.log("Address =>"+ event.addr);
callback(null, 'Hello '+event.name +" and address is "+ event.addr);
};
Yukarıdaki kodda, olay kullanarak isim ve adres yazdırdığımızı unutmayın.
Etkinliğin ayrıntıları, aşağıdaki şekilde oluşturulan test etkinliği kullanılarak verilecektir -
Şimdi olayı kaydedin ve test edin.
Karşılık gelen günlük çıktısı burada gösterildiği gibidir -
AWS CLI'yi kullanma
Yukarıdaki işlevi AWS CLI kullanarak aşağıdaki gibi çalıştırabiliriz -
aws lambda invoke --function-name "lambdauserevent" --log-type Tail --
payload file://C:\clioutput\input.txt C:\clioutput\outputfile.txt
Olay ayrıntıları, yüke verilir ve çıktı, C:\clioutput\outputfile.txt. aşağıdaki gibi -
input.txt
{"name":"Roy Singh", "addr":"Mumbai"}
Lambda'yı AWS CLI kullanarak çağırdığınızda çıktının aşağıdaki gibi olduğunu görebilirsiniz -
Benzer şekilde, AWS Lambda'yı başka bir AWS hizmeti için test etmek istemeniz durumunda, bunu AWS konsolundaki ve AWS CLI'deki test olayını kullanarak yapabilirsiniz. SNS hizmeti için örnek bir olay aşağıda gösterilmektedir -
{
"Records": [{
"EventVersion": "1.0",
"EventSubscriptionArn": "arnid",
"EventSource": "aws:sns",
"Sns": {
"SignatureVersion": "1",
"Timestamp": "1970-01-01T00:00:00.000Z",
"Signature": "EXAMPLE",
"SigningCertUrl": "EXAMPLE",
"MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
"Message": "Hello from SNS!",
"MessageAttributes": {
"Test": {
"Type": "String",
"Value": "TestString"
},
"TestBinary": {
"Type": "Binary",
"Value": "TestBinary"
}
},
"Type": "Notification",
"UnsubscribeUrl": "EXAMPLE",
"TopicArn": "topicarn",
"Subject": "TestInvoke"
}
}]
}
Yukarıda gösterilen örnek etkinliği ekleyip gösterildiği gibi test edelim -
AWS Lambda'da kod, SNS mesajını aşağıda verilen örnekte gösterildiği gibi yazdıracaktır -
exports.handler = (event, context, callback) => {
// TODO implement
console.log(event.Records[0].Sns.Message);
callback(null, event.Records[0].Sns.Message);};
AWS CLI kullanarak aynısını başlatalım. Olayı bir dosyaya kaydedelim ve gösterilen komutu kullanarak bunu yük için kullanalım -
aws lambda invoke --function-name "lambdauserevent" --log-type Tail --
payload file://C:\clioutput\sns.txt C:\clioutput\snsoutput.txt
AWS Lambda @ Edge'i CloudFront ile kullanma
Lambda @ Edge, cloudfront'un sunduğu içeriği özelleştirmek için kullanılan AWS Lambda bilgi işlem hizmetine eklenen bir eklentidir.
AWS Lambda'nın AWS'den cloudfront ile çalışmasını gösteren blok diyagram aşağıda gösterilmektedir -
AWS Lambda'nın kullanılabileceği dört yol vardır:
Viewer Request − Son kullanıcı, CloudFront'a Görüntüleyici İsteği adlı istekte bulunur
Origin Request − CloudFront, isteği kaynağa iletir
Origin Response − CloudFront, yanıtı kaynağından alır
Viewer Response − CloudFront, yanıtı izleyiciye gönderir
Lambda @ Edge'i aşağıdaki amaçlar için kullanabiliriz -
Başlıkları istek ve yanıt zamanında değiştirmek için.
Başlıklara çerez ayrıntılarını ekleyin. Talep ve yanıta göre AB testi gerçekleştirin.
Başlık ayrıntılarına göre URL'yi başka bir siteye yönlendirin.
Kullanıcı aracısını başlıklardan getirebilir ve tarayıcının, işletim sisteminin vb. Ayrıntılarını öğrenebiliriz.
Gereksinimler
CloudFront ve Lambda @ Edge üzerinde çalışmaya başlamak için şunlara ihtiyacımız var -
Dosya ayrıntılarıyla S3 depolama paketi oluşturun
CloudFront ve Lambda @ Edge ile çalışma izni verecek rol oluşturun
CloudFront dağıtımı oluşturun
Lambda işlevi oluştur
Cloudfront'a lambda işlevi ayrıntılarını ekleyin
Tarayıcıda cloudfront url'sini kontrol edin
CloudFront ve Lambda @ Egde ile bir örnek üzerinde çalışacağız, burada sayfayı barındıracağız ve masaüstü ve cihazlar olarak algılandığında yanıtı değiştireceğiz.
Dosya Ayrıntılarıyla S3 Storage Bucket Oluşturun
AWS konsolunda oturum açın, S3'te bir klasör oluşturun ve . html görüntülemek istediğiniz dosya.
Tıklamak S3 ve Create bucket aşağıda gösterildiği gibi -
Şimdi tıklayın Create bucket düğmesini tıklayın ve aşağıda gösterildiği gibi paketin ayrıntılarını ekleyin -
Tıklamak Create düğmesini tıklayın ve .html'yi içine yükleyin.
Rol Oluşturun
AWS konsoluna gidin ve tıklayın IAM.
Şimdi tıklayın Roles -> Create role düğmesi gösterildiği gibi -
İçin izni seçin S3, Lambda ve Cloudfront. ARN ayrıntılarını kullanarak yalnızca gerekli işleve, depolamaya izin veren ilkeyi oluşturmak iyi bir uygulamadır.
Aşağıda tartışılan örnekte, Full Accessizin. Rol adı için politikalarrole for cloudfrontyukarıda gösterildiği gibi eklenir. Rol oluştur'a tıklayın.
Lambda @ edge ve cloudfront için gerekli tüm politika yukarıda gösterildiği gibidir. Cloudfront durumunda url bölge genelinde mevcut olacağından ve kullandığımız hizmetler arasında bir güven ilişkisine ihtiyaç duyduğundan burada yapılması gereken ek bir adım var.
Şimdi, oluşturulan rol için tıklayın Trust relationships sekme gösterildiği gibi -
Tıklamak Edit Trust Relationship aşağıda gösterildiği gibi -
Bir politika belgesi görüntüler. Diğer hizmetleri de eklememiz gerekiyorPrincipal -> ServiceKullanmayı planladığımız. Nihai güven ilişkisi politika belgesi aşağıda gösterildiği gibidir -
Tıklayın Update Trust Policy Değişiklikleri kaydetmek için düğmesine basın.
CloudFront Dağıtımı Oluşturun
Aşağıda gösterildiği gibi CloudFront hizmetine gidin -
CloudFront hizmetine tıklayın ve tıklayın Create Distribution -
Kaynak Ayarları, Davranış Ayarları ve Dağıtım ayarları
Bu ayarlara tek tek bakalım -
Origin Settings
Menşe ayarlarının çeşitli parametreleri aşağıda açıklanmıştır -
Origin Domain Name −Bu, html dosyalarını sakladığımız S3 klasörünün adıdır. Ayrıca, seçtiğimiz klasörleri oluşturarak, varsa görüntüleri S3 kovasında depolayabiliriz.
Origin Path −Burada dosyaların depolandığı klasörün adını girmeniz gerekir. Şu anda bu klasörümüz yok, bu yüzden şimdilik boş bırakacağız.
Origin ID −Kaynak alan adı seçildiğinde doldurulur. Kimliği tercihinize göre değiştirebilirsiniz.
Restrict Bucket Access − Bunda seçeneği seçeceğiz yes. Burada S3 klasörüne yönelik güvenliğe ihtiyacımız var, böylece hiç kimse S3 klasörüne erişemez. Bu seçenek için, aşağıdaki gibi doldurulmuş birkaç seçenek daha var:Origin Access Identity, Comment and Grant Read Permission on Bucket.
Origin Access Identity −Yeni bir kimlik oluşturma seçeneği kullandık. Mevcut kimliği de seçebilirsiniz. Bu, CloudFront tarafından S3 klasöründen ayrıntıları okumak için kullanılan yeni bir kimlik oluşturur.
Grand Read Permission on Bucket − Bunun için seçeneği seçin Yes.
Origin Custom Headers − Ayrıntılara şu anda ihtiyacımız olmadığından başlıkları burada boş tutacağız.
Sonra, tartışalım ve dolduralım Behaviour Settings Cloudront dağıtımı için -
Şimdi, protokolü seçin - https veya http ve önbelleğe alma seçeneğini. Varsayılan önbelleğe almanın 86400 veya 24 saat olduğunu unutmayın. Bu değeri ihtiyaca göre değiştirebilirsiniz.
Tıklayın Object Caching(özelleştirme seçeneği) önbelleği değiştirmek için. Kullanabilirsinizsmooth streamingSayfanızda herhangi bir video olması durumunda. Burada varsayılan seçeneği kullanılabilir durumda tutuyoruz. Lambda işlevi oluşturulduktan sonra ayrıntıları eklenecektir.
Dağıtım ayarlarının ayrıntıları aşağıda gösterilmiştir -
Çeşitli dağıtım ayarları parametreleri aşağıda açıklanmıştır -
Price class −Kullanıcı trafiğinin kaynağı gibi detaylara sahiptir. Burada varsayılan olanı seçtiğimize dikkat edin -Use All Edge Locations.
AWS WAF Web ACL −Bu, web uygulaması güvenlik duvarı seçimi içindir. Burada şu seçeneği vardır:None. Öncelikle AWS'de güvenlik duvarı oluşturmamız gerekiyor. Siteye güvenlik sağlar.
Alternate Domain Names − Burada varsa alan adını belirtebilirsiniz.
SSL Certificate −Bu, SSL sertifikası için seçilecek tüm ayrıntılara sahiptir. Varsayılanları koruyacağız.
Default Root Object −Burada S3'e yüklediğimiz dosya adını belirleyeceğiz. Bunun için .html'deki içeriğin varsayılan olarak görüntülenmesine ihtiyacımız var.
Geri kalanı için varsayılan ayarı koruyacağız.
Tıklayın Create Distribution dağıtımı eklemek için düğme.
Dağıtımın durumu dağıtılmış olarak göstermesinin biraz zaman alacağını unutmayın.
AWS Lambda İşlevi Oluşturun
AWS konsoluna gidin ve Lambda işlevi oluşturun.
AWS Lambda kodunda, istek başlıklarını alıp kullanıcı aracısını kontrol edeceğiz. Kullanıcı aracısı masaüstünden ise, yanıtı mesajı şu şekilde gösterecek şekilde değiştireceğiz:“DESKTOP : Welcome to AWS Lambda with Cloudfront!” ve eğer cihaz ise mesaj olacak“MOBILE DEVICES : Hello from Lambda@Edge!”
İlgili AWS Lambda kodu aşağıda gösterildiği gibidir -
let content = `
<\!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Simple Lambda@Edge Static Content Response</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h1>MOBILE DEVICES : Hello from Lambda@Edge!</h1>
</body>
</html>
`;
let content1 = `
<\!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Simple Lambda@Edge Static Content Response</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h1>DESKTOP : Welcome to AWS Lambda with Cloudfront!</h1>
</body>
</html>
`;
exports.handler = (event, context, callback) => {
let request = event.Records[0].cf.request;
let finalrequest = JSON.stringify(request);
let headers = request.headers;
let useragent = JSON.stringify(headers["user-agent"][0].value);
let str = "";
if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|mobile|CriOS/i.test(useragent)) {
str = content;
} else {
str = content1;
}
const response = {
status: '200',
statusDescription: 'OK',
body: str+useragent,
};
callback(null, response);
};
Şimdi, Lambda işlevini kaydedin. Tüm bölgelerde kullanılabilmesi için Lambda işlevini yayınlamamız gerektiğini unutmayın. Yayınlamak için aşağıdakileri yapmamız gerekiyor -
Eylemler açılır listesinden seçin Publish new version aşağıda gösterildiği gibi -
Eğer sen, tıkla Publish new version, aşağıdaki ekranı görüntüler -
Şimdi, Sürüm açıklamasını girin ve tıklayın Publish. ARN, aşağıda gösterildiği gibi oluşturulan AWS Lambda işlevinin sürümünü görüntüler -
Aşağıda gösterildiği gibi oluşturulan yeni sürüme CloudFront tetikleyicisi ekleyin -
Şimdi, CloudFront için yapılandırma ayrıntılarını ekleyin. CloudFront olayının şu seçenekleri vardır:Viewer request, Origin request, Origin response, ve Viewer response.
Ardından, daha önce oluşturulan CloudFront dağıtımını seçin. Neredenevents, seçeceğiz Viewer request. İzleyici talebine bağlı olarak, kullanıcı aracısından masaüstü / cihaza karar verilecek ve yanıt değiştirilecektir. Ardından, tetikleyici ayrıntılarını ekleyin.
Tetikleyici eklendiğinde, CloudFront'tan dağıtımın konuşlandırılmasını beklememiz gerekir.
Durum değiştiğinde Deployed, CloudFront url'sini test edebilir ve alan adını tarayıcıda kontrol edebiliriz.
Masaüstü tarayıcısındaki görüntü aşağıda gösterildiği gibidir. Burada, görüntüleyici-istek olayından kullanıcı aracısını yazdırdık.
Bu, mobil cihazdaki ekrandır.
Bu nedenle, yukarıdaki örnekte, Lambda @ Edge'i masaüstü ve mobil cihazlarda yanıtı değiştirmek için kullandık.
Cloudwatch kullanarak İzleme ve Sorun Giderme
AWS Lambda'da oluşturulan işlevler Amazon CloudWatch tarafından izlenir. Lambda işlevi tetiklendiğinde yapılan tüm istekleri günlüğe kaydetmeye yardımcı olur.
Aşağıdaki kodun AWS Lambda'ya şu işlev adıyla yüklendiğini göz önünde bulundurun: lambda and cloudwatch.
exports.handler = (event, context, callback) => {
// TODO implement
console.log("Lambda monitoring using amazon cloudwatch");
callback(null, 'Hello from Lambda');
};
İşlev test edildiğinde veya tetiklendiğinde, Cloudwatch'ta bir giriş görmelisiniz. Bu amaçla AWS hizmetlerine gidin ve CloudWatch'a tıklayın.
Sol taraftan günlükleri seçin.
Tıkladığınızda Logs, sahip Log Groupshesabınızda oluşturulan AWS Lambda işlevi. Herhangi bir AWS Lambda işlevini seçin ve ayrıntıları kontrol edin. Burada, adla Lambda işlevinden bahsediyoruz:lambdaandcloudwatch. Lambda işlevine eklenen günlükler aşağıda gösterildiği gibi burada görüntülenir -
Şimdi, Lambda işlevine S3 tetikleyicisi ekleyelim ve aşağıda gösterildiği gibi CloudWatch'taki günlük ayrıntılarını görelim -
Yüklenen dosyayı ve paket adını aşağıda verilen kodda gösterildiği gibi görüntülemek için AWS Lambda kodunu güncelleyelim -
exports.handler = (event, context, callback) => {
// TODO implement
console.log("Lambda monitoring using amazon cloudwatch");
const bucket = event.Records[0].s3.bucket.name;
const filename = event.Records[0].s3.object.key;
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, 'Hello from Lambda');
};
Şimdi, içine dosya ekle s3storetestlambdaEventbucket gösterildiği gibi -
Dosya yüklendiğinde, AWS Lambda işlevleri tetiklenir ve Lambda kodundan gelen konsol günlük mesajları, aşağıda gösterildiği gibi CloudWatch'ta görüntülenir -
Herhangi bir hata varsa, CloudWatch hata ayrıntılarını aşağıda gösterildiği gibi verir -
AWS Lambda kodunda paket adına yanlış bir şekilde değindiğimizi unutmayın -
exports.handler = (event, context, callback) => {
// TODO implement
console.log("Lambda monitoring using amazon cloudwatch");
const bucket = event.Records[0].bucket.name;
const filename = event.Records[0].s3.object.key;
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, 'Hello from Lambda');
};
Etkinlikteki paket adı referansı yanlış. Bu nedenle, aşağıda gösterildiği gibi CloudWatch'ta görüntülenen bir hatayı görmeliyiz -
CloudWatch Metrikleri
Lambda işlevinin çalıştırılmasına ilişkin ayrıntılar metriklerde görülebilir. TıklayınMetrics sol tarafta görüntülenir.
Lambda işlevi için grafik ayrıntıları lambdaandcloudwatch aşağıda gösterildiği gibidir -
Lambda işlevinin çalıştırılma süresi, çalıştırılma sayısı ve Lambda işlevinden kaynaklanan hatalar gibi ayrıntıları verir.
AWS Lambda - Ek Örnek
Şimdiye kadar, AWS Lambda'nın AWS hizmetleriyle çalıştığını gördük. Bu bilgiye dayanarak, basit bir kullanıcı kayıt formu oluşturalım ve API ağ geçidini kullanarak verileri AWS Lambda'ya gönderelim. AWS Lambda, verileri olaydan veyaAPI ağ geçidi tetikleyicisinden alacak ve bu ayrıntıları DynamoDB tablosuna ekleyecektir.
Misal
Bir örnek ele alalım ve üzerinde aşağıdaki işlevleri gerçekleştirelim -
DynamoDB Tablosu Oluşturun
Kullanıcı Kaydı için Form Oluşturun
AWS SNS hizmetini kullanarak Telefona mesaj göndermek için AWS Lambda ve API ağ geçidi oluşturun
POST form verileri için AWS Lambda ve API ağ geçidi oluşturun ve DynamoDb tablosuna ekleyin
Dynamodb tablosundan veri okumak için AWS Lambda ve API ağ geçidi oluşturun
Kullanıcı Kayıt Formunun Son Çalışması
DynamoDB Tablosu Oluşturun
Girilen veriler DynamodDB tablosunda saklanacaktır. AWS Lambda ile girilen verileri paylaşmak için API ağ geçidini kullanacağız ve daha sonra AWS Lambda, ayrıntıları DynamoDB'ye ekleyecektir.
AWS konsolunda DynamodDB tablosu oluşturmak için aşağıdaki ayrıntıları kullanabilirsiniz. Öncelikle AWS Service'e gidin ve tıklayınDynamoDB. TıklayınTable aşağıda gösterildiği gibi tablo oluşturmak için -
AWS Lambda ile kullanılacak DynamoDB'ye yönelik politika oluşturmak için ARN'yi kullanabilirsiniz.
IAM'ye gidin ve seçin Policies. TıklayınCreate policy, aşağıda gösterildiği gibi hizmeti DynamodDB olarak seçin -
Tıklayın All DynamoDByukarıda gösterildiği gibi eylemler. Kaynağı seçin ve aşağıda gösterildiği gibi tablo için ARN'yi girin -
Şimdi tıklayın Add Aşağıda gösterildiği gibi.
Eğer tıklarsan Review policy Ekranın sonundaki butonuna tıkladığınızda aşağıdaki pencereyi görebilirsiniz -
Politikanın adını girin ve tıklayın Create policysayfanın sonundaki düğmesine basın. Şimdi, Lambda ile kullanılacak rol oluşturmamız gerekiyor. DynamoDB, APIGateway ve Lambda için izinlere ihtiyacımız var.
AWS hizmetlerine gidin ve IAM'yi seçin. Sol taraftan Roller'i seçin ve gerekli rolleri ekleyin.
Rol adını girin ve tıklayın Create role. Oluşturulan rolroleforlambdaexample.
Kullanıcı Kaydı için Form Oluşturun
Dynamodb tablosundan verileri girmek ve okumak için kullanıcı kayıt formunun görüntüsü.
SNS hizmetini kullanarak Telefona OTP Mesajı Göndermek için AWS Lambda ve API Ağ Geçidi oluşturun
Kullanıcı kayıt formunu görürseniz, bir düğme vardır validate phone. Kullanıcının telefon numarasını girmesi vevalidate phone Telefon numarasını onaylamak için düğmesine basın.
Bu amaçla -
Kullanıcı bu düğmeyi tıkladığında, telefon ayrıntılarını içeren API ağ geçidi gönderi yöntemi çağrılır ve dahili olarak AWS Lambda tetiklenir.
Ardından AWS Lambda, AWS SNS hizmeti kullanılarak girilen telefon numarasınaOTP gönderir.
Kullanıcı OTP'yi alır ve buOTP numarasını girmesi gerekir.
Telefon numarası girildiğinde OTP girilecek metin kutusu görünecek ve validate phone düğmesi tıklanır.
AWS Lambda'dan alınan OTP ile kullanıcı tarafından girilen OTP'nin, kullanıcının kullanıcı kayıt formunu göndermesine izin vermek için eşleşmesi gerekir.
Telefon doğrulamasının çalışmasını açıklayan basit bir blok diyagram burada gösterilmektedir -
Oluşturulan AWS Lambda işlevi burada gösterildiği gibidir -
Karşılık gelen AWS Lambda kodu aşağıda verilmiştir -
const aws = require("aws-sdk");
const sns = new aws.SNS({
region:'us-east-1'
});
exports.handler = function(event, context, callback) {
let phoneno = event.mphone;
let otp = Math.floor(100000 + Math.random() * 900000);
let snsmessage = "Your otp is : "+otp;
sns.publish({
Message: snsmessage,
PhoneNumber: "+91"+phoneno
}, function (err, data) {
if (err) {
console.log(err);
callback(err, null);
} else {
console.log(data);
callback(null, otp);
}
});
};
OTP kodunu göndermek için SNS hizmetini kullandığımızı unutmayın. Bu kod, kullanıcı tarafından kullanıcı kayıt formuna girilen cep telefonu numarasını doğrulamak için kullanılır. Yukarıdaki telefon doğrulaması için oluşturulan API ağ geçidi aşağıdaki gibidir -
Verilen Lambda işlevi phonevalidationexample. AWS Lambda'da kullanılmak üzere cep telefonu ayrıntılarını buraya alıyoruz. Ardından AWS Lambda, OTP kodunu verilen cep telefonu numarasına gönderir.
POST Form Verileri ve DynamoDB Tablosuna Eklemek için AWS Lambda ve API Ağ Geçidi Oluşturun
Kullanıcı kayıt formu için tüm alanlar zorunludur. Forma girilen verilerin API Ağ Geçidi URL'sine gönderildiği bir AJAX çağrısı yapıldı.
Gönder düğmesinin çalışmasını açıklayan basit bir blok diyagram burada gösterilmektedir -
Form doldurulduktan sonra, gönder düğmesi AWS Lambda'yı tetikleyecek olan API ağ geçidini çağıracaktır. AWS Lambda, formun ayrıntılarını olaydan veya API Ağ Geçidinden alacak ve veriler DynamodDB tablosuna eklenecektir.
API Gateway ve AWS Lambda'nın oluşturulmasını anlayalım.
Öncelikle AWS hizmetlerine gidin ve Lambda'yı tıklayın. Oluşturulan Lambda işlevi burada gösterildiği gibidir -
Şimdi, bir API ağ geçidi oluşturmak için AWS hizmetine gidin ve API Gateway. TıklamakCreate API aşağıda gösterilen düğme.
Giriş API name ve tıklayın Create API API eklemek için düğme.
Şimdi, adında bir API oluşturulur registeruser. API'yi seçin ve tıklayınActions oluşturmak için açılır menü Resource.
Tıklayın Create Resource. Şimdi ekleyelimPOSTyöntem. Bunun için sol tarafta oluşturulan kaynaklara tıklayın veActions açılır menü seçimi create method. Bu, aşağıda gösterildiği gibi açılır menüyü gösterecektir -
POST yöntemini seçin ve yukarıda oluşturduğumuz Lambda işlevini ekleyin.
Tıklayın Saveyöntemi eklemek için düğmesine basın. Form ayrıntılarını Lambda işlevine göndermek içinlambdaexample eklememiz gerekiyor Integration Request aşağıda gösterildiği gibi -
Form detaylarını göndermek için, tıklamanız gerekecek Integration Request. Ayrıntıları aşağıda gösterecektir.
Tıklayın Body Mapping Templates gönderilecek form alanlarını eklemek için.
Ardından, Add mapping templateve içerik türünü girin. Burada ekledikapplication/jsoniçerik türü olarak. Tıklayın ve burada alanı aşağıda gösterildiği gibi json formatında girmeniz gerekir -
Şimdi tıklayın Save düğmesine basın ve API'yi aşağıda gösterildiği gibi dağıtın -
İşte .html dosyamız içinde kullanılacak POST için oluşturulan API. Oluşturulan kaynak için CORS'u etkinleştirmemiz gerektiğini lütfen unutmayın. Api ağ geçidi url'sini ajax çağrısı yapmak için kullanacaktır, böylece CORS etkinleştirilmelidir.
CORS'u etkinleştirmek istediğiniz Yöntemleri seçin. TıklamakEnable CORS and replace existing CORS headers.
Onay ekranını şu şekilde görüntüler -
Tıklayın Yes, replace existing values CORS'yi etkinleştirmek için.
POST API Ağ Geçidi için AWS Lambda kodu burada gösterildiği gibidir -
const aws = require("aws-sdk");
const docClient = new aws.DynamoDB.DocumentClient({
region:'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log(event);
console.log("Entering Data");
var data = {
TableName : "registeruser",
Item : {
first_name:event.fname,
last_name:event.lname,
emailid:event.emailid,
mobile_no : event.mphone,
otp:event.otp,
username:event.uname,
password:event.passwd,
confirm_password:event.cpasswd
}
}
docClient.put(data, function(err, value) {
if (err) {
console.log("Error");
callback(err, null);
} else {
console.log("data added successfully");
callback(null, value);
}
});
}
AWS Lambda işleyicisindeki olay parametresi, POST entegrasyon isteğinde daha önce eklenen tüm ayrıntılara sahip olacaktır. Etkinliğin ayrıntıları, kodda gösterildiği gibi DynamodDB tablosuna eklenir.
Şimdi, aşağıda gösterildiği gibi AWS-SDK'dan hizmet ayrıntılarını almamız gerekiyor -
const aws = require("aws-sdk");
const docClient = new aws.DynamoDB.DocumentClient({
region:'us-east-1'
});
var data = {
TableName : "registeruser",
Item : {
first_name:event.fname,
last_name:event.lname,
emailid:event.emailid,
mobile_no : event.mphone,
otp:event.otp,
username:event.uname,
password:event.passwd,
confirm_password:event.cpasswd
}
}
docClient.put(data, function(err, value) {
if (err) {
console.log("Error");
callback(err, null);
} else {
console.log("data added successfully");
callback(null, value);
}
});
DynamodDB Tablosundan Veri Okumak için AWS Lambda ve API Ağ Geçidi Oluşturun
Şimdi, DynamoDB tablosundan veri okumak için AWS Lambda fonksiyonu oluşturacağız. Verileri html formuna gönderecek olan AWS Lambda işlevine APIGateway'i tetikleyeceğiz.
Oluşturulan AWS Lambda işlevi aşağıda gösterildiği gibidir -
Karşılık gelen AWS Lambda kodu aşağıdaki gibidir -
const aws = require("aws-sdk");
const docClient = new aws.DynamoDB.DocumentClient({
region:'us-east-1'
});
exports.handler = function(event, context, callback) {
var readdata = {
TableName : "registeruser",
Limit : 10
}
docClient.scan(readdata, function(err, data) {
if (err) {
console.log("Error");
callback(err, null);
} else {
console.log("Data is " + data);
callback(null, data);
}
});
}
Burada veriler DynamoDB tablosundan okunur ve geri aramaya verilir. Şimdi, APIGateway oluşturacağız ve tetikleyici olarak AWS Lambda işlevini ekleyeceğiz.
Daha önce oluşturulan API'ye get yöntemi ekleyeceğiz.
Lambda işlevi eklendi lambdareaddataexample. TıklayınSave yöntemi kaydetmek ve api'yi dağıtmak için.
Kullanıcı Kayıt Formunun Son Çalışması
Formun son görüntüsü aşağıda gösterildiği gibidir -
Şimdi ayrıntıları yukarıda gösterildiği gibi girin. Gönder düğmesinin devre dışı olduğunu unutmayın. Yalnızca tüm ayrıntılar gösterildiği gibi girildiğinde etkinleştirilecektir -
Şimdi cep telefonu numarasını girin ve tıklayın validate phonebuton. Şu uyarı mesajını gösterecektir:“OTP is send to the mobile, please enter the OTP to continue”. Cep telefonu numarasına gönderilen OTP aşağıdaki gibidir -
OTP'yi ve kalan ayrıntıları girin ve formu gönderin.
DynamoDB'deki veriler registeruser gönderdikten sonra tablo burada gösterildiği gibidir -
Kod detayları aşağıda verilmiştir -
Example1.html
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" src="formdet.js"></script>
<style>
input[type=text], input[type=password],button {
width: 100%;
padding: 5px 5px;
margin: 5px 0;
box-sizing: border-box;
}
#maincontainer {
width: 80%;
margin: auto;
padding: 10px;
}
div#userregistration {
width: 60%;
float: left;
}
div#userdisplay {
margin-left: 60%;
}
</style>
</head>
<body>
<div id="maincontainer">
<div id="userregistration">
<h1>User Registration Form</h1>
<table border="0">
<tr>
<td><b>First Name<span style="color:red;">*</span> : </b></td>
<td><input type="text" value="" name="fname" id="fname" /></td>
<td id="tdfname" style="display:none;"><span style="color:red;">Enter First Name</span></td>
</tr>
<tr>
<td><b>Last Name<span style="color:red;">*</span> : </b></td>
<td><input type="text" value="" name="lname" id="lname" /></td>
<td id="tdlname" style="display:none;"><span style="color:red;">Enter Last Name</span></td>
</tr>
<tr>
<td><b>Email Id<span style="color:red;">*</span> : </b></td>
<td><input type="text" value="" name="emailid" id="emailid" /></td>
<td id="tdemailid" style="display:none;"><span style="color:red;">Enter Email</span></td>
</tr>
<tr>
<td><b>Mobile No<span style="color:red;">*</span> : </b></td>
<td><input type="text" name="mphone" id="mphone"/></td>
<td id="tdmphone" style="display:none;"><span style="color:red;">Enter Mobile Number</span></td>
</tr>
<tr>
<td></td>
<td><button id="validatephone">validate phone</button></td>
<td></td>
</tr>
<tr id="otpdiv" style="display:none;">
<td><b>Enter OTP<span style="color:red;">*</span>:</b></td>
<td><input type="text" value="" name="otp" id="otp" /></td>
<td id="tdotp" style="display:none;"><span style="color:red;">Enter OTP</span></td>
</tr>
<tr>
<td><b>Username<span style="color:red;">*</span>: </b></td>
<td><input type="text" value="" name="uname" id="uname"/></td>
<td id="tduname" style="display:none;"><span style="color:red;">Enter Username</span></td>
</tr>
<tr><td><b>Password<span style="color:red;">*</span> :</b></td>
<td><input type="password" value="" name="passwd" id="passwd"/></td>
<td id="tdpasswd" style="display:none;"><span style="color:red;">Enter Password</span></td>
</tr>
<tr><td><b>Confirm Password<span style="color:red;">*</span> :</b></td>
<td><input type="password" value="" name="cpasswd" id="cpasswd"/></td>
<td id="tdcpasswd" style="display:none;"><span style="color:red;">Enter Confirm Password</span></td>
</tr>
<tr>
<td></td>
<td><button name="submit" id="submit" style="display:;" disabled="true">Submit</button></td>
<td></td>
</tr>
</table>
</div>
<div id="userdisplay">
<h1>User Display</h1>
<table id="displaydetails" style="display:block;width:80%;padding:5px;margin:5px; border: 1px solid black;">
<tr>
<td></td>
<td>FirstName</td>
<td>LastName</td>
<td>Mobile No</td>
<td>EmailID</td>
</tr>
</table>
</div>
</div>
</body>
</html>
formdet.js
function validateform() {
var sError="";
if ($("#fname").val() === "") { $("#tdfname").css("display","");
sError++;
}
if ($("#lname").val() === "") { $("#tdlname").css("display","");
sError++;
}
if ($("#emailid").val() === "") { $("#tdemailid").css("display","");
sError++;
}
if ($("#mphone").val() === "") { $("#tdmphone").css("display","");
sError++;
}
if ($("#otp").val() === "") { $("#tdotp").css("display","");
sError++;
}
if ($("#uname").val() === "") { $("#tduname").css("display","");
sError++;
}
if ($("#passwd").val() === "") { $("#tdpasswd").css("display","");
sError++;
}
if ($("#cpasswd").val() === "") { $("#tdcpasswd").css("display","");
sError++;
}
if (sError === "") {
return true;
} else {
return false;
}
}
$("#fname").change(function() { if ($("#fname").val() !== "") {
$("#tdfname").css("display","none"); } else { $("#tdfname").css("display","");
}
});
$("#lname").change(function() { if ($("#lname").val() !== "") {
$("#tdlname").css("display","none"); } else { $("#tdlname").css("display","");
}
});
$("#emailid").change(function() { if ($("#emailid").val() !== "") {
$("#tdemailid").css("display","none"); } else { $("#tdemailid").css("display","");
}
});
$("#mphone").change(function() { if ($("#mphone").val() !== "") {
$("#tdmphone").css("display","none"); } else { $("#tdmphone").css("display","");
}
});
$("#otp").change(function() { if ($("#otp").val() !== "") {
$("#tdotp").css("display","none"); } else { $("#tdotp").css("display","");
}
});
$("#uname").change(function() { if ($("#uname").val() !== "") {
$("#tduname").css("display","none"); } else { $("#tduname").css("display","");
}
});
$("#passwd").change(function() { if ($("#passwd").val() !== "") {
$("#tdpasswd").css("display","none"); } else { $("#tdpasswd").css("display","");
}
});
$("#cpasswd").change(function() { if ($("#cpasswd").val() !== "") {
$("#tdcpasswd").css("display","none"); } else { $("#tdcpasswd").css("display","");
}
});
var posturl = "https://4rvwimysc1.execute-api.us-east-1.amazonaws.com/prod/adduser";
var phonevalidationurl = "https://wnvt01y6nc.execute-api.us-east-1.amazonaws.com/prod/validate";
var otpsend = "";
function getdata() {
var a = 0;
$.ajax({ type:'GET', url:posturl, success: function(data) { $("#displaydetails").html('');
$("#displaydetails").css("display", ""); console.log(data); $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:gray;"><td>Name</td><td>Mobile No</td><td>EmailID</td></tr>');
data.Items.forEach(function(registeruser) {
var clr = (a%2 === 0) ? "#eee": "white";
a++;
$("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:'+clr+'"><td>'+registeruser.first_name+'-'+registeruser.last_name+'</td><td>'+registeruser.mobile_no+'</td><td>'+registeruser.emailid+'</td></tr>'); }); }, error: function(err) { console.log(err); } }); } $(document).ready(function() {
$("#otp").on("change", function() { var otpentered = $("#otp").val();
if (otpsend == otpentered) {
document.getElementById("submit").disabled = false;
} else {
alert("OTP is not valid.Please enter the valid one or validate phone again to continue!");
document.getElementById("submit").disabled = true;
}
});
$("#validatephone").on("click", function() { $.ajax({
type:'POST',
url:phonevalidationurl,
data:JSON.stringify({
"mphone":$("#mphone").val() }), success: function(data) { $("#otpdiv").css("display", "");
alert("OTP is send to the mobile, please enter to continue");
console.log(data);
otpsend = data;
},
error : function(err) {
$("#otpdiv").css("display", "none"); alert("Invalid mobile no."); } }); }); $("#submit").on("click", function() {
if (validateform()) {
$.ajax({ type:'POST', url:posturl, data:JSON.stringify({ "fname": $("#fname").val(),
"lname": $("#lname").val(), "emailid":$("#emailid").val(),
"mphone":$("#mphone").val(), "otp":$("#otp").val(),
"uname":$("#uname").val(), "passwd":$("#passwd").val(),
"cpasswd":$("#cpasswd").val()
}),
success: function(data) {
alert("Data added successfully");
console.log(data);
getdata();
}
});
}
});
getdata();
});
Şimdiye kadar, oluşturulan API'ye AJAX çağrısı yaptık ve verileri yukarıda gösterildiği gibi gönderdik.
Verileri tabloya eklemek için AJAX çağrısı aşağıdaki gibidir -
var posturl = "https://4rvwimysc1.execute-api.us-east-1.amazonaws.com/prod/adduser";
$(document).ready(function() {
$("#submit").on("click", function() { if (validateform()) { $.ajax({
type:'POST',
url:posturl,
data:JSON.stringify({
"fname": $("#fname").val(), "lname": $("#lname").val(),
"emailid":$("#emailid").val(), "mphone":$("#mphone").val(),
"otp":$("#otp").val(), "uname":$("#uname").val(),
"passwd":$("#passwd").val(), "cpasswd":$("#cpasswd").val()
}),
success: function(data) {
alert("Data added successfully");
console.log(data);
getdata();
}
});
}
});
});
Verileri okumak için, kodu aşağıda verilen bir işlevin çağrıldığını unutmayın -
function getdata() {
var a = 0;
$.ajax({ type:'GET', url:posturl, success: function(data) { $("#displaydetails").html('');
$("#displaydetails").css("display", ""); console.log(data); $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:gray;"><td>Name</td><td>Mobile No</td><td>EmailID</td></tr>');
data.Items.forEach(function(registeruser) {
var clr = (a%2 === 0) ? "#eee": "white";
a++;
$("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:'+clr+'"><td>'+registeruser.first_name+'-'+registeruser.last_name+'</td><td>'+registeruser.mobile_no+'</td><td>'+registeruser.emailid+'</td></tr>');
});
},
error: function(err) {
console.log(err);
}
});
}
Cep telefonu numarası doğrulama düğmesine tıkladığınızda, aşağıdaki kod aranır ve cep telefonu numarasını gönderir -
var phonevalidationurl = "https://wnvt01y6nc.execute-api.us-east-1.amazonaws.com/prod/validate";
var otpsend = "";
$("#validatephone").on("click", function() {
$.ajax({ type:'POST', url:phonevalidationurl, data:JSON.stringify({ "mphone":$("#mphone").val()
}),
success: function(data) {
$("#otpdiv").css("display", ""); alert("OTP is send to the mobile, please enter the OTP to continue"); console.log(data); otpsend = data; }, error : function(err) { $("#otpdiv").css("display", "none");
alert("Invalid mobile no.");
}
});
});
// Validate otp
$("#otp").on("change", function() { var otpentered = $("#otp").val();
if (otpsend == otpentered) {
document.getElementById("submit").disabled = false;
} else {
alert("OTP is not valid.Please enter the valid one or validate phone again to continue!");
document.getElementById("submit").disabled = true;
}
}