Bu modülde web uygulamanıza yönelik istekleri ele alma amacıyla bir arka uç işlemi oluşturmak için AWS Lambda ve Amazon DynamoDB kullanacaksınız. İlk modülde dağıttığınız tarayıcı uygulaması, kullanıcıların kendi seçtikleri bir yere bir tek boynuzlu at gönderilmesini istemelerini sağlar. Bu istekleri yerine getirmek için tarayıcıda çalışan JavaScript'in bulutta çalışan bir hizmeti çağırması gerekir.

Serverless_Web_App_LP_assets-04

Bir kullanıcı tek boynuzlu at istediği her an, çağrılacak bir Lambda işlevi uygulayacaksınız. İşlev filodan bir tek boynuzlu at seçer, isteği bir DynamoDB tablosuna kaydeder ve ardından ön uç uygulamasına gönderilen tek boynuzlu at hakkındaki ayrıntılarla yanıt verir.

Bu işlev Amazon API Gateway kullanılarak tarayıcıdan çağrılır. Bu bağlantıyı bir sonraki modülde uygulayacaksınız. Bu modülde sadece işlevinizi tek başına test edeceksiniz.

Modülü Tamamlama Süresi: 30 Dakika

Kullanılan hizmetler: AWS Lambda, Amazon DynamoDB


