data101

5. Amazon Web Services (AWS) ile Veri Yönetimi

*5.1. AWS’ye Giriş

*5.1.1. AWS Hizmetlerinin Genel Bakışı

Amazon Web Services (AWS), Amazon tarafından sunulan ve geniş bir bulut hizmetleri yelpazesini içeren lider bir bulut platformudur. AWS, altyapıdan yapay zeka hizmetlerine kadar çeşitli çözümler sunarak işletmelerin dijital dönüşüm süreçlerini destekler.

*Temel Hizmet Kategorileri:

*5.1.2. AWS’nin Avantajları

*5.2. AWS Veri Depolama Hizmetleri

*5.2.1. Amazon S3

Amazon Simple Storage Service (S3), nesne depolama hizmetidir ve her tür veri için ölçeklenebilir ve dayanıklı bir depolama çözümü sunar

Bir dosyayı indirmek

aws s3 cp s3://bucket_adı/dosya.txt yerel_klasör/

#### **5.2.2. Amazon RDS*
**Amazon Relational Database Service (RDS)**, tam yönetilen ilişkisel veritabanı hizmetidir
- **Desteklenen Veritabanları:**
    
    - **MySQL**
    - **PostgreSQL**
    - **Oracle**
    - **SQL Server**
    - **MariaDB**
    - **Amazon Aurora**
- **Özellikler:**
    - **Otomatik Yedekleme:** Verilerinizi otomatik olarak yedekler ve gerektiğinde geri yükleyebilirsiniz.
    - **Yüksek Erişilebilirlik:** Multi-AZ dağıtımı ile hata toleransı sağlar.
    - **Ölçeklenebilirlik:** İş yüklerine göre kaynakları ayarlayabilirsiniz.
    - **Güvenlik:** Veri şifreleme, ağ güvenliği ve erişim kontrolü.
- **Kullanım Durumları:**
    - İş uygulamaları ve web uygulamaları için veritabanı desteği.
    - Analitik ve raporlama veritabanları.
- **Örnek: Amazon RDS'de Veritabanı Oluşturma**
    - **Adım 1:** AWS Management Console'da **RDS** bölümüne gidin.
    - **Adım 2:** **Create database** butonuna tıklayın.
    - **Adım 3:** Veritabanı türünü ve sürümünü seçin.
    - **Adım 4:** Veritabanı ayarlarını ve yapılandırmalarını belirleyin.
    - **Adım 5:** **Create database**'e tıklayarak işlemi tamamlayın.
- **Örnek Komut:**

aws rds create-db-instance
–db-instance-identifier mydbinstance
–db-instance-class db.t2.micro
–engine mysql
–master-username admin
–master-user-password password
–allocated-storage 20

* Tanımlar: 
	- **`--db-instance-identifier mydbinstance`**
	    - **Açıklama:** Oluşturulacak veritabanı örneğine verilen benzersiz isimdir. Bu isim, veritabanı örneğinizi AWS hesabınız içinde tanımlamak için kullanılır.
	    - **Örnek:** `mydbinstance`
	- **`--db-instance-class db.t2.micro`**
	    - **Açıklama:** Veritabanı örneğinin donanım özelliklerini belirler. Bu, CPU, bellek ve ağ kapasitesi gibi kaynakları içerir. `db.t2.micro`, düşük maliyetli ve küçük ölçekli uygulamalar için uygundur.
	    - **Örnek Değerler:** `db.t2.micro`, `db.m5.large`, `db.r5.xlarge` vb.
	- **`--engine mysql`**
	    - **Açıklama:** Kullanılacak veritabanı motorunu belirtir. Burada `mysql` kullanılmıştır, ancak diğer desteklenen motorlar arasında PostgreSQL, MariaDB, Oracle, SQL Server ve Amazon Aurora bulunur.
	    - **Örnek Değerler:** `mysql`, `postgres`, `oracle-se2`, `sqlserver-ex` vb.
	- **`--master-username admin`**
	    - **Açıklama:** Veritabanının yönetici (master) kullanıcı adını belirler. Bu kullanıcı, veritabanını yönetmek için gerekli izinlere sahiptir.
	    - **Örnek:** `admin`
	- **`--master-user-password password`**
	    - **Açıklama:** Yönetici kullanıcısı için belirlenen şifredir. Güvenli bir şifre seçmek önemlidir. Şifrenin karmaşık ve tahmin edilmesi zor olması tavsiye edilir.
	    - **Örnek:** `password` (Gerçek uygulamalarda daha güçlü bir şifre kullanmalısınız.)
	- **`--allocated-storage 20`**
	    - **Açıklama:** Veritabanı örneğine tahsis edilecek depolama alanını gigabayt (GB) cinsinden belirtir. Bu değer, veritabanınızın veri depolama ihtiyaçlarına göre ayarlanmalıdır.
	    - **Örnek:** `20` GB
