AWS'yi Kullanmaya Başlama

Basit Bir Web Uygulaması Oluşturun

Bir web uygulaması dağıtın ve bir API ve bir veritabanı ile etkileşim ekleyin

4. Modül: Bir Veri Tablosu Oluşturun

Bu modülde bir DynamoDB tablosu oluşturacak ve Lambda işlevinizin tabloda veri depolamasını sağlayacaksınız.

Giriş

Bu modülde Amazon DynamoDB kullanarak verileri kalıcı kılan bir tablo oluşturacağız. DynamoDB bir anahtar-değer veritabanı hizmeti olduğundan dolayı verilerimiz için bir şema oluşturmamız gerekmez. Uygun ölçekte tutarlı performansa sahiptir ve kullanırken yönetilmesi gereken sunucular yoktur.

Ek olarak, hizmetlerimizin birbirleriyle etkileşime geçmeleri amacıyla gerekli izinleri onlara güvenle vermek için AWS Identity and Access Management (IAM) hizmeti’ni kullanacağız. Özellikle, İkinci Modül’de oluşturduğumuz Lambda işlevinin bir IAM politikası kullanarak yeni oluşturulan DynamoDB tablomuza yazmasına izin vereceğiz. Bunu yapmak için Lambda işlevimizden AWS SDK (Python, JavaScript veya Java) kullanacağız.

Öğrenecekleriniz

  • AWS Management Console kullanarak bir DynamoDB tablosu oluşturun
  • IAM ile bir rol oluşturun ve izinleri yönetin
  • AWS SDK (Python, JavaScript veya Java) ile bir DynamoDB tablosuna yazın

Temel Kavramlar

Veriyi Kalıcı Kılma: Program yürütmesinden bağımsız olarak gelecekte erişebilmemiz için veri depolama.

İlişkisel Olmayan Veritabanı: İlişkisel olmayan bir veritabanı tablolu bir sıra ve sütun şeması kullanmaz. Onun yerine depolanan verinin türünün belirli gereklilikleri için optimize edilmiş bir depolama modeli kullanırlar.

Anahtar-Değer Veritabanı: Verileri bir anahtarın benzersiz bir tanımlayıcı hizmeti gördüğü bir anahtar-değer çiftleri koleksiyonu olarak depolayan ilişkisel olmayan bir veritabanı türü.

Birincil Anahtar: Bir DynamoDB tablosunda her bir veri parçasını tanımlayacak değer. Bu değer ayrıca tabloyu daha ölçeklenebilir kılmak için tablonun bölümlere ayrılmasını sağlar.

Şema: Bir veritabanının nasıl oluşturulması gerektiğine dair bir şema görevi gören veri dizisidir.

AWS SDK: SDK “Yazılım Geliştirme Seti” anlamına gelmektedir. AWS SDK’ları, geliştiricilerin belirli bir platformda yazılım uygulamaları oluşturmalarını sağlayan bir araç dizisi, kütüphaneler, belgeler, kod örnekleri, işlemler ve rehberler sunar.

IAM Politikası: Bir varlık (ör. hizmet, kullanıcı, grup) olan AWS kaynaklarının neye erişimi olduğunu tanımlayan bir belge.

 Tamamlama Süresi

10 dakika

 Kullanılan Hizmetler

