Hướng dẫn aws lambda write excel to s3 - aws lambda viết excel vào s3

Các lớp AWS Lambda lần đầu tiên được giới thiệu vào cuối năm 2018 và là một cách dễ dàng để cho phép các hàm Lambda của bạn truy cập vào các thư viện mã bên ngoài, dữ liệu, tệp cấu hình hoặc các loại thông tin khác. Hữu ích, một khi một lớp được tạo, nội dung của nó & nbsp; có thể được chia sẻ giữa các hàm Lambda khác nhau. & Nbsp;

Để minh họa cách sử dụng các lớp, chúng tôi sẽ phát triển một số mã lambda sẽ sử dụng thư viện gấu trúc phổ biến để đọc một tệp excel trên S3 và viết lại cho S3 dưới dạng tệp CSV. & NBSP; & NBSP;

Bộ dữ liệu đầu vào của chúng tôi là một sổ làm việc Excel có chứa thông tin xe cơ giới. Nó có khoảng 48.000 hồ sơ trong tổng số và một vài hồ sơ đầu tiên của nó trông giống như & nbsp; điều này:-& nbsp;

Row#	Manufacturer	Model	Series	Trim Level	Spec Level Description	Enhanced Vehicle Description	ABI Code	Nominal Start Year	Production End Year	Variant Start	Variant End	Retail Price	Key Features Std	Key Features Opt	Variant Code
1	Alfa Romeo	4C	1			4C TBi 237bhp 2 Door Coupe Petrol Sequential Automatic 2WD	01057139	2014	2018	2016	2016.75	42853.73	"[{""Exterior Lighting Systems"" : [""Headlights - LED""]}, {""Safety Systems"" : [""Tyre Pressure Monitoring""]}]"	"[{""ADAS"" : [""Parking Assist Sensors""]}]"	TVC00060009
2	Alfa Romeo	4C	1			4C TBi 237bhp 2 Door Coupe Petrol Sequential Automatic 2WD	01057139	2014	2018	2017		42853.73	"[{""Exterior Lighting Systems"" : [""Headlights - LED"",""Rear Lamps - LED""]}, {""Safety Systems"" : [""Tyre Pressure Monitoring""]}]"	"[{""ADAS"" : [""Parking Assist Sensors""]}]"	TVC00060010
3	Alfa Romeo	4C Spider	1			4C Spider TBi 237bhp 2 Door Cabriolet Petrol Sequential Automatic 2WD	01057181	2015	2018	2016	2016.75	48687.06	"[{""Safety Systems"" : [""Tyre Pressure Monitoring""]}]"	"[{""ADAS"" : [""Parking Assist Sensors""]}, {""Exterior Lighting Systems"" : [""Headlights - LED""]}]"	TVC00000483
4	Alfa Romeo	4C Spider	1			4C Spider TBi 237bhp 2 Door Cabriolet Petrol Sequential Automatic 2WD	01057181	2015	2018	2017		48687.06	"[{""Exterior Lighting Systems"" : [""Rear Lamps - LED""]}, {""Safety Systems"" : [""Tyre Pressure Monitoring""]}]"	"[{""ADAS"" : [""Parking Assist Sensors""]}, {""Exterior Lighting Systems"" : [""Headlights - LED""]}]"	TVC00068400
5	Alfa Romeo	4C Spider	1	50th Anniversary		4C Spider 50th Anniversary TBi 237bhp 2 Door Cabriolet Petrol Sequential Automatic 2WD	01057184	2015	2018	2016	2016.75	55353.73	"[{""ADAS"" : [""Parking Assist Sensors""]}, {""Safety Systems"" : [""Tyre Pressure Monitoring""]}]"		TVC00000486
6	Alfa Romeo	4C Spider	1	50th Anniversary		4C Spider 50th Anniversary TBi 237bhp 2 Door Cabriolet Petrol Sequential Automatic 2WD	01057184	2015	2018	2017		55353.73	"[{""ADAS"" : [""Parking Assist Sensors""]}, {""Exterior Lighting Systems"" : [""Rear Lamps - LED""]}, {""Safety Systems"" : [""Tyre Pressure Monitoring""]}]"	"[{""Exterior Lighting Systems"" : [""Headlights - LED""]}]"	TVC00070721
7	Alfa Romeo	Giulia	2			Giulia 197bhp 4 Door Saloon Petrol Automatic 2WD	01057215	2016		2017		24149.56	"[{""ADAS"" : [""Autonomous Emergency Braking"",""Collision Avoidance Radar"",""Lane Departure Warning"",""Parking Assist Sensors""]}, {""Exterior Lighting Systems"" : [""Rear Lamps - LED""]}, {""Safety Systems"" : [""Tyre Pressure Monitoring""]}]"	"[{""ADAS"" : [""Rear Cross Traffic Alert"",""Rear Facing Camera"",""Visual Parking Display""]}, {""Exterior Lighting Systems"" : [""Headlights - Forward Adaptive""]}, {""Mirror"" : [""Blind Spot Assistant""]}, {""Security Systems"" : [""Keyless Entry System""]}]"	TVC00000517