#### **5.2.3. Amazon DynamoDB*
**Amazon DynamoDB**, tam yönetilen ve sunucusuz bir NoSQL veritabanıdır
- **Özellikler:** 
    - **Yüksek Performans:** Milisaniye altı gecikme ve yüksek verimlilik.
    - **Otomatik Ölçeklenebilirlik:** Trafik taleplerine göre otomatik ölçeklenir.
    - **Sunucusuz Mimari:** Altyapı yönetimine gerek yoktur.
    - **Entegre Güvenlik:** IAM ile erişim kontrolü.
- **Kullanım Durumları:**  
    - Mobil, web ve IoT uygulamaları.
    - Oyun uygulamaları ve oturum yönetimi.
    - Gerçek zamanlı analitik ve kişiselleştirme.
- **Örnek: Amazon DynamoDB'de Tablo Oluşturma** 
    - **Adım 1:** AWS Management Console'da **DynamoDB** bölümüne gidin.
    - **Adım 2:** **Create table** butonuna tıklayın.
    - **Adım 3:** Tablo adını ve birincil anahtarları belirleyin.
    - **Adım 4:** Ek ayarları yapılandırın (okuma/yazma kapasitesi, şifreleme).
    - **Adım 5:** **Create table**'a tıklayarak işlemi tamamlayın.
- **Örnek Kod (Python Boto3 Kullanarak):**

import boto3

dynamodb = boto3.resource(‘dynamodb’)