Uygulama

    1. Amazon DynamoDB Console’a giriş yapın.
    2. İşlevinizi hangi bölgede oluşturduğunuzu not etmeyi unutmayın. Bunu sayfanın en üstünde hesap adınızın yanında görebilirsiniz.
    3. Mavi “Tablo oluştur” düğmesine tıklayın.
    4. "Tablo adı"nın yanına HelloWorldDatabase yazın.
    5. “Birincil Anahtar” alanına Kimlik yazın.
    6. Mavi “Oluştur” düğmesine tıklayın.
    7. Sağ taraftaki panodan tablonun “Amazon Resource Name (ARN)”sini kopyalayın (buna daha sonra bu modülde ihtiyacınız olacak).
    1. Artık bir tablomuz olduğuna göre veri yazabilmek için Lambda işlevimizi düzenleyelim. Yeni bir tarayıcı sekmesinde AWS Lambda Console’a giriş yapın.
    2. İkinci Modül’de oluşturduğumuz işleve tıklayın (bizim örneklerimizi kullanıyorsanız ismi HelloWorldFunction olacaktır).
    3. İşlevimize DynamoDB hizmetini kullanabilmesi için izinler ekleyeceğiz ve bunu yapmak için de AWS Identity and Access Management (IAM) kullanacağız.
    4. "İzinler" sekmesine tıklayın.
    5. “Yürütme rolü” kutusunda role tıkayın. Yeni bir tarayıcı sekmesi açılacaktır.
    6. “İzin politikaları” kutusunun sağında “Satır içi politika ekle” öğesinin üzerine tıklayın.
    7. “JSON” sekmesine tıklayın.
    8. 15. satırdaki “Kaynak” alanındaki tablonuzun ARN’sini değiştirdiğinizden emin olarak aşağıdaki politikayı metin alanına yapıştırın:
    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:DeleteItem",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:UpdateItem"
            ],
            "Resource": "YOUR-TABLE-ARN"
        }
        ]
    }

    9. Bu politika, Lambda işlevimizin nesneleri okuması, düzenlemesi veya silmesine izin verir fakat bunu yalnızca oluşturduğumuz tabloda bunları yapabilecek şekilde kısıtlar.

    10. Mavi "Politikayı Gözden Geçir" düğmesine tıklayın.

    11. “Ad”ın yanına HelloWorldDynamoPolicy yazın.

    12. Mavi "Politika Oluştur" düğmesine tıklayın.

    13. Artık bu tarayıcı sekmesini kapatabilir ve Lambda işlevi sekmesine dönebilirsiniz.


    • Python
      1. “Yapılandırma” sekmesine tıklayın
      2. İşlev kodunuzu aşağıdaki iledeğiştirin:
      # import the json utility package since we will be working with a JSON object
      import json
      # import the AWS SDK (for Python the package name is boto3)
      import boto3
      # import two packages to help us with dates and date formatting
      from time import gmtime, strftime
      
      # create a DynamoDB object using the AWS SDK
      dynamodb = boto3.resource('dynamodb')
      # use the DynamoDB object to select our table
      table = dynamodb.Table('HelloWorldDatabase')
      # store the current time in a human readable format in a variable
      now = strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
      
      # define the handler function that the Lambda service will use as an entry point
      def lambda_handler(event, context):
      # extract values from the event object we got from the Lambda service and store in a variable
          name = event['firstName'] +' '+ event['lastName']
      # write name and time to the DynamoDB table using the object we instantiated and save response in a variable
          response = table.put_item(
              Item={
                  'ID': name,
                  'LatestGreetingTime':now
                  })
      # return a properly formatted JSON object
          return {
              'statusCode': 200,
              'body': json.dumps('Hello from Lambda, ' + name)
          }

      3. Sayfanın üst tarafındaki turuncu "Kaydet" düğmesine tıklayın.

    • JavaScript
      1. “Yapılandırma” sekmesine tıklayın
      2. İşlev kodunuzu aşağıdaki iledeğiştirin:
      // Include the AWS SDK module
      const AWS = require('aws-sdk');
      // Instantiate a DynamoDB document client with the SDK
      let dynamodb = new AWS.DynamoDB.DocumentClient();
      // Use built-in module to get current date & time
      let date = new Date();
      // Store date and time in human-readable format in a variable
      let now = date.toISOString();
      // Define handler function, the entry point to our code for the Lambda service
      // We receive the object that triggers the function as a parameter
      exports.handler = async (event) => {
          // Extract values from event and format as strings
          let name = JSON.stringify(`Hello from Lambda, ${event.firstName} ${event.lastName}`);
          // Create JSON object with parameters for DynamoDB and store in a variable
          let params = {
              TableName:'HelloWorldDatabase',
              Item: {
                  'ID': name,
                  'LatestGreetingTime': now
              }
          };
          // Using await, make sure object writes to DynamoDB table before continuing execution
          await dynamodb.put(params).promise();
          // Create a JSON object with our response and store it in a constant
          const response = {
              statusCode: 200,
              body: name
          };
          // Return the response constant
          return response;
      };

      3. Sayfanın üst tarafındaki turuncu "Kaydet" düğmesine tıklayın.

    • Java
      1. “Yapılandırma” sekmesine tıklayın
      2. “İşlev kodu” seçeneğine gidin ve aşağıdaki JAR dosyasını yükleyin. (Bu öğreticinin amaçları doğrultusunda dağıtım paketinin oluşturulmasını geçeceğiz.)
      3. İşleyiciyi com.example.app.SavePersonHandler::handleRequest dosyasına güncelleyin.
      4. Sayfanın üst tarafındaki turuncu "Kaydet" düğmesine tıklayın.
    1. Beyaz “Test” düğmesine tıklayın.
    2. Yeşil arka planlı bir “Yürütme sonucu: başarılı” mesajı göreceksiniz.
    3. Yeni bir tarayıcı sekmesinde DynamoDB Konsolu’nu açın.
    4. Sol taraftaki gezinti çubuğunda “Tablolar”a tıklayın.
    5. Bu modülde önceden oluşturduğumuz HelloWorldDatabase’e tıklayın.
    6. Sağ taraftaki “Nesneler” sekmesine tıklayın.
    7. Test olayınızla eşleşen nesneler burada gözükecektir. Bizim örneklerimizi kullanıyorsanız nesne kimliği “Ada Lovelace” olacaktır.
    8. Lambda işleviniz her yürütüldüğünde DynamoDB tablonuz güncellenecektir. Aynı ad kullanıldıysa yalnızca zaman damgası değişecektir.

Uygulama Mimarisi

Dördüncü Modül tamamlandığına göre mevcut mimarimize bir bakalım:

Bu modüle iki hizmet ekledik: DynamoDB (depolama için) ve IAM (izinleri güvenle yönetmek için). İkisi de Lambda işlevimize bağlıdır böylece veritabanımıza yazabilirler. Son adım API Gateway çağırmak için istemcimize kod eklemektir.

Bu modül sizin için yararlı oldu mu?

Web Siteye Etkileşim Ekleyin