{"id":39339,"date":"2026-02-19T08:30:46","date_gmt":"2026-02-19T05:30:46","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/"},"modified":"2026-02-19T08:30:46","modified_gmt":"2026-02-19T05:30:46","slug":"aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/","title":{"rendered":"AWS Lambda, S3 ve DynamoDB ile Sunucusuz Bir X (Twitter) Al\u0131nt\u0131 Botu \u0130n\u015fa Etmek"},"content":{"rendered":"<h2>AWS Lambda, S3 ve DynamoDB ile Sunucusuz Bir X (Twitter) Al\u0131nt\u0131 Botu \u0130n\u015fa Etmek<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda, sosyal medya platformlar\u0131ndan de\u011ferli i\u00e7erikleri toplamak ve d\u00fczenlemek giderek \u00f6nem kazan\u0131yor. Bu makalede, X (eski ad\u0131yla Twitter) platformundan ilham verici al\u0131nt\u0131lar\u0131 otomatik olarak toplayan, depolayan ve y\u00f6neten sunucusuz bir botun nas\u0131l in\u015fa edilece\u011fini ad\u0131m ad\u0131m inceleyece\u011fiz. AWS Lambda, S3 ve DynamoDB gibi g\u00fc\u00e7l\u00fc AWS servislerini kullanarak, y\u00fcksek oranda \u00f6l\u00e7eklenebilir, maliyet etkin ve bak\u0131m\u0131 kolay bir \u00e7\u00f6z\u00fcm geli\u015ftirece\u011fiz.<\/p>\n<h3>Proje Fikri ve Neden Sunucusuz?<\/h3>\n<p>Bu projenin temel amac\u0131, belirli kriterlere uyan X g\u00f6nderilerindeki (tweetlerdeki) al\u0131nt\u0131lar\u0131 otomatik olarak tespit etmek, kaydetmek ve belki de daha sonra payla\u015fmak veya analiz etmek i\u00e7in kullan\u0131labilir bir veri taban\u0131 olu\u015fturmakt\u0131r. Geleneksel sunucu tabanl\u0131 yakla\u015f\u0131mlar\u0131n getirdi\u011fi maliyet, y\u00f6netim y\u00fck\u00fc ve \u00f6l\u00e7eklenebilirlik sorunlar\u0131 d\u00fc\u015f\u00fcn\u00fcld\u00fc\u011f\u00fcnde, sunucusuz mimari bu t\u00fcr bir bot i\u00e7in ideal bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<h4>X (Twitter) Al\u0131nt\u0131 Botu \u0130htiyac\u0131<\/h4>\n<p>Sosyal medyada her g\u00fcn binlerce ilham verici s\u00f6z, bilgi par\u00e7ac\u0131\u011f\u0131 veya de\u011ferli g\u00f6r\u00fc\u015f payla\u015f\u0131l\u0131yor. Bu i\u00e7erikleri manuel olarak takip etmek ve kaydetmek zaman al\u0131c\u0131 ve verimsizdir. Bir al\u0131nt\u0131 botu, bu s\u00fcreci otomatikle\u015ftirerek kullan\u0131c\u0131lar\u0131n veya kurumlar\u0131n belirli konular, ki\u015filer veya anahtar kelimeler etraf\u0131ndaki de\u011ferli i\u00e7erikleri kolayca ar\u015fivlemesine olanak tan\u0131r. Bu bot, ki\u015fisel bir ilham kayna\u011f\u0131 olabilece\u011fi gibi, pazarlama veya ara\u015ft\u0131rma ama\u00e7l\u0131 da kullan\u0131labilir.<\/p>\n<h4>Sunucusuz Mimarinin Avantajlar\u0131<\/h4>\n<p>Sunucusuz mimari, geli\u015ftiricilerin altyap\u0131 y\u00f6netimi endi\u015fesi olmadan kod yazmaya odaklanmas\u0131n\u0131 sa\u011flar. Bu yakla\u015f\u0131m\u0131n ba\u015fl\u0131ca avantajlar\u0131 \u015funlard\u0131r:<\/p>\n<ul>\n<li><b>Otomatik \u00d6l\u00e7eklenebilirlik:<\/b> Trafik artt\u0131\u011f\u0131nda veya azald\u0131\u011f\u0131nda sistem otomatik olarak \u00f6l\u00e7eklenir, manuel m\u00fcdahaleye gerek kalmaz.<\/li>\n<li><b>Maliyet Etkinli\u011fi:<\/b> Yaln\u0131zca kullan\u0131lan kaynaklar i\u00e7in \u00f6deme yap\u0131l\u0131r. Bot \u00e7al\u0131\u015fmad\u0131\u011f\u0131nda herhangi bir maliyet olu\u015fmaz.<\/li>\n<li><b>Y\u00f6netim Y\u00fck\u00fcn\u00fcn Azalmas\u0131:<\/b> Sunucu bak\u0131m\u0131, g\u00fcncellemeler ve g\u00fcvenlik yamalar\u0131 AWS taraf\u0131ndan y\u00f6netilir.<\/li>\n<li><b>Daha H\u0131zl\u0131 Geli\u015ftirme:<\/b> Haz\u0131r servisler sayesinde altyap\u0131 kurulumu yerine do\u011frudan i\u015f mant\u0131\u011f\u0131na odaklan\u0131l\u0131r.<\/li>\n<\/ul>\n<h4>Geleneksel Yakla\u015f\u0131ma Kar\u015f\u0131 Sunucusuz<\/h4>\n<p>Geleneksel bir sunucu (\u00f6rne\u011fin, bir EC2 \u00f6rne\u011fi) \u00fczerinde \u00e7al\u0131\u015fan bir bot, s\u00fcrekli bir maliyet ve y\u00f6netim y\u00fck\u00fc getirir. Sunucunun her zaman a\u00e7\u0131k olmas\u0131 gerekir, bu da botun aktif olmad\u0131\u011f\u0131 zamanlarda bile \u00fccret \u00f6denmesi anlam\u0131na gelir. Ayr\u0131ca, i\u015fletim sistemi g\u00fcncellemeleri, g\u00fcvenlik yamalar\u0131 ve \u00f6l\u00e7eklendirme gibi g\u00f6revler geli\u015ftiricinin sorumlulu\u011fundad\u0131r. Sunucusuz yakla\u015f\u0131m ise bu sorunlar\u0131 ortadan kald\u0131rarak daha \u00e7evik ve ekonomik bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<h3>AWS Servislerine Genel Bak\u0131\u015f<\/h3>\n<p>Projemizde kullanaca\u011f\u0131m\u0131z temel AWS servisleri Lambda, S3 ve DynamoDB&#8217;dir. Her bir servis, botumuzun farkl\u0131 bir ihtiyac\u0131n\u0131 kar\u015f\u0131lamak \u00fczere tasarlanm\u0131\u015ft\u0131r.<\/p>\n<h4>AWS Lambda: Kodunuzu Sunucusuz \u00c7al\u0131\u015ft\u0131r\u0131n<\/h4>\n<p>AWS Lambda, sunucu sa\u011flamaya veya y\u00f6netmeye gerek kalmadan kod \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131yan bir bilgi i\u015flem hizmetidir. Kodunuz yaln\u0131zca ihtiya\u00e7 duyuldu\u011funda \u00e7al\u0131\u015f\u0131r ve yaln\u0131zca kulland\u0131\u011f\u0131n\u0131z bilgi i\u015flem s\u00fcresi i\u00e7in \u00f6deme yapars\u0131n\u0131z. Botumuzun ana i\u015f mant\u0131\u011f\u0131 (X API&#8217;den veri \u00e7ekme, i\u015fleme ve depolama) bir Lambda fonksiyonu i\u00e7inde \u00e7al\u0131\u015facakt\u0131r. Lambda, EventBridge (CloudWatch Events) taraf\u0131ndan tetiklenerek belirli aral\u0131klarla \u00e7al\u0131\u015fabilir.<\/p>\n<h4>Amazon S3: Nesne Depolama \u00c7\u00f6z\u00fcm\u00fc<\/h4>\n<p>Amazon S3 (Simple Storage Service), her boyuttan veriyi depolayabilen ve alabilen, y\u00fcksek oranda \u00f6l\u00e7eklenebilir, g\u00fcvenli ve dayan\u0131kl\u0131 bir nesne depolama hizmetidir. Botumuzda, S3&#8217;\u00fc yap\u0131land\u0131rma dosyalar\u0131n\u0131, botun \u00e7al\u0131\u015ft\u0131\u011f\u0131 s\u0131rada ge\u00e7ici olarak depolanan b\u00fcy\u00fck veri k\u00fcmelerini veya belki de al\u0131nt\u0131larla ili\u015fkili g\u00f6rsel i\u00e7erikleri saklamak i\u00e7in kullanabiliriz. Ayr\u0131ca, Lambda fonksiyonumuzun da\u011f\u0131t\u0131m paketini de S3 \u00fczerinde tutabiliriz.<\/p>\n<h4>Amazon DynamoDB: H\u0131zl\u0131 ve \u00d6l\u00e7eklenebilir NoSQL Veritaban\u0131<\/h4>\n<p>Amazon DynamoDB, herhangi bir \u00f6l\u00e7ekte tek haneli milisaniye performans\u0131 sa\u011flayan, h\u0131zl\u0131 ve esnek bir NoSQL veritaban\u0131 hizmetidir. Tamamen y\u00f6netilen bir hizmettir, bu da veritaban\u0131 y\u00f6netimi g\u00f6revleriyle u\u011fra\u015fman\u0131za gerek kalmayaca\u011f\u0131 anlam\u0131na gelir. Botumuz, toplad\u0131\u011f\u0131 al\u0131nt\u0131lar\u0131 (metin, yazar, URL, zaman damgas\u0131 vb.) DynamoDB&#8217;de depolayacakt\u0131r. DynamoDB&#8217;nin esnek \u015femas\u0131, farkl\u0131 t\u00fcrde al\u0131nt\u0131lar i\u00e7in kolayca uyum sa\u011flamam\u0131z\u0131 sa\u011flar.<\/p>\n<h4>Di\u011fer Potansiyel Servisler<\/h4>\n<p>Projenin kapsam\u0131na g\u00f6re ek AWS servisleri de kullan\u0131labilir:<\/p>\n<ul>\n<li><b>Amazon EventBridge:<\/b> Lambda fonksiyonunu d\u00fczenli aral\u0131klarla tetiklemek i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><b>AWS Secrets Manager:<\/b> X API anahtarlar\u0131 gibi hassas bilgileri g\u00fcvenli bir \u015fekilde depolamak i\u00e7in.<\/li>\n<li><b>Amazon CloudWatch:<\/b> Lambda fonksiyonunun performans\u0131n\u0131 izlemek, loglar\u0131 toplamak ve alarmlar kurmak i\u00e7in.<\/li>\n<\/ul>\n<h3>Mimari Tasar\u0131m<\/h3>\n<p>Sunucusuz al\u0131nt\u0131 botumuzun mimarisi, farkl\u0131 AWS servislerinin bir araya gelerek uyumlu bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Bu tasar\u0131m, botun g\u00fcvenilir, \u00f6l\u00e7eklenebilir ve y\u00f6netilebilir olmas\u0131n\u0131 hedefler.<\/p>\n<h4>Temel Ak\u0131\u015f \u015eemas\u0131<\/h4>\n<p>Botun temel \u00e7al\u0131\u015fma ak\u0131\u015f\u0131 a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 i\u00e7erir:<\/p>\n<ol>\n<li><b>Zamanlama:<\/b> EventBridge (CloudWatch Events), Lambda fonksiyonunu belirli aral\u0131klarla (\u00f6rne\u011fin, her saat ba\u015f\u0131) tetikler.<\/li>\n<li><b>Veri \u00c7ekme:<\/b> Lambda fonksiyonu, X API&#8217;sine ba\u011flanarak \u00f6nceden tan\u0131mlanm\u0131\u015f anahtar kelimeler, hesaplar veya hashtag&#8217;ler \u00fczerinden g\u00f6nderileri sorgular.<\/li>\n<li><b>\u0130\u015fleme ve Filtreleme:<\/b> \u00c7ekilen g\u00f6nderiler, al\u0131nt\u0131lar\u0131 tespit etmek i\u00e7in i\u015flenir. Bu ad\u0131mda metin analizi, anahtar kelime e\u015fle\u015ftirme veya belirli desenlerin aranmas\u0131 gibi i\u015flemler yap\u0131labilir.<\/li>\n<li><b>Depolama:<\/b> Tespit edilen al\u0131nt\u0131lar, ilgili meta verileriyle (yazar, g\u00f6nderi URL&#8217;si, zaman damgas\u0131 vb.) birlikte DynamoDB&#8217;ye kaydedilir.<\/li>\n<li><b>Hata Y\u00f6netimi ve Loglama:<\/b> T\u00fcm i\u015flemler CloudWatch&#8217;a loglan\u0131r ve olas\u0131 hatalar i\u00e7in alarmlar kurulabilir.<\/li>\n<\/ol>\n<h4>Veri Modeli (DynamoDB)<\/h4>\n<p>DynamoDB&#8217;de al\u0131nt\u0131lar\u0131 depolamak i\u00e7in basit bir tablo yap\u0131s\u0131 kullanabiliriz. \u00d6rnek bir <code>Quotes<\/code> tablosu \u015f\u00f6yle g\u00f6r\u00fcnebilir:<\/p>\n<table>\n<thead>\n<tr>\n<th>\u00d6zellik<\/th>\n<th>Veri Tipi<\/th>\n<th>A\u00e7\u0131klama<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>QuoteID<\/code><\/td>\n<td>String (Partition Key)<\/td>\n<td>Al\u0131nt\u0131n\u0131n benzersiz kimli\u011fi (UUID veya tweet ID&#8217;si)<\/td>\n<\/tr>\n<tr>\n<td><code>Text<\/code><\/td>\n<td>String<\/td>\n<td>Al\u0131nt\u0131n\u0131n tam metni<\/td>\n<\/tr>\n<tr>\n<td><code>AuthorHandle<\/code><\/td>\n<td>String<\/td>\n<td>Al\u0131nt\u0131y\u0131 yapan hesab\u0131n kullan\u0131c\u0131 ad\u0131<\/td>\n<\/tr>\n<tr>\n<td><code>TweetURL<\/code><\/td>\n<td>String<\/td>\n<td>Al\u0131nt\u0131n\u0131n al\u0131nd\u0131\u011f\u0131 g\u00f6nderinin URL&#8217;si<\/td>\n<\/tr>\n<tr>\n<td><code>Timestamp<\/code><\/td>\n<td>Number<\/td>\n<td>Al\u0131nt\u0131n\u0131n kaydedildi\u011fi Unix zaman damgas\u0131<\/td>\n<\/tr>\n<tr>\n<td><code>Keywords<\/code><\/td>\n<td>List of Strings<\/td>\n<td>Al\u0131nt\u0131yla ili\u015fkili anahtar kelimeler<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>G\u00fcvenlik ve \u0130zinler (IAM)<\/h4>\n<p>AWS Identity and Access Management (IAM), AWS kaynaklar\u0131na g\u00fcvenli eri\u015fimi y\u00f6netmek i\u00e7in kullan\u0131l\u0131r. Lambda fonksiyonumuzun DynamoDB&#8217;ye veri yazma ve S3&#8217;ten yap\u0131land\u0131rma okuma izinlerine sahip olmas\u0131 gerekir. Ayr\u0131ca, X API kimlik bilgilerini do\u011frudan Lambda kodunda tutmak yerine, bunlar\u0131 AWS Secrets Manager&#8217;da depolamak ve Lambda&#8217;n\u0131n bu servise eri\u015fim izni olmas\u0131n\u0131 sa\u011flamak en iyi uygulamad\u0131r.<\/p>\n<h3>Geli\u015ftirme S\u00fcreci: Ad\u0131m Ad\u0131m<\/h3>\n<p>Botun geli\u015ftirme s\u00fcreci, kodlama, servis entegrasyonu ve test ad\u0131mlar\u0131n\u0131 i\u00e7erir. Python, Lambda fonksiyonlar\u0131 i\u00e7in pop\u00fcler ve uygun bir dildir.<\/p>\n<h4>Geli\u015ftirme Ortam\u0131n\u0131n Haz\u0131rlanmas\u0131<\/h4>\n<p>Yerel geli\u015ftirme i\u00e7in AWS CLI ve Serverless Framework veya AWS SAM CLI gibi ara\u00e7lara ihtiyac\u0131m\u0131z olacak. Bu ara\u00e7lar, kodu yerel olarak test etmemizi ve AWS&#8217;ye kolayca da\u011f\u0131tmam\u0131z\u0131 sa\u011flar. Ayr\u0131ca, Python i\u00e7in <code>boto3<\/code> (AWS SDK) ve X API ile etkile\u015fim kurmak i\u00e7in <code>tweepy<\/code> veya <code>twitter-api-v2<\/code> gibi bir k\u00fct\u00fcphane gereklidir.<\/p>\n<h4>Lambda Fonksiyonunun Yaz\u0131lmas\u0131<\/h4>\n<p>Lambda fonksiyonu, X API&#8217;den veri \u00e7ekme, al\u0131nt\u0131lar\u0131 i\u015fleme ve DynamoDB&#8217;ye kaydetme mant\u0131\u011f\u0131n\u0131 i\u00e7erecektir.<\/p>\n<pre><code class=\"language-python\">\nimport os\nimport json\nimport tweepy # veya twitter-api-v2\nimport boto3\nfrom datetime import datetime\nimport uuid\n\n# AWS Servisleri i\u00e7in istemciler\ndynamodb = boto3.resource('dynamodb')\ntable = dynamodb.Table(os.environ['DYNAMODB_TABLE_NAME'])\n\n# X (Twitter) API kimlik bilgileri (Secrets Manager'dan \u00e7ekilmesi \u00f6nerilir)\n# Bu \u00f6rnekte \u00e7evre de\u011fi\u015fkenleri kullan\u0131lm\u0131\u015ft\u0131r, ancak \u00fcretimde Secrets Manager tercih edilmelidir.\nBEARER_TOKEN = os.environ.get('BEARER_TOKEN')\n\n# Tweepy istemcisi\nclient = tweepy.Client(BEARER_TOKEN)\n\ndef lambda_handler(event, context):\n    search_query = os.environ.get('SEARCH_QUERY', 'ilham veren s\u00f6zler OR #motivasyon')\n    \n    try:\n        # X API'den g\u00f6nderi \u00e7ekme\n        # Daha karma\u015f\u0131k sorgular ve filtrelemeler burada yap\u0131labilir\n        response = client.search_recent_tweets(search_query, tweet_fields=[\"author_id\", \"created_at\"], max_results=10)\n        \n        if response.data:\n            for tweet in response.data:\n                quote_text = tweet.text\n                author_id = tweet.author_id\n                tweet_id = tweet.id\n                \n                # Yazar bilgilerini \u00e7ekme (iste\u011fe ba\u011fl\u0131)\n                user_response = client.get_user(id=author_id, user_fields=[\"username\"])\n                author_handle = user_response.data.username if user_response.data else \"Bilinmeyen\"\n\n                # Al\u0131nt\u0131y\u0131 DynamoDB'ye kaydetme\n                item = {\n                    'QuoteID': str(uuid.uuid4()), # Benzersiz ID\n                    'Text': quote_text,\n                    'AuthorHandle': author_handle,\n                    'TweetURL': f\"https:\/\/x.com\/{author_handle}\/status\/{tweet_id}\",\n                    'Timestamp': int(datetime.now().timestamp()),\n                    'SourceTweetId': str(tweet_id)\n                }\n                table.put_item(Item=item)\n                print(f\"Al\u0131nt\u0131 kaydedildi: {quote_text[:50]}...\")\n        else:\n            print(\"Yeni al\u0131nt\u0131 bulunamad\u0131.\")\n            \n        return {\n            'statusCode': 200,\n            'body': json.dumps('X al\u0131nt\u0131 botu ba\u015far\u0131yla \u00e7al\u0131\u015ft\u0131!')\n        }\n        \n    except Exception as e:\n        print(f\"Hata olu\u015ftu: {e}\")\n        return {\n            'statusCode': 500,\n            'body': json.dumps(f'Hata: {str(e)}')\n        }\n\n<\/pre>\n<p><\/code><\/p>\n<h4>DynamoDB Entegrasyonu<\/h4>\n<p>Yukar\u0131daki kod \u00f6rne\u011finde <code>boto3<\/code> k\u00fct\u00fcphanesi kullan\u0131larak DynamoDB'ye <code>put_item<\/code> i\u015flemiyle veri eklenmi\u015ftir. Ger\u00e7ek bir senaryoda, ayn\u0131 al\u0131nt\u0131n\u0131n tekrar kaydedilmesini \u00f6nlemek i\u00e7in <code>SourceTweetId<\/code>'yi kullanarak bir kontrol mekanizmas\u0131 eklenebilir. Ayr\u0131ca, al\u0131nt\u0131lar\u0131 sorgulamak veya g\u00fcncellemek i\u00e7in <code>get_item<\/code> veya <code>update_item<\/code> gibi i\u015flemler de kullan\u0131labilir.<\/p>\n<h4>S3 Kullan\u0131m\u0131 (Opsiyonel)<\/h4>\n<p>E\u011fer bot, al\u0131nt\u0131larla birlikte g\u00f6rselleri de i\u015fleyecekse veya \u00e7ok b\u00fcy\u00fck metin dosyalar\u0131n\u0131 ge\u00e7ici olarak depolayacaksa S3 devreye girer. \u00d6rne\u011fin, botun her \u00e7al\u0131\u015ft\u0131\u011f\u0131nda \u00e7ekti\u011fi t\u00fcm g\u00f6nderilerin ham JSON verilerini S3'e yedeklemek isteyebilirsiniz.<\/p>\n<h3>Da\u011f\u0131t\u0131m ve Otomasyon<\/h3>\n<p>Sunucusuz uygulamalar\u0131n da\u011f\u0131t\u0131m\u0131 ve otomasyonu, altyap\u0131n\u0131n kod olarak tan\u0131mlanmas\u0131 (Infrastructure as Code - IaC) prensibiyle kolayla\u015ft\u0131r\u0131l\u0131r.<\/p>\n<h4>AWS SAM veya Serverless Framework ile Da\u011f\u0131t\u0131m<\/h4>\n<p>AWS Serverless Application Model (SAM) veya Serverless Framework gibi ara\u00e7lar, Lambda fonksiyonlar\u0131n\u0131, DynamoDB tablolar\u0131n\u0131 ve EventBridge kurallar\u0131n\u0131 tek bir yap\u0131land\u0131rma dosyas\u0131 \u00fczerinden tan\u0131mlamam\u0131z\u0131 ve da\u011f\u0131tmam\u0131z\u0131 sa\u011flar. Bu, tekrarlanabilir ve s\u00fcrd\u00fcr\u00fclebilir bir da\u011f\u0131t\u0131m s\u00fcreci i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<pre><code class=\"language-yaml\">\n# template.yaml (AWS SAM \u00f6rne\u011fi)\nAWSTemplateFormatVersion: '2010-09-09'\nTransform: AWS::Serverless-2016-10-31\nDescription: Bir X (Twitter) Al\u0131nt\u0131 Botu\n\nGlobals:\n  Function:\n    Timeout: 30 # Saniye\n\nResources:\n  QuoteBotFunction:\n    Type: AWS::Serverless::Function\n    Properties:\n      Handler: app.lambda_handler\n      Runtime: python3.9\n      CodeUri: s3:\/\/your-s3-bucket\/your-lambda-code.zip # Kodu S3'ten alacak\n      MemorySize: 128\n      Environment:\n        Variables:\n          DYNAMODB_TABLE_NAME: !Ref QuotesTable\n          BEARER_TOKEN: \"{{resolve:secretsmanager:XApiBearerToken:SecretString:bearer_token}}\" # Secrets Manager kullan\u0131m\u0131\n          SEARCH_QUERY: \"ilham veren s\u00f6zler OR #motivasyon\"\n      Policies:\n        - DynamoDBCrudPolicy:\n            TableName: !Ref QuotesTable\n        - Statement: # Secrets Manager'dan okuma izni\n            - Effect: Allow\n              Action:\n                - secretsmanager:GetSecretValue\n              Resource: !Sub \"arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:XApiBearerToken-*\"\n      Events:\n        HourlySchedule:\n          Type: Schedule\n          Properties:\n            Schedule: cron(0 * ? * * *) # Her saat ba\u015f\u0131 \u00e7al\u0131\u015ft\u0131r\n            Name: QuoteBotHourlyTrigger\n            Description: Her saat ba\u015f\u0131 al\u0131nt\u0131 botunu tetikler\n\n  QuotesTable:\n    Type: AWS::DynamoDB::Table\n    Properties:\n      AttributeDefinitions:\n        - AttributeName: QuoteID\n          AttributeType: S\n      KeySchema:\n        - AttributeName: QuoteID\n          KeyType: HASH\n      BillingMode: PAY_PER_REQUEST # Sadece kullan\u0131ld\u0131\u011f\u0131nda \u00f6deme\n      TableName: XQuoteBotQuotes\n\nOutputs:\n  QuoteBotFunctionArn:\n    Description: \"X Al\u0131nt\u0131 Botu Lambda Fonksiyonu ARN\"\n    Value: !GetAtt QuoteBotFunction.Arn\n  QuotesTableName:\n    Description: \"DynamoDB Al\u0131nt\u0131lar Tablosu Ad\u0131\"\n    Value: !Ref QuotesTable\n\n<\/pre>\n<p><\/code><\/p>\n<h4>Zamanlanm\u0131\u015f Tetikleyiciler (EventBridge)<\/h4>\n<p>Yukar\u0131daki SAM \u015fablonunda g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi, <code>Schedule<\/code> tipi bir olay kayna\u011f\u0131 kullanarak Lambda fonksiyonunu d\u00fczenli aral\u0131klarla tetikleyebiliriz. <code>cron(0 * ? * * *)<\/code> ifadesi, fonksiyonun her saat ba\u015f\u0131 \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Bu sayede botumuz otomatik olarak ve s\u00fcrekli bir \u015fekilde al\u0131nt\u0131lar\u0131 toplamaya devam edebilir.<\/p>\n<h4>\u0130zleme ve G\u00fcnl\u00fckleme (CloudWatch)<\/h4>\n<p>AWS Lambda, t\u00fcm fonksiyon \u00e7a\u011fr\u0131lar\u0131n\u0131 ve \u00e7\u0131kt\u0131s\u0131n\u0131 otomatik olarak Amazon CloudWatch Logs'a g\u00f6nderir. Bu loglar, botun ne zaman \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131, hangi hatalar\u0131 ald\u0131\u011f\u0131n\u0131 ve performans\u0131n\u0131 anlamak i\u00e7in \u00e7ok de\u011ferlidir. CloudWatch metrikleri ve alarmlar\u0131 sayesinde, botun beklendi\u011fi gibi \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 izleyebilir ve sorunlar olu\u015ftu\u011funda an\u0131nda bildirim alabiliriz.<\/p>\n<h3>Maliyet ve Performans De\u011ferlendirmesi<\/h3>\n<p>Sunucusuz mimarinin en \u00e7ekici y\u00f6nlerinden biri, maliyet etkinli\u011fi ve otomatik \u00f6l\u00e7eklenebilirlik sunmas\u0131d\u0131r.<\/p>\n<h4>Sunucusuz Maliyet Modeli<\/h4>\n<p>AWS Lambda, S3 ve DynamoDB'nin tamam\u0131 kulland\u0131k\u00e7a \u00f6de modeline sahiptir. Bu, botunuzun yaln\u0131zca aktif oldu\u011fu s\u00fcre boyunca veya depolad\u0131\u011f\u0131 veri miktar\u0131 kadar \u00f6deme yapaca\u011f\u0131n\u0131z anlam\u0131na gelir. \u00c7o\u011fu k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli bot i\u00e7in AWS'nin \u00fccretsiz katman\u0131 (Free Tier) yeterli olabilir veya \u00e7ok d\u00fc\u015f\u00fck maliyetlerle \u00e7al\u0131\u015fabilir. \u00d6rne\u011fin, Lambda i\u00e7in ilk 1 milyon istek ve 400.000 GB-saniye bilgi i\u015flem s\u00fcresi \u00fccretsizdir. DynamoDB i\u00e7in de ilk 25 GB depolama ve 25 okuma\/yazma kapasite birimi \u00fccretsizdir.<\/p>\n<h4>Performans ve \u00d6l\u00e7eklenebilirlik<\/h4>\n<p>Lambda, gelen isteklere g\u00f6re otomatik olarak \u00f6l\u00e7eklenir, bu da botun ayn\u0131 anda birden fazla X API iste\u011fini veya farkl\u0131 tetikleyicileri sorunsuz bir \u015fekilde i\u015fleyebilece\u011fi anlam\u0131na gelir. DynamoDB, tek haneli milisaniye gecikme s\u00fcresi sunar ve her \u00f6l\u00e7ekte y\u00fcksek performans sa\u011flar. Bu servislerin birle\u015fimi, botunuzun X API limitleri dahilinde y\u00fcksek performansla \u00e7al\u0131\u015fmas\u0131n\u0131 ve veri hacmi artt\u0131\u011f\u0131nda bile sorunsuz bir \u015fekilde \u00f6l\u00e7eklenmesini garanti eder.<\/p>\n<h4>Optimizasyon \u0130pu\u00e7lar\u0131<\/h4>\n<p>Maliyet ve performans\u0131 optimize etmek i\u00e7in \u015funlar yap\u0131labilir:<\/p>\n<ul>\n<li><b>Lambda Bellek Ayar\u0131:<\/b> Lambda fonksiyonuna atanan bellek, CPU g\u00fcc\u00fcn\u00fc de etkiler. Fonksiyonun ihtiya\u00e7 duydu\u011fu en d\u00fc\u015f\u00fck bellek miktar\u0131n\u0131 bularak maliyeti optimize edebilirsiniz.<\/li>\n<li><b>DynamoDB Kapasite Modlar\u0131:<\/b> <code>PAY_PER_REQUEST<\/code> (iste\u011fe ba\u011fl\u0131) modu, tahmin edilemeyen i\u015f y\u00fckleri i\u00e7in idealdir. Daha istikrarl\u0131 i\u015f y\u00fckleri i\u00e7in <code>PROVISIONED<\/code> (sa\u011flanan) modu daha uygun maliyetli olabilir.<\/li>\n<li><b>X API Limitleri:<\/b> X API'nin kullan\u0131m limitlerini a\u015fmamak i\u00e7in istekler aras\u0131nda uygun gecikmeler eklemek veya daha az s\u0131kl\u0131kta sorgulama yapmak \u00f6nemlidir.<\/li>\n<\/ul>\n<h3>Potansiyel Geli\u015ftirmeler ve Sonu\u00e7<\/h3>\n<p>\u0130n\u015fa etti\u011fimiz temel al\u0131nt\u0131 botu, \u00e7e\u015fitli \u00f6zelliklerle daha da geli\u015ftirilebilir ve farkl\u0131 kullan\u0131m senaryolar\u0131na uyarlanabilir.<\/p>\n<h4>Botun Yeteneklerini Geni\u015fletme<\/h4>\n<ul>\n<li><b>G\u00f6rsel Olu\u015fturma:<\/b> Toplanan al\u0131nt\u0131lar\u0131 g\u00fczel g\u00f6rsellerle birle\u015ftirip otomatik olarak g\u00f6rsel olarak \u00e7ekici payla\u015f\u0131mlar olu\u015fturma.<\/li>\n<li><b>Farkl\u0131 Platformlara Entegrasyon:<\/b> Al\u0131nt\u0131lar\u0131 sadece depolamakla kalmay\u0131p, Slack, Discord veya ba\u015fka bir sosyal medya platformuna otomatik olarak g\u00f6nderme.<\/li>\n<li><b>Makine \u00d6\u011frenimi Entegrasyonu:<\/b> Al\u0131nt\u0131lar\u0131n duygu analizini yapma veya belirli bir konuyla ne kadar alakal\u0131 oldu\u011funu belirleme.<\/li>\n<li><b>Kullan\u0131c\u0131 Etkile\u015fimi:<\/b> Botun belirli komutlara yan\u0131t vermesini veya kullan\u0131c\u0131lar\u0131n istek \u00fczerine al\u0131nt\u0131 \u00e7ekmesini sa\u011flayan bir API Gateway entegrasyonu.<\/li>\n<\/ul>\n<h4>\u00d6\u011frenilen Dersler<\/h4>\n<p>Bu t\u00fcr bir projede kar\u015f\u0131la\u015f\u0131lacak zorluklar genellikle X API'nin limitleri, veri temizli\u011fi ve al\u0131nt\u0131lar\u0131n do\u011fru bir \u015fekilde tespit edilmesi etraf\u0131nda d\u00f6ner. API limitlerini ak\u0131ll\u0131ca y\u00f6netmek, d\u00fczenli ifade (regex) veya do\u011fal dil i\u015fleme (NLP) teknikleriyle al\u0131nt\u0131 tespiti yapmak ve hata y\u00f6netimi stratejilerini iyi planlamak, projenin ba\u015far\u0131s\u0131 i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h4>Sonu\u00e7<\/h4>\n<p>AWS Lambda, S3 ve DynamoDB kullanarak sunucusuz bir X al\u0131nt\u0131 botu in\u015fa etmek, modern bulut bili\u015fimin g\u00fcc\u00fcn\u00fc ve esnekli\u011fini g\u00f6steren harika bir \u00f6rnektir. Bu yakla\u015f\u0131m, geli\u015ftiricilere h\u0131zl\u0131 prototipleme, otomatik \u00f6l\u00e7eklenebilirlik ve minimum operasyonel y\u00fck ile g\u00fc\u00e7l\u00fc uygulamalar olu\u015fturma imkan\u0131 sunar. Geli\u015ftirdi\u011fimiz bu bot, sadece X'ten al\u0131nt\u0131 toplamakla kalmay\u0131p, gelecekteki geni\u015fletmelere ve farkl\u0131 entegrasyonlara a\u00e7\u0131k, sa\u011flam bir temel olu\u015fturmaktad\u0131r. Sunucusuz mimari, dijital d\u00fcnyadaki veri toplama ve otomasyon ihtiya\u00e7lar\u0131 i\u00e7in kesinlikle g\u00f6z \u00f6n\u00fcnde bulundurulmas\u0131 gereken bir \u00e7\u00f6z\u00fcmd\u00fcr.<\/p>\n<h3>S\u0131k Sorulan Sorular (SSS)<\/h3>\n<h4>Bu bot ne kadar maliyetli olur?<\/h4>\n<p>\u00c7o\u011fu k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli kullan\u0131m i\u00e7in, AWS'nin \u00fccretsiz katmanlar\u0131 sayesinde maliyet ya s\u0131f\u0131r olacak ya da \u00e7ok d\u00fc\u015f\u00fck seviyelerde (ayl\u0131k birka\u00e7 dolar) kalacakt\u0131r. Kullan\u0131m artt\u0131k\u00e7a (daha fazla Lambda \u00e7a\u011fr\u0131s\u0131, daha fazla depolanan veri), maliyet de orant\u0131l\u0131 olarak artar ancak yine de geleneksel sunucu \u00e7\u00f6z\u00fcmlerine g\u00f6re genellikle daha ekonomiktir.<\/p>\n<h4>Hangi programlama dillerini kullanabilirim?<\/h4>\n<p>AWS Lambda, Python, Node.js, Java, C#, Go, Ruby ve PowerShell gibi bir\u00e7ok programlama dilini destekler. Bu makalede Python kullan\u0131lm\u0131\u015f olsa da, tercih etti\u011finiz dilde benzer bir botu kolayca geli\u015ftirebilirsiniz.<\/p>\n<h4>G\u00fcvenlik endi\u015feleri nelerdir?<\/h4>\n<p>Hassas bilgiler (X API anahtarlar\u0131 gibi) do\u011frudan kodda veya \u00e7evre de\u011fi\u015fkenlerinde tutulmamal\u0131d\u0131r. AWS Secrets Manager gibi servisler, bu t\u00fcr bilgileri g\u00fcvenli bir \u015fekilde depolamak ve Lambda fonksiyonuna gerekti\u011finde eri\u015fim sa\u011flamak i\u00e7in kullan\u0131lmal\u0131d\u0131r. Ayr\u0131ca, IAM rolleri arac\u0131l\u0131\u011f\u0131yla Lambda fonksiyonuna yaln\u0131zca ihtiya\u00e7 duydu\u011fu minimum izinleri vermek (Least Privilege Prensibi) \u00f6nemlidir.<\/p>\n<h4>X (Twitter) API limitleri nas\u0131l y\u00f6netilir?<\/h4>\n<p>X API'nin belirli kullan\u0131m limitleri vard\u0131r (dakika ba\u015f\u0131na veya ayda belirli say\u0131da istek). Bu limitleri a\u015fmamak i\u00e7in Lambda fonksiyonunuzun belirli aral\u0131klarla \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayabilir (EventBridge ile), istekler aras\u0131na gecikmeler ekleyebilir veya daha verimli sorgular yazabilirsiniz. X'in geli\u015ftirici dok\u00fcmantasyonunu d\u00fczenli olarak kontrol etmek, limitler hakk\u0131nda g\u00fcncel bilgi edinmek i\u00e7in \u00f6nemlidir.<\/p>\n","protected":false},"excerpt":{"rendered":"AWS Lambda, S3 ve DynamoDB ile Sunucusuz Bir X (Twitter) Al\u0131nt\u0131 Botu \u0130n\u015fa Etmek\nG\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda, sosyal medya platformlar\u0131ndan de\u011ferli&#8230;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1406],"tags":[],"class_list":{"0":"post-39339","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-aws","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>AWS Lambda, S3 ve DynamoDB ile Sunucusuz Bir X (Twitter) Al\u0131nt\u0131 Botu \u0130n\u015fa Etmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"AWS Lambda, S3 ve DynamoDB ile Sunucusuz Bir X (Twitter) Al\u0131nt\u0131 Botu \u0130n\u015fa Etmek\" \/>\n<meta property=\"og:description\" content=\"AWS Lambda, S3 ve DynamoDB ile Sunucusuz Bir X (Twitter) Al\u0131nt\u0131 Botu \u0130n\u015fa Etmek G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda, sosyal medya platformlar\u0131ndan de\u011ferli...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-19T05:30:46+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"AWS Lambda, S3 ve DynamoDB ile Sunucusuz Bir X (Twitter) Al\u0131nt\u0131 Botu \u0130n\u015fa Etmek\",\"datePublished\":\"2026-02-19T05:30:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/\"},\"wordCount\":2448,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"AWS\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/\",\"name\":\"AWS Lambda, S3 ve DynamoDB ile Sunucusuz Bir X (Twitter) Al\u0131nt\u0131 Botu \u0130n\u015fa Etmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-19T05:30:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AWS Lambda, S3 ve DynamoDB ile Sunucusuz Bir X (Twitter) Al\u0131nt\u0131 Botu \u0130n\u015fa Etmek\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"AWS Lambda, S3 ve DynamoDB ile Sunucusuz Bir X (Twitter) Al\u0131nt\u0131 Botu \u0130n\u015fa Etmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/","og_locale":"tr_TR","og_type":"article","og_title":"AWS Lambda, S3 ve DynamoDB ile Sunucusuz Bir X (Twitter) Al\u0131nt\u0131 Botu \u0130n\u015fa Etmek","og_description":"AWS Lambda, S3 ve DynamoDB ile Sunucusuz Bir X (Twitter) Al\u0131nt\u0131 Botu \u0130n\u015fa Etmek G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda, sosyal medya platformlar\u0131ndan de\u011ferli...","og_url":"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-19T05:30:46+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"AWS Lambda, S3 ve DynamoDB ile Sunucusuz Bir X (Twitter) Al\u0131nt\u0131 Botu \u0130n\u015fa Etmek","datePublished":"2026-02-19T05:30:46+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/"},"wordCount":2448,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["AWS"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/","url":"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/","name":"AWS Lambda, S3 ve DynamoDB ile Sunucusuz Bir X (Twitter) Al\u0131nt\u0131 Botu \u0130n\u015fa Etmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-19T05:30:46+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/aws-lambda-s3-ve-dynamodb-ile-sunucusuz-bir-x-twitter-alinti-botu-insa-etmek\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"AWS Lambda, S3 ve DynamoDB ile Sunucusuz Bir X (Twitter) Al\u0131nt\u0131 Botu \u0130n\u015fa Etmek"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39339","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=39339"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39339\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39339"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39339"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39339"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}