Amazon Simple Storage Service (S3) یک سرویس ذخیره سازی شی بسیار مقیاس پذیر، بادوام و در دسترس است.

این برای ذخیره هر مقدار داده، در هر زمان و از هر نقطه در وب طراحی شده است.

S3 یک جزء کلیدی از پلتفرم ابری خدمات وب آمازون (AWS) است.

AWS Lambda یک سرویس محاسباتی بدون سرور است که به شما امکان می دهد کد را بدون تهیه یا مدیریت سرور اجرا کنید.

لامبدا کد شما را فقط در صورت نیاز اجرا می کند و به صورت خودکار مقیاس می شود، از چند درخواست در روز به هزاران درخواست در ثانیه.

شما فقط برای زمان محاسبه‌ای که مصرف می‌کنید صورت‌حساب دریافت می‌کنید – زمانی که کد شما اجرا نمی‌شود هزینه‌ای دریافت نمی‌شود.

S3 و Lambda دو مورد از محبوب ترین سرویس های AWS هستند. آنها را می توان با هم برای ایجاد برنامه های کاربردی قوی، مقیاس پذیر و مقرون به صرفه استفاده کرد.

S3 می تواند برای ذخیره داده هایی استفاده شود که توسط توابع Lambda پردازش می شوند.

معماری رویداد محور لامبدا به طور یکپارچه با رویدادهای S3 ارتباط برقرار می کند و به توسعه دهندگان این امکان را می دهد که بدون زحمت عملکردهای بدون سرور را در پاسخ به تغییرات درون سطل های S3 فعال کنند. این به شما امکان می‌دهد برنامه‌هایی بسازید که به‌طور خودکار داده‌ها را هنگام اضافه شدن به S3 پردازش می‌کنند.

این آموزش به شما یاد می دهد که چگونه یک فایل CSV را از یک سطل S3 در AWS Lambda با استفاده از requests کتابخانه یا boto3 کتابخانه

نحوه ایجاد یک نقش اجرایی Lambda با مجوزهای خواندن S3

برای اینکه سرویس Lambda بتواند فایل ها را از سطل S3 بخواند، باید یک نقش اجرای لامبدا ایجاد کنید که دارای مجوزهای خواندن S3 باشد.

برای ایجاد یک نقش اجرای لامبدا:

  1. وارد کنسول AWS شوید و به کنسول مدیریت هویت و دسترسی (IAM) بروید
  2. روی Roles و سپس Create role کلیک کنید:
تصویر-52
نقش ایجاد کنید

3. همانطور که در تصویر زیر نشان داده شده است، سرویس AWS را به عنوان یک نهاد مورد اعتماد و Lambda را به عنوان Use Case انتخاب کنید:

تصویر-54
Trusted Entity و Use case را انتخاب کنید

4. خط مشی AmazonS3ReadOnlyAccess را برای دسترسی S3 فقط خواندنی اضافه کنید:

تصویر-56
اضافه کردن مجوزها

5. نام و شرح نقش را بدهید و خط مشی های پیوست را بررسی کنید. در نهایت روی Create role کلیک کنید تا نقش IAM مانند تصویر زیر ایجاد شود:

تصویر-58
نقش آفرینی

برای پیوست کردن نقش به تابع لامبدا:

  1. اگر تابع Lambda در کنسول Lambda از قبل موجود است، به تابع Lambda بروید یا اگر نیاز به ایجاد یک تابع جدید دارید، یک تابع Lambda ایجاد کنید.
  2. در قسمت Execution role روی Edit کلیک کنید
  3. نقش IAM را که ایجاد کردید انتخاب کنید
  4. ذخیره کنید تا نقش را به تابع Lambda خود متصل کنید:
پیشنهاد می‌کنیم بخوانید:  خطای «AttributeError: شی ماژول فاقد ویژگی «Serial» در پایتون است را برطرف کنید
تصویر-59
پیوست کردن نقش به تابع لامبدا

حالا بیایید ببینیم چگونه یک فایل CSV را بخوانیم.

