از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
نحوه خواندن یک فایل CSV از سطل S3 در AWS Lambda – راهنمای قطعی
سرفصلهای مطلب
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 باشد.
برای ایجاد یک نقش اجرای لامبدا:
- وارد کنسول AWS شوید و به کنسول مدیریت هویت و دسترسی (IAM) بروید
- روی Roles و سپس Create role کلیک کنید:
3. همانطور که در تصویر زیر نشان داده شده است، سرویس AWS را به عنوان یک نهاد مورد اعتماد و Lambda را به عنوان Use Case انتخاب کنید:
4. خط مشی AmazonS3ReadOnlyAccess را برای دسترسی S3 فقط خواندنی اضافه کنید:
5. نام و شرح نقش را بدهید و خط مشی های پیوست را بررسی کنید. در نهایت روی Create role کلیک کنید تا نقش IAM مانند تصویر زیر ایجاد شود:
برای پیوست کردن نقش به تابع لامبدا:
- اگر تابع Lambda در کنسول Lambda از قبل موجود است، به تابع Lambda بروید یا اگر نیاز به ایجاد یک تابع جدید دارید، یک تابع Lambda ایجاد کنید.
- در قسمت Execution role روی Edit کلیک کنید
- نقش IAM را که ایجاد کردید انتخاب کنید
- ذخیره کنید تا نقش را به تابع Lambda خود متصل کنید:
حالا بیایید ببینیم چگونه یک فایل 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 حل کنید.
نحوه خواندن یک فایل 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
انتخاب بهتری است
منتشر شده در 1402-12-26 15:46:05