Sao chép bất kỳ tệp Excel đầu vào nào mà bạn sẽ sử dụng đến một vị trí phù hợp trên S3 & NBSP;

Một lớp lambda chỉ là một tệp định dạng lưu trữ zip, vì vậy để sử dụng một lớp mà chúng tôi sẽ có & nbsp; đến:-& nbsp;

  • Gói tất cả các thư viện bên ngoài chúng ta cần vào tệp lưu trữ zip & nbsp;
  • Tải ZIP lên một vị trí có thể đọc được trong S3 & NBSP; & NBSP;
  • Tạo lớp Lambda & nbsp; và cho Lambda biết về nó để nó có thể sử dụng mã mà nó chứa. & Nbsp;
  • Viết mã Lambda để đọc tệp XL đầu vào của chúng tôi và viết nó dưới dạng CSV & NBSP;

Bước 1 - Gói tất cả các thư viện bên ngoài mà chúng ta cần vào tệp lưu trữ zip & nbsp;

Vì Lambda chạy theo môi trường Unix, tôi khuyên bạn nên thực hiện bước này trong môi trường Unix nếu có thể. Don lồng có một? - Trên thực tế, nếu bạn có một tài khoản với AWS thì bạn gần như chắc chắn làm được. Một thời gian trở lại AWS đã giới thiệu một dịch vụ mới có tên & nbsp; CloudShell. & Nbsp; CloudShell & nbsp; là miễn phí & nbsp; dịch vụ & nbsp; mà & nbsp; cho phép bạn truy cập vào vỏ Unix ngay trên màn hình chính của bảng điều khiển. Nó đi kèm với 1 GB dung lượng lưu trữ và bất kỳ tệp nào, v.v. mà bạn tạo trong thư mục nhà của bạn vẫn tồn tại. & Nbsp; & nbsp; CloudShell & nbsp; ; vv ... & nbsp; Nếu bạn cần một cái gì đó chưa có trong môi trường CloudShell ở đó, bạn luôn có thể cài đặt những gì bạn cần. Lưu ý rằng & nbsp; CloudShell & nbsp; chỉ có sẵn ở một số vùng AWS nhất định, vì vậy hãy đảm bảo bạn chuyển sang một khu vực có nó. Để bắt đầu với & nbsp; CloudShell & nbsp; tìm một biểu tượng nhỏ ở bên trái tên người dùng của bạn gần góc trên bên phải của bảng điều khiển. Có vẻ như thế này: & nbsp; & nbsp; & nbsp;

Nếu bạn không thấy điều này thì bạn không ở trong khu vực hỗ trợ CloudShell, vì vậy hãy chuyển sang một khu vực. Có thể bắt đầu gõ các lệnh Unix. & NBSP; & nbsp; Cho dù bạn đang sử dụng CloudShell hay môi trường Unix của riêng bạn, các bước bạn cần thực hiện là như nhau.

Điều đầu tiên chúng ta cần làm là tạo một cấu trúc thư mục phù hợp trong đó các thư viện bên ngoài của chúng ta sẽ được đặt. Tùy thuộc vào phiên bản nào & nbsp; của Python, Lambda của bạn đang chạy theo, từ loại thư mục nhà của bạn trong & nbsp; sau:-& nbsp;

$ & nbsp; mkdir & nbsp;

Rõ ràng, & nbsp; bạn sẽ thay đổi python3.7 & nbsp; part & nbsp; ở trên để phù hợp với phiên bản Python của riêng bạn.

Khi bạn quyết định những gói nào bạn cần, hãy sử dụng PIP để cài đặt chúng vào thư mục trang web trang web. Trong trường hợp của tôi, tôi cần tất cả những điều sau đây -& nbsp; gandas, & nbsp; xlrd, & nbsp; fsspec, sfs3 và openpyxl. & Nbsp; Ngoài ra, & nbsp; về sự phụ thuộc của các thư viện tôi đang sử dụng.

$ cd 

$ sudo yum install gcc-c++ 


