Các ví dụ về AWS SDK Python

AWS định nghĩa boto3 là ​​Bộ công cụ phát triển phần mềm Python để tạo, định cấu hình và quản lý các dịch vụ AWS. Trong bài viết này, chúng ta sẽ xem cách boto3 hoạt động và cách nó có thể giúp chúng ta tương tác với các dịch vụ AWS khác nhau

Ảnh của Kindel Media từ Pexels

Boto3 dưới mui xe

Cả AWS CLI và boto3 đều được xây dựng dựa trên botocore — một thư viện Python cấp thấp xử lý mọi thứ cần thiết để gửi yêu cầu API tới AWS và nhận phản hồi

botocore

  • xử lý phiên, thông tin đăng nhập và cấu hình,
  • cung cấp quyền truy cập chi tiết vào tất cả các hoạt động [ví dụ:. ListObjects, DeleteObject] trong một dịch vụ cụ thể [ví dụ:. S3],
  • đảm nhiệm việc tuần tự hóa các tham số đầu vào, ký yêu cầu và giải tuần tự hóa dữ liệu phản hồi vào từ điển Python,
  • cung cấp ứng dụng khách cấp thấp và trừu tượng hóa tài nguyên cấp cao để tương tác với các dịch vụ AWS từ Python

Bạn có thể coi botocore như một gói cho phép chúng ta quên đi các thông số kỹ thuật JSON cơ bản và sử dụng Python [boto3] khi tương tác với API AWS.  

Khách hàng vs. Tài nguyên

Trong hầu hết các trường hợp, chúng ta nên sử dụng boto3 thay vì botocore. Sử dụng boto3, chúng ta có thể chọn tương tác với các máy khách cấp thấp hơn hoặc trừu tượng hóa tài nguyên hướng đối tượng cấp cao hơn. Hình ảnh dưới đây cho thấy mối quan hệ giữa những trừu tượng đó.  

Mức độ trừu tượng trong boto3, aws-cli và botocore dựa trên S3 làm ví dụ — ảnh của tác giả

Để hiểu sự khác biệt giữa các thành phần đó, hãy xem một ví dụ đơn giản sẽ chứng minh sự khác biệt giữa máy khách S3 và tài nguyên S3. Chúng tôi muốn liệt kê tất cả các đối tượng từ thư mục hình ảnh, tôi. e. , tất cả các đối tượng có prefix images/.

Bằng cách nhìn vào ví dụ đơn giản này, bạn có thể nhận ra sự khác biệt

  • với một ứng dụng khách, bạn tương tác trực tiếp với từ điển phản hồi từ phản hồi API được giải tuần tự hóa,
  • ngược lại, với tài nguyên, bạn tương tác với các lớp và đối tượng Python tiêu chuẩn thay vì từ điển phản hồi thô

Bạn có thể điều tra chức năng của các đối tượng tài nguyên bằng cách sử dụng help[]dir[]

Nhìn chung, sự trừu tượng hóa tài nguyên dẫn đến mã dễ đọc hơn [tương tác với các đối tượng Python thay vì phân tích cú pháp từ điển phản hồi]. Nó cũng xử lý nhiều chi tiết cấp thấp như phân trang. Các phương thức tài nguyên thường trả về một trình tạo để bạn có thể lười biếng lặp lại một số lượng lớn các đối tượng được trả về mà không phải lo lắng về việc phân trang hoặc hết bộ nhớ

Sự thật thú vị. Cả mã máy khách và mã tài nguyên đều được tạo động dựa trên các mô hình JSON mô tả các API AWS khác nhau. Đối với máy khách, AWS sử dụng mô tả dịch vụ JSON và đối với tài nguyên, mô tả tài nguyên làm cơ sở cho mã được tạo tự động. Điều này hỗ trợ cập nhật nhanh hơn và cung cấp giao diện nhất quán trên tất cả các cách bạn có thể tương tác với AWS [CLI, boto3, bảng điều khiển quản lý]. Sự khác biệt thực sự duy nhất giữa mô tả dịch vụ JSON và mã boto3 cuối cùng là các thao tác PascalCase được chuyển đổi thành ký hiệu solid_case Pythonic hơn