نحوه خواندن یک فایل CSV از سطل S3 با استفاده از کتابخانه درخواست ها در AWS Lambda

کتابخانه Requests یک ماژول محبوب پایتون برای ایجاد درخواست های HTTP و تعامل با سرویس های وب است.

این فرآیند ارسال درخواست های HTTP، رسیدگی به پاسخ ها و مدیریت جنبه های مختلف ارتباطات وب را ساده می کند.

با استفاده از API آسان و شهودی، Requests به توسعه دهندگان اجازه ارسال می دهد GET، POST، PUT، DELETEو سایر درخواست های HTTP با حداقل کد. این آن را به ابزاری ارزشمند برای کارهایی مانند واکشی داده های وب، تعامل با API های RESTful و موارد دیگر تبدیل می کند.

می توانید از کتابخانه درخواست ها برای ارسال یک استفاده کنید GET درخواست و خواندن یک فایل CSV از سطل S3.

از وقتی که GET درخواست تکمیل شده است، پاسخی با کدهای پاسخ مناسب دریافت خواهید کرد.

اگر درخواست دریافت موفقیت آمیز باشد، کد وضعیت را برمی گرداند 200. شما می توانید داده ها را از response.text.

کد زیر نحوه ارسال را نشان می دهد GET درخواست کنید و پاسخ را بخوانید:

response = requests.get(url)

if response.status_code == 200:
    # Parse the CSV data from the response content
    csv_data = response.text

در مرحله بعد، از CSV خواننده برای خواندن محتوای CSV از csv_data و برای دسترسی به هر ردیف از فایل CSV روی شی خواننده تکرار کنید:

    reader = csv.reader(csv_data.splitlines())
    
    for row in reader:
        
        print(row)

کد زیر برنامه کاملی را برای دریافت فایل CSV از S3 با استفاده از کتابخانه درخواست ها نشان می دهد:

import requests

import csv

# URL of the CSV file
url = "https://mrcloudgurudemo.s3.us-east-2.amazonaws.com/sample_csv.csv"

try:
    # Send an HTTP GET request to the URL
    response = requests.get(url)
    
    # Check if the request was successful (HTTP status code 200)
    if response.status_code == 200:
        # Parse the CSV data from the response content
        csv_data = response.text
        
        # You can now process the CSV data as needed
        # For example, you can use the csv.reader to read the data
        reader = csv.reader(csv_data.splitlines())
        
        # Iterate through the rows in the CSV
        for row in reader:
            # Process each row as needed
            print(row)
    else:
        print(f"Failed to fetch data. Status code: {response.status_code}")

except requests.exceptions.RequestException as e:
    print(f"Error: {e}")

خروجی:

    ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species']
    ['5.1', '3.5', '1.4', '0.2', 'Iris-setosa']
    ['4.9', '3', '1.4', '0.2', 'Iris-setosa']
    ['4.7', '3.2', '1.3', '0.2', 'Iris-setosa']
    ['4.6', '3.1', '1.5', '0.2', 'Iris-setosa']
    ['5', '3.6', '1.4', '0.2', 'Iris-setosa']

توجه داشته باشید که اگر از requests کتابخانه نسخه 2.30.0 در AWS lambda، ممکن است هنگامی که هر یک از کتابخانه های وابسته سعی در وارد کردن آن دارند، با خطای Cannot Import Name DEFAULT_CIPHERS از urllib3.util.ssl_ مواجه شوید. default_ciphers متغیر از urllib3.

می توانید این خطا را با پایین آوردن کتابخانه درخواست ها به 2.29.0 حل کنید.

پیشنهاد می‌کنیم بخوانید:  روش کار با SQLite در پایتون - کتاب راهنمای مبتدیان

نحوه خواندن یک فایل CSV با استفاده از کلاینت Boto3 get_Object() روش در AWS Lambda

گزینه دوم برای خواندن یک فایل CSV استفاده از کتابخانه Boto3 است.