$ pip install --target build/python/lib/python3.7/site-packages pandas xlrd fsspec sfs3 openpyxl 

Khi tất cả các gói được cài đặt, bạn & nbsp; cần & nbs

$ cd build
  
$ zip -r pandas_layer.zip .

Bước 2 - Tải ZIP lên S3 & NBSP; 

Khi tất cả những điều trên được thực hiện, bạn nên có một tệp zip trong thư mục bản dựng của mình và bạn chỉ cần sao chép nó vào một vị trí có thể đọc được trên S3. Tôi đã sử dụng AWS CLI trong & nbsp; CloudShell & nbsp; cho điều đó. & Nbsp;

$ aws s3 cp pandas_layer.zip s3://my_bucket/my_folder/pandas_layer.zip 

Bước 3 - Tạo lớp Lambda và cho Lambda biết về nó & nbsp;

Phần khó của quá trình đã kết thúc. Tiếp theo đi đến màn hình chính Lambda và nhấp vào liên kết các lớp trên & nbsp; bên trái & nbsp; thanh điều hướng. Tiếp theo, nhấp vào nút Tạo lớp màu cam gần & nbsp; top & nbsp; phải của màn hình và bạn nên được trình bày với màn hình sau. & Nbsp; Layers link on the left-hand navigation bar. Next, click on the Create Layer orange button near the top right of the screen and you should be presented with the following screen. 

Gõ tên & nbsp; ví dụ: tập tin zip lớp & nbsp; ví dụ: s3: //mybucket/myfolder/pandas-layer.zip. Trong hộp đầu vào tương thích & nbsp; RunTimes, chọn phiên bản cụ thể & nbsp; python & nbsp; phiên bản này sẽ được chạy theo & nbsp; ví dụ: nbsp; python & nbsp; 3.7. Bây giờ bạn có thể & nbsp; nhấp & nbsp; nút tạo & nbsp;Upload a file from Amazon S3 and an input box will appear where you can type in the full S3 path of your layer zip file e.g s3://mybucket/myfolder/pandas-layer.zip. In the compatible runtimes input box, choose the specific Python version this will be run under e.g Python 3.7. Now you can click the Create button 

Từ đây, hãy đến trang chủ Lambda một lần nữa và nhấp vào liên kết các chức năng trên & nbsp; bên trái & nbsp; bên. Bây giờ, nhấp vào nút Tạo chức năng màu cam ở phía trên bên phải của trang được trình bày. & NBSP;Functions link on the left-hand side. Now, click on the Create Function orange button at the top right-hand side of the page that is presented. 

Trên màn hình Hàm tạo Chọn tác giả từ đầu, nhập tên chức năng Lambda, ví dụ như thử nghiệm lớp và môi trường thời gian chạy & nbsp; ;Author from scratch, enter the lambda function name e.g layer-test and the run-time environment e.g Python 3.7 and click the Create Function orange button near the bottom right side of the page. 

Nếu tất cả đều tốt, bạn sẽ thấy một màn hình trông như thế này: & nbsp;

No alt text provided for this
image

Bước tiếp theo là thêm lớp của chúng tôi, vì vậy nếu bạn cuộn xuống dưới cùng của trang, bạn sẽ thấy một phần lớp. Nhấp vào nút Thêm lớp và bạn sẽ thấy màn hình này. & NBSP;Layers section. Click on the Add a Layer button and you’ll see this screen. 

Chọn các lớp tùy chỉnh và nhấp vào hộp thả xuống các lớp tùy chỉnh và bạn sẽ thấy lớp được liên kết với tệp zip bạn đã tạo trước đó và tải lên S3, vì vậy hãy chọn cái này và nhập phiên bản vào hộp sau đó sẽ xuất hiện BE Phiên bản 1. Bây giờ nhấn nút Thêm Orange. & NBSP; Custom Layers and click on the Custom layers drop down box and you should see the layer associated with the ZIP file you previously created and uploaded to S3, so choose this and enter the version into the box that will then appear –it will probably just be version 1. Now hit the orange Add button. 

Bước 4 - Mã Lambda của chúng tôi & NBSP;

Điều duy nhất còn lại làm bây giờ là viết mã Lambda của chúng tôi và đặt một vài tham số cấu hình thời gian chạy. Phần mã khá dễ dàng cho trường hợp của chúng tôi. Chỉ cần sử dụng gấu trúc để đọc & nbsp; xl & nbsp; file & nbsp; nội dung từ s3 và viết & nbsp; nội dung & nbsp; back & nbsp; một lần nữa & nbsp; to & nbsp; s3 dưới dạng tệp CSV. Ở đây đi. & Nbsp;