Tại sao tài nguyên thường dễ sử dụng hơn nhiều so với máy khách?

Hãy tưởng tượng rằng bạn cần liệt kê hàng nghìn đối tượng từ một nhóm S3. Chúng tôi có thể thử cách tiếp cận tương tự mà chúng tôi đã sử dụng trong ví dụ mã ban đầu. Vấn đề duy nhất là phương pháp s3_client.list_objects_v2[] sẽ cho phép chúng tôi chỉ liệt kê tối đa một nghìn đối tượng. Để giải quyết vấn đề này, chúng ta có thể tận dụng phân trang

Mặc dù mã của trình phân trang đủ dễ, nhưng việc trừu tượng hóa tài nguyên hoàn thành công việc chỉ trong hai dòng mã

Tại sao bạn vẫn sẽ sử dụng khách hàng cho một số công việc của mình?

Bất chấp những lợi ích của việc trừu tượng hóa tài nguyên, các máy khách cung cấp nhiều chức năng hơn, vì chúng ánh xạ gần như 1. 1 với API dịch vụ AWS. Do đó, rất có thể bạn sẽ sử dụng cả ứng dụng khách và tài nguyên, tùy thuộc vào trường hợp sử dụng cụ thể

Ngoài sự khác biệt về chức năng, tài nguyên không an toàn theo luồng, vì vậy nếu bạn định sử dụng đa luồng hoặc đa xử lý để tăng tốc các hoạt động của AWS chẳng hạn như tải tệp lên, bạn nên sử dụng ứng dụng khách thay vì tài nguyên. Thêm về điều đó ở đây

Ghi chú. Có một cách để truy cập các phương thức máy khách trực tiếp từ một đối tượng tài nguyên. s3_resource.meta.client.some_client_method[]

Bồi bàn

Người phục vụ đang thăm dò trạng thái của một tài nguyên cụ thể cho đến khi nó đạt đến trạng thái mà bạn quan tâm. Chẳng hạn, khi bạn tạo một phiên bản EC2 bằng boto3, bạn có thể muốn đợi cho đến khi phiên bản đạt đến trạng thái “Đang chạy” cho đến khi bạn có thể làm điều gì đó với phiên bản EC2 này. Đây là một mã mẫu cho thấy ví dụ cụ thể này

boto3. sử dụng người phục vụ để thăm dò phiên bản EC2 mới cho trạng thái đang chạy— hình ảnh của tác giả

Lưu ý rằng ImageId từ ví dụ trên là khác nhau đối với từng khu vực AWS. Bạn có thể tìm ID của AMI bằng cách làm theo hướng dẫn "Khởi chạy phiên bản" trong bảng điều khiển AWS

Tìm ID AMI — hình ảnh của tác giả

Một ví dụ phổ biến hơn về người phục vụ — đợi cho đến khi một đối tượng S3 cụ thể đến trong S3

Hãy Trung thực. Bạn có thường xuyên tung ra các phiên bản mới không? . Vì vậy, hãy xây dựng một ví dụ bồi bàn thực tế hơn. Hãy tưởng tượng rằng quy trình ETL của bạn đang đợi cho đến khi một tệp cụ thể đến trong vùng lưu trữ S3. Trong ví dụ bên dưới, chúng tôi đợi cho đến khi ai đó từ bộ phận tiếp thị tải lên tệp có chi phí chiến dịch hiện tại. Mặc dù bạn có thể triển khai điều tương tự với AWS Lambda bằng cách sử dụng trình kích hoạt sự kiện S3, logic bên dưới không bị ràng buộc với Lambda và có thể chạy ở mọi nơi

Sử dụng bồi bàn trong tài nguyên S3 — ảnh của tác giả

Hoặc tương tự bằng cách sử dụng phương thức máy khách có thể định cấu hình hơn

Sử dụng người phục vụ trong máy khách S3 — ảnh của tác giả

