Có nhiều ví dụ SDK AWS có sẵn trong các ví dụ SDK AWS doc repo.AWS Doc SDK Examples GitHub repo.
Các ví dụ mã sau đây cho thấy cách sử dụng Gateway API Amazon với Bộ phát triển phần mềm AWS [SDK].
Ví dụ mã
- Hành động
- Thêm phản hồi từ dịch vụ AWS được tích hợp với phương thức
- Thêm phương thức HTTP vào tài nguyên REST
- Thêm phản hồi HTTP vào tài nguyên REST
- Tạo API REST
- Tạo tài nguyên nghỉ ngơi
- Xóa API REST
- Xóa triển khai
- Triển khai API REST
- Nhận tài nguyên nghỉ ngơi
- Nhận ánh xạ đường cơ sở
- Tích hợp một phương thức với dịch vụ AWS
- Danh sách API REST
- Liệt kê ánh xạ đường dẫn cơ sở
- Cập nhật ánh xạ đường dẫn cơ sở
- Kịch bản
- Tạo và triển khai API REST
- Ví dụ về dịch vụ chéo
- Tạo API REST để theo dõi dữ liệu Covid-19
- Tạo API REST thư viện cho vay
- Tạo ứng dụng trò chuyện WebSocket
- Sử dụng cổng API để gọi chức năng Lambda
Cập nhật lần cuối: ngày 22 tháng 4 năm 2021
Một trong những thành phần bí mật của kỹ thuật phần mềm thực tế là đảm bảo các giải pháp đơn giản và nhỏ. Đó về cơ bản, những gì sự cường điệu xung quanh việc triển khai không có máy chủ là tất cả vì các ứng dụng không có máy chủ tự động theo nhu cầu và loại bỏ gánh nặng bảo trì khỏi các nhà phát triển. Tất nhiên, vì nó rất tự động, bạn sẽ mất một số quyền kiểm soát và tầm nhìn, nhưng thời gian và nỗ lực tiết kiệm rất khó để tranh luận.
Trong bài viết này, chúng tôi sẽ sử dụng Python và Amazon Web Services [AWS] Lambda để triển khai API REST đơn giản bằng cách thực hiện các như sau: & NBSP;
- Tạo chức năng Lambda bằng Python
- Kết nối chức năng Lambda với cổng API API và AWS DynamoDB
- Quản lý quyền truy cập vào chức năng với chính sách quản lý nhận dạng & truy cập AWS [IAM]
Trong nhiệm vụ đơn giản, chúng tôi sẽ sử dụng AWS CloudFormation để xác định càng nhiều quy trình này càng tốt.
Hãy nhớ lại rằng API REST chỉ đơn giản là một cách để lưu trữ và truy xuất thông tin với các giao thức không trạng thái. Trong trường hợp này, API REST của chúng tôi sẽ xử lý thông tin về mọi người vật nuôi. Để tạo nó, chúng tôi sẽ: & nbsp;
- Thực hiện điểm cuối bài để gửi thông tin PET đến API & NBSP;
- Bật điểm cuối để lấy thông tin thú cưng
- Sử dụng bảng AWS DynamoDB để lưu trữ thông tin thú cưng
Ở đây, kế hoạch thực hiện của chúng tôi:
- Xác định API còn lại
- Thiết lập cơ sở hạ tầng không có máy chủ
- Mã các chức năng Lambda
- Tạo cổng API
- Triển khai và kiểm tra cổng API
Python và AWS Lambda - Tổng quan
Chỉ trong trường hợp bạn mới đến AWS hoặc nền tảng không có máy chủ của họ được gọi là AWS Lambda, hãy để Lôi chạy qua một cái nhìn tổng quan nhanh:AWS Lambda, let’s run through a quick overview:
- Tại sao AWS Lambda? Nền tảng Lambda cho phép bạn tạo và định cấu hình một chức năng chạy trong môi trường AWS. Một lợi ích áp đảo của các chức năng này là bạn chỉ trả tiền cho các tài nguyên cần thiết để thực hiện chức năng, khiến chúng trở thành một tùy chọn hấp dẫn cho các tổ chức đang tìm kiếm một cách có thể mở rộng và tiết kiệm chi phí để thêm chức năng đám mây. The Lambda platform allows you to create and configure a function that runs in the AWS environment. An overwhelming benefit of these functions is that you only pay for the resources needed to execute the function, making them an attractive option for organizations looking for a scalable and cost-effective way to add cloud functionality.
- Cách tạo hàm Lambda: & nbsp;
- Tạo một chức năng xử lý nơi chúng ta có thể cung cấp mã. Trình xử lý chấp nhận đầu vào được định dạng JSON và trả về tương tự. & NBSP;handler function where we can provide the code. The handler accepts JSON formatted input and returns the same.
- Chỉ định môi trường thời gian chạy [ví dụ, phiên bản Python để sử dụng]
- Xác định một kích hoạt gọi hàm. Trong ví dụ này, chúng tôi sẽ tạo ra hai hàm Lambda. & NBSP;
- Vì các hàm Lambda là không trạng thái, chúng tôi sẽ tạo một bảng DynamoDB để lưu trữ thông tin giữa các yêu cầu. & NBSP;
- Chúng tôi cũng cần tạo vai trò IAM cho phép các chức năng Lambda của chúng tôi truy cập vào bảng DynamoDB. & NBSP;
Bạn có thể tìm thấy tất cả các mã cho dự án này trong repo GitHub của tôi. REPO bao gồm một tài liệu API và mẫu cloudformation sẽ giúp mọi thứ chạy trong tài khoản AWS của bạn dễ dàng hơn. & NBSP;
Nếu bạn không có tài khoản AWS, bạn có thể đăng ký tài khoản cấp miễn phí tại đây. Không nên có bất kỳ khoản phí nào để chạy ví dụ này trong tầng miễn phí và cách tiếp cận CloudFormation giúp bạn dễ dàng xóa mọi thứ khi bạn hoàn thành.
1 - Xác định API REST
API của chúng tôi sẽ lưu trữ các thông tin sau:
- Tên của thú cưng
- Giống
- Giới tính
- Ngày sinh nhật
- Tên của chủ sở hữu
- Một định danh duy nhất cho mỗi thú cưng
Bạn có thể xem API trong repo github của tôi [xem api.json] hoặc bạn chỉ có thể xem nó cùng với tài liệu tương tác cho nó trong repo Swaggerhub. API xác định hai điểm cuối:API.json], or you can just view it alongside the interactive documentation for it in the SwaggerHub repo. The API defines two endpoints:
- Một điểm cuối nhận được, cho phép chúng tôi tìm thấy một con vật cưng sử dụng định danh duy nhất
- Điểm cuối bài, cho phép chúng tôi thêm vật nuôi mới vào cơ sở dữ liệu Dynamo của mình
2 - Thiết lập cơ sở hạ tầng không có máy chủ
Chúng tôi sẽ sử dụng mẫu CloudFormation [CF] để thiết lập cơ sở hạ tầng cho ví dụ này. Bạn có hai lựa chọn: & nbsp;
- Nếu bạn muốn theo dõi, bạn sẽ cần phải đăng nhập vào tài khoản AWS của mình và tạo ngăn xếp CF từ trang chủ của CloudFormation. AWS cung cấp các hướng dẫn tốt để tạo ngăn xếp CloudFormation mới tại đây. & NBSP;CloudFormation home page. AWS provides good instructions for creating a new CloudFormation stack here.
- Hoặc bạn có thể sử dụng mẫu cloudformation.json cf của tôi & nbsp;CloudFormation.json CF template
Nếu bạn muốn tạo của riêng mình, bạn có thể:
- Chọn Tạo ngăn xếp và chọn Tùy chọn Tệp mẫu tải lênCreate stack and choose the Upload a template file option
- Chọn tệp mẫu và nhấp vào Tiếp theoNext
- Đặt tên cho Stack Petsapi mới hoặc một cái gì đó tương tự và sau đó nhấp vào Tiếp theoPetsAPI or something similar and then click Next
- Giữ tất cả các tùy chọn mặc định trên trang Tùy chọn Stack định cấu hình và nhấp vào Tiếp theoConfigure stack options page and click Next
- Ở dưới cùng của trang đánh giá, hãy kiểm tra tùy chọn cho phép CloudFormation tạo vai trò IAM. Review page, check the option to allow CloudFormation to create an IAM role.
Chỉ mất một hoặc hai phút để tạo ra tất cả các yếu tố của ngăn xếp mới. Nếu bạn thích cung cấp cơ sở hạ tầng theo cách thủ công, bạn sẽ cần phải tạo:
- Một bảng DynamoDB có tên là Thú cưng, có khóa chính có tên ID.id.
- Một vai trò iam cung cấp chức năng Lambda với sự cho phép:
- Viết và đọc từ bảng Thú cưng ”
- Tạo các nhóm nhật ký, một luồng nhật ký và ghi các sự kiện nhật ký
- Hai chức năng Lambda, một cho hoạt động GET và một cho hoạt động bài.
- Đặt thời gian chạy thành Python 3.7
- Định cấu hình chức năng để sử dụng vai trò IAM bạn đã tạo.
Bây giờ chúng tôi đã tạo ra cơ sở hạ tầng, chúng tôi sẽ chỉnh sửa mã trong mỗi chức năng Lambda để xử lý việc thêm và lấy các đối tượng PET từ bảng cơ sở dữ liệu.
3 - Mã các chức năng Lambda
Trên bảng điều khiển AWS, điều hướng đến trang chủ Lambda nơi bạn sẽ thấy hai chức năng mà chúng tôi đã tạo trước đây. & NBSP;Lambda home page where you should see the two functions we created previously.
Hãy bắt đầu bằng cách thực hiện điểm cuối bài. Nếu bạn thiết lập cơ sở hạ tầng của mình với mẫu CF, hàm được gọi là petlambda-set. & Nbsp;PetLambda-Set.
- Chọn tên chức năng để chỉnh sửa nó & nbsp;
- Điều hướng đến tab mã bên dưới tổng quan về chức năng
- Chọn index.py để xem mã cho lambda:index.py to view the code for the Lambda:
Chúng tôi sẽ sử dụng thư viện BOTO3, nơi cung cấp SDK AWS cho Python. Chúng tôi sẽ giữ mã đơn giản ngay bây giờ, nhưng bạn có thể thử nghiệm thêm các xác nhận và xử lý ngoại lệ. Sử dụng BOTO3, chúng tôi sẽ kết nối với bảng DynamoDB và chèn một bản ghi mới. Nếu bạn theo dõi, hãy sao chép mã bên dưới và thay thế mã Lambda bằng nó:boto3 library, which provides the AWS SDK for Python. We’ll keep the code simple for now, but you could experiment with adding validations and exception handling. Using boto3, we’ll connect to the DynamoDB table and insert a new record. If you’re following along, copy the code below, and replace the Lambda code with it:
import boto3 def lambda_handler[event, context]: client = boto3.resource['dynamodb'] table = client.Table['Pets'] response = table.put_item[ Item={ 'id': event['id'], 'name': event['name'], 'breed': event['breed'], 'gender': event['gender'], 'owner': event['owner'], 'birthday': event['birthday'] } ] return { 'statusCode': response['ResponseMetadata']['HTTPStatusCode'], 'body': 'Record ' + event['id'] + ' added' }
Nếu bạn muốn kiểm tra chức năng Lambda, hãy chọn tab thử nghiệm, hãy tạo thử nghiệm mới từ mẫu Hello-World và sử dụng bộ dữ liệu ví dụ được hiển thị bên dưới:Test tab, create a new test from the hello-world template, and use the example dataset shown below:
{ "id": "d290f1ee-6c54-4b01-90e6-d701748f0851", "name": "Hansie", "breed": "Dachshund", "gender": "Male", "owner": "Mike", "birthday": "2012-05-15" }
Phản hồi sẽ trông tương tự như được hiển thị dưới đây:
{ "statusCode": 200, "body": "Record d290f1ee-6c54-4b01-90e6-d701748f0851 added" }
Bây giờ, hãy để theo các bước tương tự để cập nhật hàm petlambda-get. Mã dưới đây: & nbsp;PetLambda-Get function. The code below:
- Kết nối với bảng DynamoDBDynamoDB table
- Tạo một truy vấn bằng cách sử dụng khóa bao gồm ID
- Trả về đối tượng PET hoặc lỗi không tìm thấy HTTP 404error
import boto3 def lambda_handler[event, context]: client = boto3.resource['dynamodb'] table = client.Table['Pets'] response = table.get_item[ Key={ 'id': event['id'] } ] if 'Item' in response: return response['Item'] else: return { 'statusCode': '404', 'body': 'Not found' }
Bạn có thể kiểm tra Lambda này bằng cách gửi dữ liệu thử nghiệm sau:
{ "id": "d290f1ee-6c54-4b01-90e6-d701748f0851" }
4 - Tạo cổng API thông qua bảng điều khiển AWS
Với hai chức năng Lambda của chúng tôi được tạo và kết nối với cơ sở dữ liệu, đó là thời gian để thêm một cổng API để hiển thị chức năng API. Trên bảng điều khiển AWS, điều hướng đến trang chủ API Gateway và chọn tùy chọn Build để tạo API REST:API Gateway home page and select the Build option to create a REST API:
Tại thời điểm này, bạn có thể: & nbsp;
- Thiết lập API theo cách thủ công của bạn bằng nút Build
- Nhập cấu hình từ tệp vênh vang hoặc mở tệp API 3Swagger File or Open API 3 file
Hãy để làm như sau: & nbsp;
- Nhấp vào nút Nhập và chọn Nhập từ tùy chọn Swagger hoặc Open API 3Import from Swagger or Open API 3 option
- Nhấp vào nút Chọn tệp Swagger.Select Swagger File button.
- Kho lưu trữ mã GitHub của tôi chứa một tệp có tên api.json. Chọn tệp đó và chọn Nhập. Sau khi quá trình nhập kết thúc, bạn sẽ thấy tài nguyên PET được xác định bằng GET và điểm cuối tài nguyên bài đăng:API.json. Choose that file, and select Import. After the import process has finished, you should see the pet resource defined with a GET and a POST resource endpoint:
Bây giờ chúng tôi sẽ kết nối các điểm cuối GET và POST với từng chức năng Lambda của chúng tôi:
- Nhấp vào Thiết lập ngay bây giờ cho điểm cuối bài trước. & NBSP;Set up now for the POST endpoint first.
- Đặt loại tích hợp thành hàm Lambda. Vùng là cùng một nơi mà bạn đã xác định các chức năng của mình. & NBSP;Integration type to Lambda Function. The region is the same one where you defined your functions.
- Nhập petlambda-set vào trường chức năng Lambda và chọn Lưu. & NBSP;PetLambda-Set into the Lambda Function field and select Save.
- AWS tự động thêm các quyền cho cổng API để gọi chức năng của bạn để tất cả những gì bạn cần làm là chọn OK tại dấu nhắc.OK at the prompt.
- Kiểm tra điểm cuối bài bằng cách chọn tùy chọn kiểm tra trên khối máy khách và nhập tập dữ liệu gốc mà chúng tôi sử dụng để kiểm tra chức năng Lambda ở trên. Điểm cuối Post chấp nhận thân yêu cầu ở định dạng JSON theo mặc định:Test option on the client block and entering the original dataset that we used to test the Lambda function above. The POST endpoint accepts a Request Body in JSON format by default:
Định cấu hình điểm cuối GET là tương tự, mặc dù chúng tôi sẽ cần định cấu hình một cách để ánh xạ chuỗi truy vấn đến các tham số Lambda: & nbsp;GET endpoint is similar, although we’ll need to configure a way to map the query string to the Lambda parameters:
- Nhấp vào Thiết lập ngay bây giờ để nhận Get Endpoint. & NBSP;Set up now for the GET endpoint.
- Đặt loại tích hợp thành hàm Lambda. Vùng là cùng một nơi mà bạn đã xác định các chức năng của mình. & NBSP;Integration type to Lambda Function. The region is the same one where you defined your functions.
- Nhập petlambda-set vào trường chức năng Lambda và chọn Lưu. & NBSP;PetLambda-Get into the Lambda Function field and select Save.
- AWS tự động thêm các quyền cho cổng API để gọi chức năng của bạn để tất cả những gì bạn cần làm là chọn OK tại dấu nhắc.OK.
- Kiểm tra điểm cuối bài bằng cách chọn tùy chọn kiểm tra trên khối máy khách và nhập tập dữ liệu gốc mà chúng tôi sử dụng để kiểm tra chức năng Lambda ở trên. Điểm cuối Post chấp nhận thân yêu cầu ở định dạng JSON theo mặc định:Method Request box
- Định cấu hình điểm cuối GET là tương tự, mặc dù chúng tôi sẽ cần định cấu hình một cách để ánh xạ chuỗi truy vấn đến các tham số Lambda: & nbsp;URL Query String Parameters add a query string named id, and mark it as required.
- Nhấp vào Thiết lập ngay bây giờ để nhận Get Endpoint. & NBSP;
- Gõ petlambda-get vào trường chức năng Lambda và chọn lưu. & Nbsp;Method Execution to return to the main configuration page for the GET endpoint.
- AWS sẽ nhắc bạn một lần nữa thêm quyền cho Cổng API gọi chức năng của bạn, vì vậy hãy nhấp vào OK.Integration Request box.
- Chọn hộp Yêu cầu Phương thứcMapping Templates, select When there are no templates defined [recommended].
- Trong các tham số chuỗi truy vấn URL Thêm một chuỗi truy vấn có tên ID và đánh dấu nó theo yêu cầu. & Nbsp;Add mapping template.
- Nhấp vào dấu kiểm để lưu nó.Content-Type to application/json and select the checkmark to save the value.
Chọn Thực thi Phương thức để quay lại trang Cấu hình chính để nhận điểm cuối.Generate Template box, paste the following:
{ "id": "$input.params['id']" }
Chọn hộp yêu cầu tích hợp. & NBSP;Save when you’re done.
Trong các mẫu ánh xạ, chọn khi không có mẫu được xác định [được đề xuất]. & NBSP;
Chọn tùy chọn để thêm mẫu ánh xạ. & NBSP;Actions, and choose Deploy API.
Đặt loại nội dung thành Ứng dụng/JSON và chọn dấu kiểm để lưu giá trị. & NBSP;[New Stage] from the Deployment stage dropdown, and then enter a name [such as Test] and a description. Click Deploy when you’re done.
Trong hộp Mẫu tạo, dán như sau:
Cấu hình này sẽ ánh xạ tham số chuỗi truy vấn đến tham số đầu vào cho Lambda. Nhấp vào Lưu khi bạn hoàn thành./pet?id=d290f1ee-6c54-4b01-90e6-d701748f0851 to the end of it. If you followed this example and tested your Lambda with the data set I provided, you should see the JSON object returned in your browser.
5 - Triển khai và kiểm tra cổng API/pet to the end of the URL provided for you.
Python và AWS Lambda - kết thúc
Hãy nhớ rằng AWS tính phí bạn cho tất cả mọi thứ mà chạy trên tài khoản của bạn, vì vậy khi bạn đã thực hiện ví dụ trong bài đăng này, đừng quên làm sạch API, Lambdas và cơ sở hạ tầng khác. Cách đơn giản nhất là:
- Trên trang chủ API Gateway, chọn Cổng API bạn đã tạo và chọn Xóa từ các hành động thả xuống. & NBSP;API Gateway home page, select the API Gateway you created, and choose Delete from the Actions dropdown.
- Từ trang chủ của CloudFormation, chọn ngăn xếp bạn đã tạo và nhấp vào tùy chọn Xóa ở đầu trang. & NBSP;CloudFormation home page, select the stack you created and click on the Delete option at the top of the page.
- AWS sẽ loại bỏ mọi thứ trong vòng vài phút.
Nếu bạn muốn tìm hiểu thêm về Gateway API Amazon, thì Hướng dẫn nhà phát triển là một nơi tuyệt vời để bắt đầu. Như bạn có thể thấy từ ví dụ trên, nếu bạn có tài liệu API, nó không mất nhiều thời gian để cung cấp các chức năng Lambda và định cấu hình chúng đằng sau một cổng API.Developer Guide is an excellent place to start. As you can see from the example above, if you have an API document, it doesn’t take much to provision Lambda functions and configure them behind an API gateway.
Nếu bạn muốn khám phá thêm những gì bạn có thể làm với Python và AWS Lamda, hãy thử môi trường Python điện toán đám mây được xây dựng sẵn của chúng tôi cho Windows, Mac và Linux.
Nó kết hợp Python 3.8.2 và BOTO3 để bạn có thể cài đặt nó và bắt đầu điều khiển triển khai AWS của mình bằng Python ngay lập tức!
- Cần một phiên bản Python sẵn sàng, sẵn sàng để triển khai? Nhận ActivePython
- Vẫn đang sử dụng Python 2? & NBSP; Nhận hỗ trợ mở rộng
Đề xuất đọc
Cách thúc đẩy triển khai đám mây của bạn bằng Python
Kéo dài Asana với Lambda