import pandas as pd 
import xlrd 
import openpyxl 
from io import StringIO  
import boto3 

def lambda_handler(event,context): 

    # Set some display options for the dataframe 

    pd.set_option('display.max_rows', 10) 
    pd.set_option('display.max_columns', 10)    
    pd.set_option('display.width', 1000) 

     

# Open the input XL file 
# Initially I had the engine as xlrd but the version I was using  
# couldn’t open an XL with a .xlsx file extension so switched  
# to using openpyxl 

    df=pd.read_excel('s3://my-bucket/XL/test-xls.xlsx', engine='openpyxl')    

    # Show the first 10 records 

    print(df)   

    bucket = 'my-bucket'   

    csv_buffer = StringIO() 

    df.to_csv(csv_buffer) 

    s3_resource = boto3.resource('s3') 

# write the data back as a CSV 

    s3_resource.Object(bucket,'XL/test-csv.csv').put(Body=csv_buffer.getvalue()) 

& nbsp; tất cả những gì còn lại để làm là quyết định lượng tối đa thời gian bạn muốn Lambda chạy và lượng bộ nhớ tối đa mà nó có thể sử dụng. Tôi sẽ để điều đó cho bạn. & NBSP;

Nếu tất cả các hoạt động như mong đợi, bạn sẽ thấy một phiên bản CSV mới sáng bóng của dữ liệu Excel của bạn trong nhóm/thư mục S3 của bạn. Ảnh chụp màn hình dưới đây cho thấy đầu ra của Lambda Run & NBSP của tôi; trên sổ làm việc trên xe đầu vào của tôi.

Đó là tất cả cho tôi bây giờ. Tôi đã chỉ ra cách bạn có thể sử dụng các lớp AWS Lambda để kích hoạt mã AWS Lambda sử dụng các thư viện bên ngoài như gấu trúc. & NBSP; & nbsp;

Thông tin thêm về các chủ đề trên có thể được tìm thấy bằng cách sử dụng các liên kết AWS & NBSP; liên kết sau:-& nbsp;

https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html 

https://docs.aws.amazon.com/lambda/index.html 

https://docs.aws.amazon.com/lambda/latest/dg/invocation-layers.html 

Nếu bạn tìm thấy bài viết này & nbsp; hữu ích, & nbsp; vui lòng thích và chia sẻ lại. & Nbsp;

Hàm Lambda có thể viết cho S3 không?

Vâng, nó là hoàn toàn có thể! Đảm bảo rằng bạn cung cấp cho chức năng Lambda của mình các quyền ghi cần thiết cho đường dẫn / đường chính của S3 đích bằng cách chọn hoặc cập nhật vai trò IAM của bạn thực hiện theo LambDA. Đọc thêm: AWS JavaScript SDK.! Make sure that you give your Lambda function the required write permissions to the target s3 bucket / key path by selecting or updating the IAM Role your lambda executes under. Further reading: AWS JavaScript SDK.

Chúng ta có thể tải lên tệp excel trong thùng s3 không?

Khách hàng tải lên dữ liệu Excel của họ, cột bản đồ, xác thực dữ liệu và bạn đã sẵn sàng sử dụng dữ liệu trong thùng AWS S3 của mình..

Lambda có thể tải lên tệp lên S3 không?

Giới thiệu về điện toán đám mây trên AWS cho người mới bắt đầu [2022] Dịch vụ Amazon S3 được sử dụng để lưu trữ tệp, nơi bạn có thể tải lên hoặc xóa các tệp.Chúng ta có thể kích hoạt AWS Lambda trên S3 khi có bất kỳ tải lên tệp nào trong các thùng S3.AWS Lambda có chức năng xử lý hoạt động như một điểm khởi đầu cho chức năng AWS Lambda.We can trigger AWS Lambda on S3 when there are any file uploads in S3 buckets. AWS Lambda has a handler function which acts as a start point for AWS Lambda function.

Làm cách nào để đưa chức năng Lambda cho thùng S3?

Resolution..
Thực hiện theo các bước trong việc tạo vai trò thực thi trong bảng điều khiển IAM ..
Từ danh sách các vai trò IAM, chọn vai trò mà bạn vừa tạo ..
Trong tab Quyền, chọn Thêm Chính sách nội tuyến ..
Chọn tab JSON ..
Nhập chính sách IAM dựa trên tài nguyên cấp quyền truy cập vào thùng S3 của bạn.....
Chọn Chính sách đánh giá ..