Như bạn có thể thấy từ đoạn mã trên, sử dụng trừu tượng người phục vụ của khách hàng, chúng tôi có thể chỉ định

  • Số lần thử tối đa. chúng ta nên kiểm tra xem một đối tượng cụ thể đã đến bao nhiêu lần hay chưa — điều này sẽ ngăn quá trình xác sống và sẽ thất bại nếu đối tượng chưa đến trong khoảng thời gian mà chúng ta mong đợi nó sẽ đến,
  • Sự chậm trễ. số giây chờ đợi giữa mỗi lần thử.  

Ngay khi tệp đến S3, tập lệnh sẽ dừng chờ, điều này cho phép bạn thực hiện điều gì đó với dữ liệu mới đến này

bộ sưu tập

Bộ sưu tập cho biết một nhóm tài nguyên, chẳng hạn như nhóm đối tượng S3 trong nhóm hoặc nhóm hàng đợi SQS. Chúng cho phép chúng tôi thực hiện nhiều hành động khác nhau trên một nhóm tài nguyên AWS trong một lệnh gọi API. Bộ sưu tập có thể được sử dụng để

  • nhận tất cả các đối tượng S3 với tiền tố đối tượng cụ thể
  • lấy tất cả các đối tượng S3 với một loại nội dung cụ thể, ví dụ: để tìm tất cả các tệp CSV
  • nhận tất cả các phiên bản đối tượng S3
  • chỉ định kích thước khối của các đối tượng để lặp lại, chẳng hạn như khi kích thước trang mặc định của 1000 đối tượng là quá lớn đối với ứng dụng của bạn
  • xóa tất cả các đối tượng trong một lệnh gọi API [hãy cẩn thận về điều đó. ]

Một thao tác phổ biến hơn là xóa tất cả các đối tượng có tiền tố cụ thể

phiên. Làm cách nào để chuyển thông tin đăng nhập IAM vào mã boto3 của bạn?

Có nhiều cách để bạn có thể vượt qua các phím truy cập khi tương tác với boto3. Đây là thứ tự các địa điểm mà boto3 cố gắng tìm thông tin xác thực

#1 Được chuyển rõ ràng cho boto3.client[], boto3.resource[] hoặc boto3.Session[]

#2 Đặt làm biến môi trường

#3 Đặt làm thông tin xác thực trong tệp ~/.aws/credentials [tệp này được tạo tự động bằng cấu hình aws trong AWS CLI]

#4 Nếu bạn đính kèm các vai trò IAM với các quyền thích hợp vào tài nguyên AWS của mình, thì bạn hoàn toàn không phải chuyển thông tin đăng nhập mà chỉ định một chính sách với phạm vi quyền bắt buộc. Đây là giao diện của nó trong AWS Lambda

Điều này có nghĩa là với các vai trò IAM được gắn với các tài nguyên như hàm Lambda, bạn không cần phải chuyển hoặc định cấu hình bất kỳ khóa truy cập dài hạn nào theo cách thủ công. Thay vào đó, các vai trò IAM đang tự động tạo các khóa truy cập tạm thời, giúp quá trình này trở nên an toàn hơn.  

Nếu bạn muốn tận dụng AWS Lambda với Python và boto3 cho một trường hợp sử dụng cụ thể, hãy xem các liên kết bên dưới

  • Cách xây dựng ETL hướng sự kiện và thử nghiệm dữ liệu hướng sự kiện,
  • Cách trích xuất văn bản từ hình ảnh bằng Amazon Rekognition,
  • Cách xây dựng các dịch vụ tách rời bằng SNS, SQS và Kinesis,
  • Cách sử dụng NoSQL DynamoDB để đọc và ghi dữ liệu,
  • Cách quản lý thông tin đăng nhập bằng Secrets Manager

Một tính năng hữu ích của AWS Lambda là boto3 đã được cài đặt sẵn trong mọi môi trường thời gian chạy Python. Bằng cách này, bạn có thể chạy trực tiếp bất kỳ ví dụ nào từ bài viết này trong hàm Lambda của mình. Chỉ cần đảm bảo thêm chính sách phù hợp tương ứng với dịch vụ bạn muốn sử dụng trong vai trò IAM của Lambda

