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
Bir veri tablosu oluşturun
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
-
Bir DynamoDB Tablosu Oluşturun
- Amazon DynamoDB Console’a giriş yapın.
- İş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.
- Mavi “Tablo oluştur” düğmesine tıklayın.
- "Tablo adı"nın yanına HelloWorldDatabase yazın.
- “Birincil Anahtar” alanına Kimlik yazın.
- Mavi “Oluştur” düğmesine tıklayın.
- Sağ taraftaki panodan tablonun “Amazon Resource Name (ARN)”sini kopyalayın (buna daha sonra bu modülde ihtiyacınız olacak).
-
IAM Politikası Oluşturun ve Lambda İşlevine Ekleyin
- 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.
- İkinci Modül’de oluşturduğumuz işleve tıklayın (bizim örneklerimizi kullanıyorsanız ismi HelloWorldFunction olacaktır).
- İşlevimize DynamoDB hizmetini kullanabilmesi için izinler ekleyeceğiz ve bunu yapmak için de AWS Identity and Access Management (IAM) kullanacağız.
- "İzinler" sekmesine tıklayın.
- “Yürütme rolü” kutusunda role tıkayın. Yeni bir tarayıcı sekmesi açılacaktır.
- “İzin politikaları” kutusunun sağında “Satır içi politika ekle” öğesinin üzerine tıklayın.
- “JSON” sekmesine tıklayın.
- 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.
-
DynamoDB tablosuna Yazabilmesi için Lambda İşlevini Değiştirin
-
Python
-
JavaScript
-
Java
-
Python
-
- “Yapılandırma” sekmesine tıklayın
- İş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
-
- “Yapılandırma” sekmesine tıklayın
- İş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
-
- “Yapılandırma” sekmesine tıklayın
- “İş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.)
- İşleyiciyi com.example.app.SavePersonHandler::handleRequest dosyasına güncelleyin.
- Sayfanın üst tarafındaki turuncu "Kaydet" düğmesine tıklayın.
-
-
Değişiklikleri Test Edin
- Beyaz “Test” düğmesine tıklayın.
- Yeşil arka planlı bir “Yürütme sonucu: başarılı” mesajı göreceksiniz.
- Yeni bir tarayıcı sekmesinde DynamoDB Konsolu’nu açın.
- Sol taraftaki gezinti çubuğunda “Tablolar”a tıklayın.
- Bu modülde önceden oluşturduğumuz HelloWorldDatabase’e tıklayın.
- Sağ taraftaki “Nesneler” sekmesine tıklayın.
- Test olayınızla eşleşen nesneler burada gözükecektir. Bizim örneklerimizi kullanıyorsanız nesne kimliği “Ada Lovelace” olacaktır.
- 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.