Sunucusuz arka uç işleminizi oluşturmak için aşağıdaki adım adım talimatları izleyin. Bölümü genişletmek için her adımın numarasına tıklayın.

  • 1. Adım. Bir Amazon DynamoDB Tablosu Oluşturun

    Yeni bir DynamoDB tablosu oluşturmak için Amazon DynamoDB konsolunu kullanın. Rides tablonuzu çağırın ve ona Dize türünde RideId adlı bir bölüm anahtarı verin. Tablo adı ve bölüm anahtarı büyük/küçük harfe duyarlıdır. Verilen tam kimlikleri kullandığınızdan emin olun. Diğer tüm ayarlar için varsayılan ayarları kullanın.

    Tabloyu oluşturduktan sonra bir sonraki adımda kullanılacak ARN'yi not edin.


    1. AWS Management Console’da Hizmetler öğesinin ardından Veritabanları altından DynamoDB öğesini seçin.

    2. Tablo oluştur öğesini seçin.

    3. Tablo adını Rides olarak girin. Bu alan büyük-küçük harfe duyarlıdır.

    4. Bölüm anahtarı adını RideId olarak girin ve anahtar türünü Dize olarak seçin. Bu alan büyük-küçük harfe duyarlıdır.

    5. Varsayılan ayarları kullan kutusunu işaretleyin ve Oluştur öğesini seçin.

    6. Yeni tablonuzun Genel Bakış bölümünün en altına gidin veARN'yi not edin. Bunu bir sonraki bölümde kullanacaksınız.

  • 2. Adım. Lambda işleviniz için bir IAM Rolü oluşturun

    Her Lambda fonksiyonunun kendisiyle ilişkili bir IAM rolü vardır. Bu rol, işlevin diğer hangi AWS hizmetleriyle etkileşime girmesine izin verildiğini tanımlar. Bu atölyenin amaçları doğrultusunda, Lambda işlevinize Amazon CloudWatch Logs'a günlük yazmak ve DynamoDB tablonuza öge yazmak için erişim sağlayan bir IAM rolü oluşturmanız gerekir.

    Yeni bir rol oluşturmak için IAM konsolunu kullanın. Onu WildRydesLambda olarak adlandırın ve rol türü için AWS Lambda'yı seçin. Amazon CloudWatch Logs'a yazmak ve ögeleri DynamoDB tablonuza koymak için işlev izinlerinizi veren politikalar eklemeniz gerekir.

    Gerekli CloudWatch Günlükleri izinlerini vermek için AWSLambdaBasicExecutionRole adlı yönetilen politikayı bu role ekleyin. Ayrıca, rolünüz için önceki bölümde oluşturduğunuz tablo için ddb: PutItem eylemine izin veren özel bir satır içi politika oluşturun.


    1. AWS Management Console’dan Hizmetler seçeneğine tıklayın ve Güvenlik, Kimlik ve Uyumluluk bölümünde IAM öğesini seçin.

    2. Sol gezinme çubuğunda Roller öğesini ve ardından Yeni Rol Oluştur öğesini seçin.

    3. AWS hizmeti grubundan rol türü için  Lambda öğesini seçin, ardından Sonraki: İzinler seçeneğine tıklayın.

      Not: Bir rol türünün seçilmesi rolünüz için otomatik olarak AWS hizmetlerinin sizin adınıza bu rolü üstlenmesini sağlayan bir güven politikası oluşturur. Bu rolü CLI, AWS CloudFormation veya başka bir mekanizma kullanarak oluşturuyorsanız doğrudan bir güven politikası belirlersiniz.

    4. Filtre metin kutusuna AWSLambdaBasicExecutionRole yazmaya başlayın ve bu rolün yanındaki kutuyu işaretleyin.

    5. Sonraki adım öğesini seçin.

    6. Rol Adı için WildRydesLambda girin.

    7. Rol oluştur öğesini seçin.

    8. Roller sayfasındaki filtre kutusuna WildRydesLambda yazın ve az önce oluşturduğunuz rolü seçin.

    9. İzinler sekmesinde, yeni bir satır içi politika oluşturmak için sağ alt köşedeki Satır içi politika ekle bağlantısını seçin.

    10. Bir hizmet seç öğesini seçin.

    11. Hizmet bul etiketli arama kutusuna DynamoDB yazmaya başlayın ve göründüğünde DynamoDB öğesini seçin.

    12. Eylemleri seç öğesini seçin.

    13. Filtre eylemleri etiketli arama kutusuna PutItem yazmaya başlayın ve göründüğünde PutItem öğesinin yanındaki kutuyu işaretleyin.

    14. Kaynaklar bölümünü seçin. 

    15. Belirli seçeneği seçili durumdaykentablo bölümünde ARN Ekle bağlantısını seçin.

    16. Tablo için ARN'yi belirle alanında önceki bölümde oluşturduğunuz tablonun ARN'sini yapıştırın ve Ekle öğesini seçin.

    17. Politikayı İncele öğesini seçin.

    18. Politika adını DynamoDBWriteAccess olarak girin ve Politika oluştur öğesini seçin.

  • 3. Adım. İstekleri İşlemek için Lambda İşlevi Oluşturun

    AWS Lambda, HTTP isteği gibi olaylara yanıt olarak kodunuzu çalıştırır. Bu adımda bir tek boynuzlu at göndermek için web uygulamasından API isteklerini işleyecek olan temel işlevi oluşturacaksınız. Bir sonraki modülde kullanıcılarınızın tarayıcılarından çağrılabilecek bir HTTP uç noktasını açığa çıkaracak olan RESTful API oluşturmak için Amazon API Gateway'i kullanacaksınız. Daha sonra web uygulamanız için tamamen işlevsel bir arka uç oluşturmak amacıyla bu adımda oluşturduğunuz Lambda işlevini bu API'ye bağlayacaksınız.

    API isteklerini işleyecek olan RequestUnicorn adlı yeni bir Lambda işlevi oluşturmak için AWS Lambda konsolunu kullanın. İşlev kodunuz için sağlanan requestUnicorn.js örnek uygulamasını kullanın. Bu dosyayı kopyalayın ve AWS Lambda konsolunun düzenleyicisine yapıştırın.

    İşlevinizi önceki bölümde oluşturduğunuz WildRydesLambda IAM rolünü kullanacak şekilde yapılandırdığınızdan emin olun.


    1. Hizmetleröğesinin ardından İşlem bölümünde Lambda öğesini seçin.

    2. İşlev oluştur seçeneğine tıklayın.

    3. Varsayılan seçilmiş Sıfırdan Yazar kartını seçili bırakın.

    4. Ad alanına RequestUnicorn yazın.

    5. Çalışma Zamanı için Node.js 6.10 öğesini seçin.

    6. Rol açılır listesinden Var olan bir rolü seçin öğesinin seçildiğinden emin olun.

    7. Mevcut Rol açılır menüsünden WildRydesLambda öğesini seçin.

    8. İşlev oluştur seçeneğine tıklayın.

    9. İşlev kodu bölümüne gidin veindex.js kod düzenleyicisindeki mevcut koduUnicorn.js isteğinin içeriğiyle değiştirin.

    10. Sayfanın sağ üst köşesindeki "Kaydet" seçeneğini tıklayın.

  • 4. Adım. Uygulamanızı Test Edin

    Bu modül için AWS Lambda konsolunu kullanarak oluşturduğunuz işlevi test edeceksiniz. Bir sonraki modülde ilk modülde dağıttığınız tarayıcı tabanlı uygulamadan işlevinizi çağırabilmeniz için API Ağ Geçidi ile bir REST API ekleyeceksiniz.


    1. İşlevinizin ana düzenleme ekranından,Bir test olayını seçin... açılır menüsünden Test olayını yapılandır öğesini seçin.

    2. Yeni test olayı oluştur öğesini seçili tutun.

    3. Olay adı alanını TestRequestEvent olarak girin

    4. Aşağıdaki test olayını kopyalayın ve düzenleyiciye yapıştırın:

    {
        "path": "/ride",
        "httpMethod": "POST",
        "headers": {
            "Accept": "*/*",
            "Authorization": "eyJraWQiOiJLTzRVMWZs",
            "content-type": "application/json; charset=UTF-8"
        },
        "queryStringParameters": null,
        "pathParameters": null,
        "requestContext": {
            "authorizer": {
                "claims": {
                    "cognito:username": "the_username"
                }
            }
        },
        "body": "{\"PickupLocation\":{\"Latitude\":47.6174755835663,\"Longitude\":-122.28837066650185}}"
    }
    1. Oluştur seçeneğine tıklayın.

    2. Ana işlev düzenleme ekranında açılır menüde TestRequestEvent ile Test et öğelerini seçin.

    3. Sayfanın en üstüne gidin ve Yürütme sonucu bölümünün Ayrıntılar bölümünü genişletin.

    4. Yürütmenin başarılı olduğunu ve işlev sonucunun aşağıdaki gibi olduğunu doğrulayın:

    {
        "statusCode": 201,
        "body": "{\"RideId\":\"SvLnijIAtg6inAFUBRT+Fg==\",\"Unicorn\":{\"Name\":\"Rocinante\",\"Color\":\"Yellow\",\"Gender\":\"Female\"},\"Eta\":\"30 seconds\"}",
        "headers": {
            "Access-Control-Allow-Origin": "*"
        }
    }