Tạo hàm trong AWS Lambda— hình ảnh của tác giả
Thử nghiệm boto3 từ AWS Lambda — hình ảnh của tác giả

Nếu dự định chạy một số chức năng Lambda trong sản xuất, bạn có thể khám phá Dashbird — một nền tảng có khả năng quan sát sẽ giúp bạn theo dõi và gỡ lỗi khối lượng công việc serverless của mình. Nó đặc biệt có giá trị để xây dựng các cảnh báo tự động về lỗi, nhóm các tài nguyên liên quan dựa trên dự án hoặc miền, cung cấp tổng quan về tất cả các tài nguyên serverless, duyệt qua nhật ký một cách tương tác và trực quan hóa các nút cổ chai hoạt động

Hiểu đầy đủ ứng dụng serverless của bạn trong vài giây

Dashbird giúp bạn giám sát các ứng dụng serverless ở mọi quy mô

bắt đầu miễn phí

Công cụ này hoàn toàn miễn phí sử dụng và chỉ mất 2 phút để thiết lập – và bạn có thể bắt đầu khám phá dữ liệu của mình ngay lập tức

Tổng quan về tất cả các tài nguyên serverless do Dashbird cung cấp — hình ảnh do Dashbird cung cấp. io

Làm cách nào để thay đổi phiên boto3 mặc định?

Boto3 giúp dễ dàng thay đổi phiên mặc định. Chẳng hạn, nếu bạn có nhiều cấu hình [chẳng hạn như một dành cho nhà phát triển và một dành cho môi trường AWS prod], bạn có thể chuyển đổi giữa các cấu hình đó bằng một dòng mã

Ngoài ra, bạn có thể đính kèm thông tin đăng nhập trực tiếp vào phiên mặc định để bạn không phải xác định chúng một cách riêng biệt cho từng khách hàng hoặc tài nguyên mới

Sự kết luận

Trong bài viết này, chúng tôi đã xem xét cách sử dụng boto3 và cách nó được xây dựng nội bộ. Chúng tôi đã kiểm tra sự khác biệt giữa khách hàng và tài nguyên và điều tra cách mỗi người trong số họ xử lý phân trang. Chúng tôi đã khám phá cách người phục vụ có thể giúp chúng tôi thăm dò trạng thái cụ thể của tài nguyên AWS trước khi tiếp tục với các phần khác trong mã của chúng tôi. Chúng tôi cũng đã xem xét cách các bộ sưu tập cho phép chúng tôi thực hiện các hành động trên nhiều đối tượng AWS. Cuối cùng, chúng tôi đã khám phá các cách khác nhau để cung cấp thông tin đăng nhập cho boto3 và cách chúng được xử lý bằng vai trò IAM và khóa truy cập dành riêng cho người dùng

SDK Python trong AWS là gì?

SDK cho Python. Đơn giản hóa việc sử dụng các dịch vụ AWS bằng cách cung cấp một bộ thư viện nhất quán và quen thuộc cho các nhà phát triển Python .

Bạn có thể sử dụng AWS với Python không?

SDK AWS dành cho Python [Boto3] cho phép bạn sử dụng mã Python để tương tác với các dịch vụ AWS như Amazon S3 . Ví dụ: bạn có thể sử dụng SDK để tạo bộ chứa Amazon S3, liệt kê các bộ chứa có sẵn của bạn, sau đó xóa bộ chứa bạn vừa tạo.

Tại sao Boto được gọi là Boto?

Boto lấy tên từ tên tiếng Bồ Đào Nha đặt cho các loại cá heo có nguồn gốc từ sông Amazon .

Boto3 có phải là thư viện Python không?

Boto3 là ​​tên của SDK Python dành cho AWS . Nó cho phép bạn trực tiếp tạo, cập nhật và xóa tài nguyên AWS khỏi tập lệnh Python của mình.

Chủ Đề