Boto3 AWS SDK برای پایتون است. این یک API شی گرا و همچنین دسترسی سطح پایین به خدمات AWS را فراهم می کند.

Boto3 ایجاد، پیکربندی و مدیریت منابع AWS را از برنامه های پایتون شما آسان می کند.

به عنوان مثال، می توانید محتوای یک فایل را از یک سطل S3 به صورت برنامه ریزی شده بخوانید.

توجه داشته باشید که برای تعامل با سرویس AWS با استفاده از Boto3، باید اعتبارنامه‌های امنیتی را پیکربندی کنید تا از خطای عدم شناسایی اعتبارنامه جلوگیری کنید.

می توانید اعتبارنامه های امنیتی را با استفاده از تنظیمات پیکربندی کنید aws configure فرمان

برای خواندن یک فایل CSV با استفاده از روش Boto3 Client get_Object() در AWS Lambda ابتدا کلاینت Boto3 را ایجاد کنید:

s3 = boto3.client('s3') 

سپس، را فراخوانی کنید get_object() از کلاینت Boto3 استفاده کنید و نام سطل و نام شی را ارسال کنید:

response = s3.get_object(Bucket=bucket_name, Key=file_key)

اکنون بدن پاسخ را با استفاده از آن بخوانید response['Body'].read():

csv_content = response['Body'].read().decode('utf-8')

از کتابخانه پانداها استفاده کنید read_csv() روشی برای تجزیه متن پاسخ به عنوان محتوای CSV و ایجاد یک چارچوب داده پاندا از آن. همچنین می توانید پنج خط اول را چاپ کنید تا ببینید آیا داده ها با موفقیت خوانده شده اند یا خیر:

df = pd.read_csv(io.StringIO(csv_content))
print(df.head(5))

کد زیر برنامه کامل را برای خواندن یک فایل CSV از سطل S3 با استفاده از Boto3 نشان می دهد:

import boto3

import pandas as pd

import io

def lambda_handler(event, context):
    # Initialize the S3 client
    s3 = boto3.client('s3')

    # Specify the S3 bucket and object key of the CSV file
    bucket_name="mrcloudgurudemo"
    file_key = 'sample_csv.csv'

    try:
        # Read the CSV file from S3
        response = s3.get_object(Bucket=bucket_name, Key=file_key)
        csv_content = response['Body'].read().decode('utf-8')

        # Create a Pandas DataFrame
        df = pd.read_csv(io.StringIO(csv_content))

        # Now you have your DataFrame (df) for further processing
        # Example: Print the first 5 rows
        print(df.head(5))

        return {
            'statusCode': 200,
            'body': 'File read successfully into DataFrame.'
        }

    except Exception as e:
        return {
            'statusCode': 500,
            'body': str(e)
        }

خروجی:

sepal_length  sepal_width  petal_length  petal_width      species
0           5.1          3.5           1.4          0.2  Iris-setosa
1           4.9          3.0           1.4          0.2  Iris-setosa
2           4.7          3.2           1.3          0.2  Iris-setosa
3           4.6          3.1           1.5          0.2  Iris-setosa
4           5.0          3.6           1.4          0.2  Iris-setosa

نتیجه

در این مقاله، دو روش برای خواندن یک فایل CSV از سطل S3 در AWS Lambda یاد گرفتید: با استفاده از requests کتابخانه و Boto3 کتابخانه

هر دو روش موثر هستند و مزایای خاص خود را دارند. کتابخانه درخواست ها یک کتابخانه ساده و سبک است که استفاده از آن آسان است.

Boto3 AWS SDK رسمی پایتون است و مجموعه ای جامع از ویژگی ها و عملکردها را ارائه می دهد.

در نهایت، بهترین روش برای خواندن یک فایل CSV از S3 در AWS Lambda به نیازهای خاص شما بستگی دارد.

اگر به یک راه حل ساده و آسان برای استفاده نیاز دارید، requests کتابخانه انتخاب خوبی است

اگر به یک راه حل جامع تر و غنی تر نیاز دارید، پس Boto3 انتخاب بهتری است