table = dynamodb.create_table( TableName=’Kullanicilar’, KeySchema=[ { ‘AttributeName’: ‘kullanici_id’, ‘KeyType’: ‘HASH’ # Partition key } ], AttributeDefinitions=[ { ‘AttributeName’: ‘kullanici_id’, ‘AttributeType’: ‘S’ } ], ProvisionedThroughput={ ‘ReadCapacityUnits’: 5, ‘WriteCapacityUnits’: 5 } )

Tabloyu oluşturmak için bekleme

table.meta.client.get_waiter(‘table_exists’).wait(TableName=’Kullanicilar’) print(“Tablo oluşturuldu:”, table.table_status)


#### **5.2.4. Amazon Redshift*
**Amazon Redshift**, tam yönetilen bir veri ambarı hizmetidir
- **Özellikler:**
    - **Petabayt Ölçeğinde Veri Analizi:** Büyük veri setlerini hızlı bir şekilde sorgulayabilir.
    - **Kolon Bazlı Depolama:** Sorgu performansını artırır.
    - **Gelişmiş Sıkıştırma:** Depolama maliyetlerini düşürür.
    - **MPP (Massively Parallel Processing):** Paralel işlem gücüyle yüksek performans.
- **Kullanım Durumları:**
    - İş zekâsı ve veri analitiği uygulamaları.
    - Büyük veri iş yükleri.
    - Veri görselleştirme ve raporlama.
- **Örnek: Amazon Redshift Cluster Oluşturma**
    - **Adım 1:** AWS Management Console'da **Redshift** bölümüne gidin.
    - **Adım 2:** **Create cluster** butonuna tıklayın.
    - **Adım 3:** Cluster yapılandırmalarını belirleyin (düğüm sayısı, düğüm türü).
    - **Adım 4:** Güvenlik ayarlarını ve veritabanı ayarlarını yapılandırın.
    - **Adım 5:** **Create cluster**'a tıklayarak işlemi tamamlayın.

aws redshift create-cluster
–cluster-identifier myredshiftcluster
–node-type dc2.large
–master-username admin
–master-user-password password
–number-of-nodes 2


### **5.3. AWS ile Veri İşleme ve Analitiği*
#### **5.3.1. AWS Glue*
**AWS Glue**, tam yönetilen bir ETL (Extract, Transform, Load) hizmetidir
- **Özellikler:**  
    - **Veri Kataloğu:** Verilerinizi otomatik olarak keşfeder ve şema oluşturur.
    - **ETL İşleri:** PySpark kullanarak veri dönüşümleri yapabilirsiniz.
    - **Sunucusuz:** Altyapı yönetimine gerek yoktur.
- **Kullanım Durumları:**
    - Veri entegrasyonu ve dönüştürme.
    - Veri keşfi ve şema oluşturma.
    - Veri gölleri ve analitik platformlar.
- **Örnek: AWS Glue ile ETL İşi Oluşturma** 
    - **Adım 1:** AWS Management Console'da **Glue** bölümüne gidin.
    - **Adım 2:** **Add database** ile bir veritabanı oluşturun.
    - **Adım 3:** **Crawlers** ile veri kaynaklarını taratarak şemaları oluşturun.
    - **Adım 4:** **Jobs** bölümünde yeni bir ETL işi oluşturun.
    - **Adım 5:** PySpark kodu yazarak veri dönüşümlerini tanımlayın.
    - **Adım 6:** İşi çalıştırın ve sonuçları kontrol edin.
- **Örnek PySpark Kodu:**

import sys from awsglue.transforms import * from awsglue.utils import getResolvedOptions from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job

args = getResolvedOptions(sys.argv, [‘JOB_NAME’]) sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session job = Job(glueContext) job.init(args[‘JOB_NAME’], args)

Veri Kaynağını Okuma

datasource0 = glueContext.create_dynamic_frame.from_catalog(database = “mydatabase”, table_name = “mytable”, transformation_ctx = “datasource0”)

Veri Dönüşümü

applymapping1 = ApplyMapping.apply(frame = datasource0, mappings = [(“id”, “string”, “id”, “string”), (“name”, “string”, “name”, “string”)], transformation_ctx = “applymapping1”)

Hedefe Yazma

datasink2 = glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = “s3”, connection_options = {“path”: “s3://mybucket/output/”}, format = “json”, transformation_ctx = “datasink2”)

job.commit()


#### **5.3.2. Amazon SageMaker**
**Amazon SageMaker**, makine öğrenmesi modellerinin geliştirilmesi, eğitilmesi ve dağıtılması için kapsamlı bir platformdur.
- **Özellikler:**

    - **Eğitim ve Doğrulama:** Dağıtık ve ölçeklenebilir model eğitimi.
    - **Tahmin Hizmetleri:** Modelleri gerçek zamanlı veya toplu olarak sunma.
    - **Hiperparametre Optimizasyonu:** Otomatik olarak en iyi model parametrelerini bulma.
    - **Yerleşik Algoritmalar ve Önceden Eğitilmiş Modeller:** Süreci hızlandırır.
- **Kullanım Durumları:**

    - Görüntü ve metin sınıflandırma.
    - Tahmin ve tahminleme.
    - Doğal dil işleme ve öneri sistemleri.
- **Örnek: SageMaker ile Model Eğitimi**

    - **Adım 1:** AWS Management Console'da **SageMaker** bölümüne gidin.
    - **Adım 2:** **Notebooks** ile bir Jupyter Notebook başlatın.
    - **Adım 3:** Veri setini yükleyin ve ön işleme yapın.
    - **Adım 4:** SageMaker'ın yerleşik algoritmalarını veya kendi modelinizi kullanarak eğitim işini başlatın.
    - **Adım 5:** Eğitilen modeli dağıtın ve tahminler yapın.
- **Örnek Kod (Python Boto3 Kullanarak):**

import boto3 import sagemaker from sagemaker import get_execution_role from sagemaker.estimator import Estimator

sagemaker_session = sagemaker.Session() role = get_execution_role()

Eğitim için Estimator Oluşturma

estimator = Estimator( image_uri=’docker/image-uri’, role=role, instance_count=1, instance_type=’ml.m4.xlarge’, output_path=’s3://mybucket/output/’, sagemaker_session=sagemaker_session )

Model Eğitimi

estimator.fit({‘train’: ‘s3://mybucket/train-data/’})

Model Dağıtımı

predictor = estimator.deploy(initial_instance_count=1, instance_type=’ml.m4.xlarge’)

Tahmin Yapma

response = predictor.predict({‘feature1’: value1, ‘feature2’: value2}) print(response)


### **5.4. AWS'de Veri Güvenliği ve Yönetimi**
#### **5.4.1. Identity and Access Management (IAM)**
**AWS Identity and Access Management (IAM)**, AWS kaynaklarına güvenli erişim sağlamak için kullanılan bir hizmettir.
- **Kullanıcı ve Rol Yönetimi:**
    - Kullanıcılar, gruplar ve roller oluşturarak erişim kontrolü sağlar.
- **Politika Tabanlı İzinler:**
    - JSON biçimindeki politikalarla izinler tanımlanır.
- **En İyi Uygulamalar:**
    - **En Az Yetki İlkesi:** Kullanıcılara sadece ihtiyaç duydukları izinleri verin.
    - **MFA Kullanımı:** Çok faktörlü kimlik doğrulama ile güvenliği artırın.
    - **Düzenli İnceleme:** Erişim izinlerini ve politikalarını düzenli olarak gözden geçirin.
#### **5.4.2. Şifreleme ve Anahtar Yönetimi**
- **AWS Key Management Service (KMS):**

    - **Anahtar Yönetimi:** Şifreleme anahtarlarınızı oluşturabilir, döndürebilir ve yönetebilirsiniz.
    - **Entegrasyon:** S3, EBS, RDS gibi hizmetlerle entegre çalışır.
- **Şifreleme:**

    - **Atıl Durumdaki Veri:** Veriler KMS ile yönetilen anahtarlarla şifrelenebilir.
    - **İletim Halindeki Veri:** TLS/SSL kullanılarak şifrelenir.
#### **5.4.3. Denetim ve Uyumluluk**
- **AWS CloudTrail:**
    - **Denetim Günlükleri:** AWS hesaplarınızda gerçekleşen tüm API çağrılarını kaydeder.
    - **İzleme ve Uyarılar:** Güvenlik olaylarını tespit etmek için CloudTrail ile entegrasyonlu izleme ve uyarı sistemleri kurabilirsiniz.
- **Uyumluluk Sertifikaları:**
    - AWS, ISO 27001, SOC 1/2/3, HIPAA, GDPR gibi birçok uyumluluk standardını karşılar.
- **AWS Security Hub:**
    - **Güvenlik Durumu İzleme:** Güvenlik durumunuzu merkezi bir noktadan izleyebilir ve yönetebilirsiniz.
### **5.5. AWS Hesaplama Hizmetleri**
#### **5.5.1. Amazon EC2 (Elastic Compute Cloud)**
**Amazon EC2**, esnek ve ölçeklenebilir sanal sunucular sağlayan bir hizmettir.
- **Özellikler:**

    - **Çeşitli Makine Türleri:** Farklı iş yüklerine uygun CPU, bellek ve depolama kombinasyonları.
    - **Otomatik Ölçeklendirme:** EC2 Auto Scaling ile talebe göre kaynakları otomatik olarak ayarlayın.
    - **Kapsamlı Ağ Desteği:** Amazon VPC ile entegre çalışır, güvenlik grupları ve alt ağlar oluşturabilirsiniz.
    - **Depolama Seçenekleri:** Amazon EBS, yerel SSD'ler ve Instance Store.
- **Kullanım Durumları:**

    - Web ve uygulama sunucuları.
    - Büyük veri işleme ve analiz uygulamaları.
    - Geliştirme ve test ortamları
#### **5.5.2. AWS Lambda**
**AWS Lambda**, sunucusuz bir hesaplama hizmetidir ve kodunuzu sadece çalıştırıldığında çalıştırmanızı sağlar.
- **Özellikler:**

    - **Olay Tabanlı Tetikleme:** S3, DynamoDB, Kinesis, SNS ve diğer AWS hizmetlerinden gelen olaylarla tetiklenir.
    - **Otomatik Ölçeklenebilirlik:** Gelen isteğe göre otomatik olarak ölçeklenir.
    - **Çeşitli Diller Desteği:** Node.js, Python, Java, C#, Go, Ruby ve PowerShell.
- **Kullanım Durumları:**
    - Veri işleme ve dönüşümleri.
    - API arka uçları ve mikro hizmetler.
    - Gerçek zamanlı dosya işleme.

import json

def lambda_handler(event, context): # Olay verisini işleme print(“Received event: “ + json.dumps(event, indent=2))

return {
    'statusCode': 200,
    'body': json.dumps('Merhaba Dünya!')
} ```

5.5.3. Amazon ECS ve EKS

Amazon ECS (Elastic Container Service) ve Amazon EKS (Elastic Kubernetes Service), konteyner tabanlı uygulamaların yönetimi için hizmetlerdir.

Hangi Durumda Hangisi Tercih Edilmeli?