AWS Lambda - Hướng dẫn nhanh
AWS Lambdalà một dịch vụ thực hiện tính toán không máy chủ, bao gồm tính toán mà không cần bất kỳ máy chủ nào. Mã được thực thi dựa trên phản hồi của các sự kiện trong dịch vụ AWS như thêm / xóa tệp trong nhóm S3, cập nhật bảng Amazon động dB, yêu cầu HTTP từ cổng API Amazon, v.v.
Để làm việc với AWS Lambda, chúng tôi chỉ cần đẩy mã trong dịch vụ AWS Lambda. Tất cả các nhiệm vụ và tài nguyên khác như cơ sở hạ tầng, hệ điều hành, bảo trì máy chủ, giám sát mã, nhật ký và bảo mật đều do AWS đảm nhận.
AWS Lambdahỗ trợ các ngôn ngữ như Java, NodeJS, Python, C # và Go. Lưu ý rằngAWS Lambda sẽ chỉ hoạt động với các dịch vụ AWS.
AWS Lambda là gì?
Định nghĩa về AWS Lambda theo tài liệu chính thức của nó như sau:
AWS Lambda là một dịch vụ máy tính cho phép bạn chạy mã mà không cần cấp phép hoặc quản lý máy chủ. AWS Lambda chỉ thực thi mã của bạn khi cần thiết và tự động thay đổi tỷ lệ, từ một vài yêu cầu mỗi ngày đến hàng nghìn yêu cầu mỗi giây. Bạn chỉ phải trả cho thời gian tính toán mà bạn sử dụng - không tính phí khi mã của bạn không chạy.
AWS Lambda hoạt động như thế nào?
Sơ đồ khối giải thích hoạt động của AWS Lambda trong năm bước đơn giản được hiển thị bên dưới:
Step 1 − Tải lên mã lambda AWS bằng bất kỳ ngôn ngữ nào mà AWS lambda hỗ trợ, đó là NodeJS, Java, Python, C # và Go.
Step 2 − Đây là một vài dịch vụ AWS mà AWS lambda có thể được kích hoạt.
Step 3 −AWS Lambda có mã tải lên và chi tiết sự kiện mà trình kích hoạt đã xảy ra. Ví dụ: sự kiện từ Amazon S3, Amazon API Gateway, Dynamo dB, Amazon SNS, Amazon Kinesis, CloudFront, Amazon SES, CloudTrail, ứng dụng di động, v.v.
Step 4 − Thực thi AWS Lambda Code chỉ khi được kích hoạt bởi các dịch vụ AWS trong các tình huống như -
- Người dùng tải lên các tệp trong nhóm S3
- URL điểm cuối http get / post bị truy cập
- dữ liệu được thêm / cập nhật / xóa trong bảng động dB
- thông báo đẩy
- thu thập luồng dữ liệu
- lưu trữ trang web
- gửi email
- ứng dụng di động, v.v.
Step 5 − Hãy nhớ rằng AWS chỉ tính phí khi mã AWS lambda thực thi và không tính phí theo cách khác.
Ưu điểm của việc sử dụng AWS Lambda
AWS Lambda mang lại nhiều lợi ích khi bạn đang làm việc trên nó. Phần này thảo luận chi tiết về chúng -
Dễ dàng làm việc với mã
AWS Lambda cung cấp cho bạn cơ sở hạ tầng để tải lên mã của bạn. Nó đảm nhận việc duy trì mã và kích hoạt mã bất cứ khi nào sự kiện bắt buộc xảy ra. Nó cho phép bạn chọn bộ nhớ và thời gian chờ cần thiết cho mã.
AWS Lambda cũng có thể thực hiện các yêu cầu song song theo các trình kích hoạt sự kiện.
Cung cấp nhật ký
AWS Lambda cung cấp thông tin chi tiết về số lần mã được thực thi và thời gian thực thi, bộ nhớ tiêu thụ, v.v. AWS CloudWatch thu thập tất cả các bản ghi, giúp hiểu được quy trình thực thi và gỡ lỗi mã.
Thanh toán dựa trên mức sử dụng
Thanh toán AWS Lambda được thực hiện dựa trên việc sử dụng bộ nhớ, yêu cầu được thực hiện và việc thực thi, được thanh toán theo gia số tối thiểu 100ms. Vì vậy, đối với thực thi 500ms, thanh toán sẽ sau mỗi 100ms. Nếu bạn chỉ định mã lambda AWS của mình sẽ được thực thi trong 500 mili giây và thời gian thực thi chỉ là 200 mili giây, AWS sẽ chỉ lập hóa đơn cho bạn trong thời gian thực hiện, đó là 200 mili giây thực thi thay vì 500 mili giây. AWS luôn tính phí cho thời gian thực thi được sử dụng. Bạn không cần phải trả tiền nếu chức năng không được thực thi.
Hỗ trợ đa ngôn ngữ
AWS Lambda hỗ trợ các ngôn ngữ phổ biến như Node. js, Python, Java, C # và Go. Đây là những ngôn ngữ được sử dụng rộng rãi và bất kỳ nhà phát triển nào cũng sẽ thấy dễ dàng khi viết mã cho AWS Lambda.
Dễ dàng tạo và triển khai mã
Có nhiều tùy chọn có sẵn cho Lambda để tạo và triển khai mã. Để viết mã, bạn có thể sử dụng trình chỉnh sửa trực tuyến AWS, Visual Studio IDE hoặc Eclipse IDE. Nó cũng có hỗ trợ cho khung công tác không máy chủ giúp việc viết và triển khai mã AWS Lambda dễ dàng. Bên cạnh bảng điều khiển AWS, chúng tôi có AWS-cli để tạo và triển khai mã.
Các tính năng khác
Bạn có thể sử dụng AWS Lambda miễn phí bằng cách đăng nhập vào cấp miễn phí AWS. Nó cung cấp cho bạn dịch vụ miễn phí trong 1 năm. Hãy xem các dịch vụ miễn phí được cung cấp bởi cấp miễn phí AWS.
Nhược điểm của việc sử dụng AWS Lambda
Mặc dù có nhiều ưu điểm nhưng AWS Lambda lại sở hữu những nhược điểm sau:
Nó không thích hợp cho các dự án nhỏ.
Bạn cần phân tích cẩn thận mã của mình và quyết định bộ nhớ và thời gian chờ. Trong trường hợp nếu hàm của bạn cần nhiều thời gian hơn những gì được phân bổ, nó sẽ bị kết thúc theo thời gian chờ được chỉ định trên đó và mã sẽ không được thực thi đầy đủ.
Vì AWS Lambda hoàn toàn dựa vào AWS cho cơ sở hạ tầng, bạn không thể cài đặt bất kỳ phần mềm bổ sung nào nếu mã của bạn yêu cầu.
Sự kiện kích hoạt AWS Lambda
Các sự kiện có thể kích hoạt AWS Lambda như sau:
- Nhập vào một đối tượng S3
- Chèn, cập nhật và xóa dữ liệu trong bảng Dynamo DB
- Thông báo đẩy từ SNS
- GET / POST các lệnh gọi tới API Gateway
- Sửa đổi tiêu đề ở người xem hoặc yêu cầu / phản hồi gốc trong CloudFront
- Ghi nhật ký các mục nhập trong luồng dữ liệu AWS Kinesis
- Nhật ký lịch sử trong CloudTrail
Các trường hợp sử dụng của AWS Lambda
AWS Lambda là một dịch vụ máy tính chủ yếu được sử dụng để chạy các quy trình nền. Nó có thể kích hoạt khi được sử dụng với các dịch vụ AWS khác. Dưới đây là danh sách các dịch vụ AWS mà chúng tôi có thể sử dụng AWS Lambda:
Đối tượng S3 và AWS Lambda
Amazon S3 chuyển chi tiết sự kiện cho AWS Lambda khi có bất kỳ tệp nào tải lên trong S3. Chi tiết về quá trình tải lên tệp hoặc xóa tệp hoặc di chuyển tệp được chuyển đến AWS Lambda. Mã trong AWS Lambda có thể thực hiện bước cần thiết khi nhận được chi tiết sự kiện. Ví dụ tạo hình thu nhỏ của hình ảnh chèn vào S3.
DynamoDB và AWS Lambda
DynamoDB có thể kích hoạt AWS Lambda khi có dữ liệu được thêm, cập nhật và xóa trong bảng. Sự kiện AWS Lambda có tất cả các chi tiết của bảng AWS DynamoDB về việc chèn / cập nhật hoặc xóa.
API Gateway và AWS Lambda
API Gateway có thể kích hoạt AWS Lambda trên các phương thức GET / POST. Chúng tôi có thể tạo biểu mẫu và chia sẻ chi tiết với điểm cuối API Gateway và sử dụng nó với AWS Lambda để xử lý thêm, chẳng hạn như tạo mục nhập dữ liệu trong bảng DynamoDB.
SNS và AWS Lambda
SNS được sử dụng để thông báo đẩy, gửi SMS, v.v. Chúng tôi có thể kích hoạt AWS lambda khi có bất kỳ thông báo đẩy nào xảy ra trong SNS. Chúng tôi cũng có thể gửi SMS đến số điện thoại từ AWS Lambda khi nó nhận được trình kích hoạt.
Sự kiện đã lên lịch và AWS Lambda
Sự kiện đã lên lịch có thể được sử dụng cho các công việc cron. Nó có thể kích hoạt AWS Lambda thực hiện nhiệm vụ theo mẫu thời gian thông thường.
CloudTrail và AWS Lambda
CloudTrail có thể hữu ích trong việc theo dõi nhật ký trên tài khoản. Chúng tôi có thể sử dụng AWS Lambda để xử lý thêm nhật ký CloudTrail.
Kinesis và AWS Lambda
Kinesis được sử dụng để thu thập / lưu trữ dữ liệu theo dõi thời gian thực đến từ các lần nhấp vào trang web, nhật ký, nguồn cấp dữ liệu truyền thông xã hội và một trình kích hoạt để AWS Lambda có thể thực hiện xử lý bổ sung trên các nhật ký này.
CloudFront và Lambda @ Edge
CloudFront là một mạng phân phối nội dung, nơi bạn có thể lưu trữ trang web của mình và Lambda @ Edge có thể được sử dụng để xử lý các tiêu đề đến từ yêu cầu của người xem, yêu cầu gốc, phản hồi gốc và phản hồi của người xem. Sửa đổi tiêu đề bao gồm các tác vụ như sửa đổi dữ liệu cookie, ghi lại URL, được sử dụng cho thử nghiệm AB để thay đổi phản hồi gửi lại cho người dùng, thêm thông tin tiêu đề bổ sung cho mục đích bảo mật, v.v.
Trước khi bắt đầu làm việc với AWS Lambda, bạn cần phải đăng nhập với bảng điều khiển Amazon. AWS Lambda hỗ trợ hai IDE:Visual studio và Eclipse. Trong chương này, chúng ta sẽ thảo luận chi tiết về việc cài đặt AWS Lambda theo từng bước.
Tạo thông tin đăng nhập trong Bảng điều khiển AWS
Bạn có thể tạo thông tin đăng nhập của mình trong Bảng điều khiển AWS miễn phí bằng cách sử dụng bậc miễn phí của Amazon. Bạn có thể làm theo các bước dưới đây để tạo thông tin đăng nhập với amazon để sử dụng các dịch vụ của Amazon -
Bước 1
Đi đến https://aws.amazon.com/free/và nhấp vào tạo tài khoản miễn phí. Bạn có thể xem ảnh chụp màn hình như dưới đây -
Bước 2
Bấm vào Create a Free Account và bạn sẽ được chuyển đến màn hình như hình dưới đây -
Bây giờ, hãy điền thông tin chi tiết về địa chỉ email, mật khẩu và tên tài khoản AWS theo lựa chọn của bạn trong biểu mẫu hiển thị ở trên và nhấp vào Continue.
Bước 3
Bây giờ, bạn có thể tìm thấy màn hình như hình dưới đây -
Nhập tất cả các chi tiết được yêu cầu vào biểu mẫu này.
Lưu ý rằng có những khoản phí tối thiểu phải trả dựa trên quốc gia đã chọn. Khoản tiền tương tự sẽ được hoàn lại sau khi các chi tiết đã nhập được xác thực. Bạn cần chi tiết thẻ tín dụng hoặc thẻ ghi nợ để tạo tài khoản miễn phí. Đối với người dùng Ấn ĐộRs 2/- được khấu trừ và cho Hoa Kỳ $1 bị tính phí. Số tiền tương tự sẽ được hoàn lại cho người dùng thẻ tương ứng sau khi người dùng được xác thực.
Xin lưu ý rằng tài khoản này là miễn phí và có giới hạn cho việc sử dụng các dịch vụ. Nếu việc sử dụng vượt quá giới hạn, người dùng sẽ bị tính phí.
Khi các chi tiết được nhập vào biểu mẫu hiển thị ở trên, hãy nhấp vào Create Account and Continue.
Bạn sẽ được chuyển đến màn hình tiếp theo như hình dưới đây.
Bước 4
Bạn cần nhập chi tiết thanh toán, đó là thẻ tín dụng hoặc thẻ ghi nợ, cùng với ngày hết hạn và tên chủ thẻ như hình bên dưới -
Bước 5
Sau khi tất cả các chi tiết được nhập, hãy nhấp vào Secure Submit và nó sẽ xác thực thẻ với ngân hàng và sẽ cung cấp cho bạn OTPtrên điện thoại di động của bạn được liên kết với thẻ. Bạn có thể tìm thấy một cửa sổ như hình dưới đây -
Bây giờ, hãy nhập OTP chi tiết và nhấp vào Make Payment. Bạn bị tính phí dựa trên quốc gia đã chọn.
Bước 6
Sau khi thanh toán được thực hiện, bước tiếp theo là xác minh điện thoại. Bạn cần nhập số điện thoại di động của mình như hình bên dưới -
Sau khi chi tiết được điền, hãy nhấp vào Call Me Now. AWS sẽ gọi ngay lập tức bằng hệ thống tự động. Khi được nhắc trong cuộc gọi, hãy nhập số gồm 4 chữ số sẽ xuất hiện trên trang AWS vào điện thoại của bạn bằng bàn phím điện thoại. Thao tác này sẽ xác minh số của bạn và bạn sẽ nhận được kích hoạt thư trong id thư được chỉ định lúc đầu trong khi tạo đăng nhập.
Bước 7
Nhấp vào liên kết thư và nhập tên tài khoản hoặc id email và mật khẩu và đăng nhập cho bạn vào các dịch vụ AWS như hình dưới đây -
Tên tài khoản được hiển thị ở góc trên bên phải như hình trên. Bây giờ bạn có thể bắt đầu sử dụng dịch vụ AWS Lambda. Đối với dịch vụ AWS Lambda, các ngôn ngữ được hỗ trợ là NodeJS, Python, Java, C # và Go.
Cài đặt Visual Studio 2017
Có 2 IDE tương thích với AWS: Visual Studio và Eclipse. Trong phần này, chúng tôi sẽ thảo luận về cài đặt củaVisual studio 2017 trên Windows, Linux Mac. Truy cập trang web chính thức của Visual Studio:https://www.visualstudio.com/downloads/. Bạn có thể tìm thấy màn hình chào mừng như minh họa -
Tải xuống phiên bản cộng đồng tức là Visual Studio Community 2017nó là miễn phí bây giờ cho thực hành. Sau khi cài đặt, nó sẽ chạy bạn qua các bước cài đặt, nơi bạn cần chọn các gói để sử dụng sau này. Bạn có thể chọn nodejs, python, c# gói để chúng tôi làm việc sau này.
Bộ công cụ AWS hỗ trợ cho Visual Studio 2017
Khi bạn đã cài đặt Visual Studio 2017, bạn sẽ phải làm theo các bước đã cho để cài đặt hỗ trợ Bộ công cụ AWS cho Visual Studio 2017 -
Bước 1
Đi đến https://aws.amazon.com/visualstudio/ và tải xuống bộ công cụ AWS cho Visual Studio. Màn hình hiển thị như hình dưới đây -
Lưu ý rằng gói được tải xuống cho Visual Studio 2017 là vsixgói hàng. Nếu phiên bản studio trực quan của bạn là từ 2013-2015, nó sẽ cài đặtmsitrình cài đặt. Nhấn vàoDownload như hình bên dưới.
Bước 2
Bây giờ, nhấp đúp vào gói vsix đã tải xuống và nó sẽ chạy bạn qua các bước cài đặt như hình dưới đây -
Sau khi Visual Studio được cài đặt thành công, bạn có thể thấy một cửa sổ như hình dưới đây -
Bước 3
Bây giờ, mở Visual Studio 2017 và bạn sẽ thấy trang chào mừng từ AWS như hình dưới đây:
Lưu ý rằng bạn cần thêm khóa truy cập, khóa bí mật, số tài khoản để bắt đầu và sử dụng các dịch vụ AWS từ visual studio.s
AWS Lambda BoilerPlate cho NodeJS
Bạn có thể sử dụng nó với visual studio code như hình bên dưới.
Bước 1
Bạn có thể tải về Visual studio code miễn phí từ trang web chính thức:https://www.visualstudio.com/downloads/. Trang chủ của các bản tải xuống Visual Studio trông như thế này -
Bước 2
Bây giờ, mở mã Visual Studio như hình dưới đây -
Bước 3
Để cài đặt hỗ trợ cho AWS, support for nodejstùy chọn có sẵn bên trong các tiện ích mở rộng. Bạn có thể tìm kiếm AWS và nó sẽ hiển thị tùy chọn như sau:
Bước 4
Bây giờ, hãy cài đặt bảng soạn sẵn cho AWS Lambda trong nodejs như hình -
Bước 5
Bấm vào kho lưu trữ và sao chép nó trong Visual Studio để bắt đầu viết hàm Lambda trong Visual Studio. Nó chuyển hướng bạn đến kho lưu trữ này mà chúng tôi có thể sao chép trong Visual Studio:https://github.com/loganarnett/vscode-lambda-snippets. Bây giờ, hãy mở bảng lệnh từView trong Visual Studio.
Bước 6
Nhấp vào nó và chọn git clone như hình dưới đây -
Bước 7
Nhập url kho lưu trữ và lưu nó cục bộ theo lựa chọn của bạn. Tạo nênindex.js như hình dưới đây để làm việc với hàm lambda -
Cài đặt Eclipse IDE
Bây giờ, bạn sẽ phải cài đặt Eclipse Java EE IDE mới nhất. Bạn có thể tải xuống từ trang web chính thức của Eclipse:https://www.eclipse.org/downloads/
Bộ công cụ AWS hỗ trợ cho IDE Eclipse
Sau khi cài đặt Eclipse, hãy thực hiện các bước sau:
Bước 1
Chuyển đến trợ giúp từ menu và nhấp vào Install New Software.
Bước 2
Đi vào https://aws.amazon.com/eclipse trong hộp văn bản có nhãn Work with ở đầu hộp thoại.
Bước 3
Bây giờ, hãy chọn cái bắt buộc AWS Core Management Tools và các mục tùy chọn khác từ danh sách hiển thị bên dưới.
Bước 4
Bây giờ, hãy nhấp vào Next. Eclipse sẽ hướng dẫn bạn các bước cài đặt còn lại như đã nêu trong các bước tiếp theo dưới đây.
Bước 5
Các mô-đun lõi AWS được hiển thị trong lưới bên dưới như được hiển thị trong ảnh chụp màn hình dưới đây -
Bước 6
Sau khi cài đặt, công cụ AWS sẽ có sẵn trong Eclipse như hình dưới đây -
Bước 7
Bạn có thể thấy màn hình sau đây khi nhấp vào dịch vụ Amazon.
Bây giờ, hãy nhấp vào AWS Explorer để xem các dịch vụ có sẵn. Chúng ta sẽ thảo luận về cách làm việc với IDE đã cài đặt trong các chương sắp tới.
AWS Lambda là một dịch vụ xử lý việc tính toán mã của bạn mà không cần bất kỳ máy chủ nào. Nó được cho là máy tính không máy chủ. Mã được thực thi dựa trên phản hồi của các sự kiện trong dịch vụ AWS như thêm / xóa tệp trong nhóm S3, cập nhật Amazon DynamoDBtables, yêu cầu HTTP từ cổng Amazon Api, v.v.
Mã AWS Lambda có thể được viết bằng NodeJS, Java, C #, Python và Go. Chương này sẽ nói chi tiết về cách tạo hàm AWS Lambda trong bảng điều khiển AWS.
Bảng điều khiển AWS
Đăng nhập vào Bảng điều khiển AWS tại liên kết https://aws.amazon.com/console. Khi bạn đăng nhập vào nó, nó sẽ chuyển hướng bạn đến màn hình nơi các dịch vụ AWS được hiển thị.
Ví dụ: Tạo một hàm
Hãy để chúng tôi hiểu chức năng của Bảng điều khiển AWS với sự trợ giúp của Ví dụ. Click vào Lambda (đánh dấu ở trên), nó sẽ chuyển hướng tạo hàm như hình bên dưới -
Nhấp chuột Create function và màn hình hiển thị các chi tiết sau:
Lưu ý rằng, theo mặc định, tùy chọn là Author from scratch. Tùy chọn này cho phép bạn viết mã Lambda từ đầu. Nó sẽ chỉ có một chức năng đơn giản vớihello world thông điệp.
Tùy chọn thứ hai Blue prints có chi tiết sau đây.
Nó cung cấp thông tin chi tiết về mã đã được viết cho một số dịch vụ aws bằng các ngôn ngữ có sẵn với AWS Lambda. Trong trường hợp bạn cần viết mã AWS Lambda cho bất kỳ dịch vụ nào bạn có thể đăng kýblue prints và bắt đầu.
Tùy chọn thứ ba Serverless Application Repository có thiết lập ứng dụng không máy chủ sẽ giúp triển khai mã AWS Lambda.
Trong phần thảo luận sâu hơn, chúng ta sẽ làm việc trên tùy chọn đầu tiên mà chúng ta tạo hàm AWS lambda bằng cách sử dụng Author from scratch.
Trước khi chúng ta tạo hàm Lambda, sẽ cần một vai trò, tức là quyền để làm việc với các dịch vụ AWS và aws lambda. Sau đó, Vai trò phải được gán cho hàm aws lambda.
Tạo vai trò trong Bảng điều khiển AWS
Để tạo một vai trò trong Bảng điều khiển AWS, hãy chuyển đến Dịch vụ bảng điều khiển AWS và nhấp vào IAM như được hiển thị bên dưới -
Bây giờ, nếu bạn nhấp vào IAM, bạn sẽ có màn hình như hình dưới đây -
Nếu bạn chọn Roles, bạn có thể thấy các nút sau trên màn hình -
Bây giờ, hãy nhấp vào Create role. Nó sẽ yêu cầu bạn chọn dịch vụ mà bạn cần để sử dụng vai trò đã tạo.
Vì chúng tôi cần sử dụng vai trò này với AWS Lambda, hãy chọn Lambda và bấm vào Next:Permissionsnhư hình trên. Màn hình tiếp theo hiển thị tên chính sách khả dụng theo các dịch vụ AWS. Bạn có thể chọn chính sách từ đây -
Ví dụ: nếu bạn muốn cho phép AWS Lambda hoạt động với S3 và DynamoDB, bạn cần chọn chính sách. Trong hộp tìm kiếm, nhập dịch vụ AWS và nhấp vào hộp kiểm. Bạn có thể chọn nhiều chính sách và sau đó nhấp vàoNext:Review.
Nó cũng có thể tạo ra chính sách của riêng bạn. Ví dụ: có một bảng động và bạn chỉ cần cấp quyền cho bảng đó, trong những trường hợp như vậy, bạn có thể tạo chính sách.
Bấm vào Create policynhư hiển thị trong màn hình trên. Sau đây là các chi tiết hiển thị trên màn hình.
Chọn một Servicemà bạn đang tạo chính sách. Sau đó, nó sẽ hiển thị dữ liệu cho các Hành động,resources và Request conditions.
Bây giờ, chúng ta nên chọn dịch vụ. Hãy để chúng tôi chọnAWS Dynamodb từ tìm kiếm. Actions có các chi tiết sau -
Bây giờ, hãy nhập Access levelbạn muốn cung cấp cho DynamoDB. Sau đó,resources sẽ hiển thị các chi tiết sau:
Bây giờ, hãy chọn loại tài nguyên bảng. Bạn có thể xem kết quả sau:
Để có quyền trên bàn, bạn cần phải Add ARN. ARN là các chi tiết duy nhất cho bảng được tạo trong AWS DynamoDB. Bạn sẽ nhận được thông tin chi tiết khi bảng được tạo trong dynamicodb.
Nếu bạn nhấp vào Add ARN và nó sẽ hiển thị các chi tiết sau:
Bây giờ, nếu bạn nhập ARN và Region, Account và Tabletên sẽ được phổ biến. Bạn nên nhấp vàoAddđể thêm chính sách. Tương tự, bạn có thể tạo chính sách cho các dịch vụ khác.
Ở đây, chúng tôi đã chọn hai chính sách AmazonS3FullAccess và AmazonDynamoDBFullACcess. Chúng tôi đã cấp toàn quyền truy cập vào S3 và DynamoDB trong vai trò đó. Tuy nhiên, bạn chỉ nên cấp quyền cho các nhóm và bảng cần thiết.
Bạn có thể làm theo các bước đã thảo luận trước đó để tạo các chính sách bằng cách sử dụng ARN.
Bước 1
Nhấp chuột Create roleđể tạo vai trò. Tất cả các vai trò đã tạo được hiển thị như minh họa -
Bước 2
Lưu ý rằng bạn có thể chọn vai trò bạn yêu cầu trong trường hợp bạn cần bất kỳ sửa đổi nào cho vai trò đã tạo. Nếu chúng tôi chọnAuthor from scratch option, bạn phải nhập Name, Runtime and Role.
Bước 3
Bạn có thể quan sát các chi tiết sau đây trong Runtime thả xuống -
Bước 4
Bạn có thể chọn thời gian chạy mà bạn chọn và tiến hành như hình.
Role thả xuống có các tùy chọn sau:
Choose an existing role − Điều này sẽ hiển thị tất cả các vai trò được tạo trong các vai trò IAM.
Create new role from template(s) −Điều này sẽ cho phép bạn tạo vai trò và sẽ hiển thị quyền được chọn cho vai trò đó. Quan sát ảnh chụp màn hình để hiểu rõ hơn.
Create a custom role − Điều này cho phép người dùng tạo các chính sách như chúng ta đã thảo luận trước đó.
Bước 5
Chọn runtime, rolevà thêm chức năng. Bấm vàoCreate functionđể tạo hàm lambda. Màn hình tiếp theo được hiển thị như sau:
Các phần của Hàm AWS Lambda
Có hai phần cho hàm AWS Lambda:Configuration và Monitoring. Hãy để chúng tôi thảo luận về từng chi tiết.
Cấu hình
Các chức năng sau được bao gồm trong Cấu hình.
Add Triggers
Các trình kích hoạt cần được thêm vào hàm AWS Lambda được hiển thị như sau:
Lưu ý rằng khi chúng ta chọn một trình kích hoạt, chúng ta cần thêm chi tiết cấu hình cho trình kích hoạt đó. Ví dụ cho trình kích hoạt S3, chúng ta cần chọn tên thùng; để kích hoạt Dynamodb, chúng ta cần chọn tên bảng.
Thí dụ
Hãy để chúng tôi xem một ví dụ về chi tiết cấu hình cho trình kích hoạt S3 -
Bây giờ, hãy thêm chi tiết cấu hình cho trình kích hoạt S3 đã thêm -
Ở đây bạn cần chọn bucket name, event type trên đó bạn muốn kích hoạt Lambda, tiền tố và mẫu bộ lọc nếu có và Add trình kích hoạt.
Thêm mã trong Lambda
Bây giờ, chúng ta nên tập trung vào mã Lambda sẽ được viết. Để thêm mã trong aws lambda, có ba tùy chọn:
- Sử dụng trình chỉnh sửa nội tuyến
- Sử dụng tệp .zip
- Tải tệp lên từ Amazon S3
Nó được hiển thị trong ảnh chụp màn hình dưới đây -
Hãy để chúng tôi thảo luận chi tiết từng người trong số họ.
Using the inline editor
Trình chỉnh sửa mã nội tuyến nơi bạn có thể viết mã cho mình như sau:
Bạn có thể viết mã của mình bằng cách chọn ngôn ngữ bạn chọn. Bạn được phép chọn lại thời gian chạy tại đây.
Quan sát ảnh chụp màn hình sau để hiểu rõ hơn -
Mã phải được viết bằng index.js.Handler. Thông tin chi tiết sẽ khác nhau dựa trên thời gian chạy. Đối vớinodejs, nó là filename.export function đó là ngay bây giờ index.lambda handler.
Upload a .ZIP file
Trước tiên, bạn có thể viết mã, nén mã và tải lên tệp zip bằng cách chọn Upload a .ZIP file.
Upload a file from Amazon S3
Bạn có thể tải tệp lên trong nhóm S3 và chọn tùy chọn Upload a file from Amazon S3.
Lưu ý rằng đối với .ZIP và S3 nó sẽ không thể thay đổi thời gian chạy.
Các biến môi trường
Họ lấy các cặp giá trị quan trọng và chia sẻ chúng với mã AWS Lambda. Chúng tôi có thể sử dụng các biến môi trường trong AWS Lambda để lưu trữ chi tiết kết nối cơ sở dữ liệu, chi tiết tệp để lưu trữ đầu ra, chi tiết tệp nhật ký, v.v.
Thẻ
Chúng là các cặp khóa-giá trị được thêm vào AWS Lambda để tổ chức chức năng tốt hơn khi được sử dụng trên các vùng khác nhau. Đối với trường hợp sử dụng đơn giản, nó không bắt buộc. Khi có nhiều hàm Lambda được tạo, việc gắn thẻ sẽ giúp lọc và quản lý các hàm Lambda.
Vai trò thực thi
Bạn có thể thay đổi lại vai trò ở đây nếu không được thực hiện đúng cách khi bắt đầu tạo hàm Lambda. Bạn có thể cập nhật hoặc tạo vai trò mới tại đây. Nó cung cấp các tùy chọn tương tự đã được hiển thị khi bắt đầu tạo hàm Lambda.
Cài đặt cơ bản
Tại đây, bạn cần nhập mô tả ngắn gọn về chức năng Lambda của bạn đang làm. Chọn bộ nhớ và thời gian chờ cần thiết cho chức năng Lambda.
Mạng lưới
Điều này cho phép bạn chọn VPC sẽ cho phép bạn truy cập chức năng Lambda từ VPC. Theo mặc định, không có VPC nào được chọn.
Gỡ lỗi và xử lý lỗi
Để gỡ lỗi và xử lý lỗi, bạn có thể chọn dịch vụ AWS để gửi thông tin chi tiết. Các tùy chọn có sẵn làNone, SNS và SQS.
Đồng tiền
Điều này cho phép bạn phân bổ một giới hạn cụ thể của các lần thực thi đồng thời được phép cho chức năng này.
Kiểm toán và Tuân thủ
Điều này chứa nhật ký được quản lý với sự trợ giúp của AWS CloudTrail.
Sau khi hoàn tất, bạn cần lưu các thay đổi bằng cách sử dụng nút Lưu như được hiển thị ở đây -
Bây giờ, nếu bạn nhấp vào Test, nó sẽ yêu cầu một sự kiện thử nghiệm. Bạn có thể vượt qua một sự kiện thử nghiệm mẫu như sau:
Sự kiện thử nghiệm được tạo như được hiển thị ở đây -
Bây giờ, hãy lưu sự kiện kiểm tra và nhấp vào nút kiểm tra để xem việc thực thi hàm AWS Lambda -
Mã cho index.js như sau -
exports.lambdahandler = (event, context, callback) => {
// TODO implement
console.log(event.key1);
console.log(event.key2);
console.log(event.key3);
callback(null, 'Lambda test');
};
Lưu ý rằng hàm gọi lại được gọi khi có lỗi hoặc thành công. Nếu thành công, bạn có thể thấyLambda test sẽ được hiển thị.
Giám sát
Chọn tab giám sát để xem chi tiết thực thi của chức năng Lambda. Biểu đồ hiển thị chi tiết về thời gian thực hiện, lỗi xảy ra, v.v.
Bạn cũng có thể xem nhật ký trong Cloudwatch. Đối với điều này, hãy truy cập dịch vụ AWS và chọn đồng hồ đám mây như được hiển thị -
Bây giờ, chọn nhật ký từ phía bên trái và nhập tên chức năng của bạn vào bộ lọc -
Hàm AWS Lambda thực thi một mã khi nó được gọi. Chương này thảo luận chi tiết tất cả các bước liên quan đến vòng đời của hàm AWS Lambda.
Các bước để xây dựng một hàm Lambda
Vòng đời của hàm Lambda bao gồm bốn bước cần thiết:
- Authoring
- Deploying
- Monitoring
- Troubleshooting
Tác giả mã Lambda
Mã hàm AWS Lambda có thể được viết bằng các ngôn ngữ sau:
- NodeJS
- Java,
- Python
- C#
- Go.
Chúng tôi có thể viết mã cho AWS Lambda bằng bảng điều khiển AWS, AWS CLI, từ Eclipse IDE, từ Visual Studio IDE, khuôn khổ không máy chủ, v.v.
Bảng sau đây hiển thị danh sách các ngôn ngữ và các công cụ và IDE khác nhau có thể được sử dụng để viết hàm Lambda:
Ngôn ngữ | IDE để tạo mã Lambda |
---|---|
NodeJS | Bảng điều khiển AWS Lambda Visual Studio IDE |
Java | IDE Eclipse |
Python | Bảng điều khiển AWS Lambda |
C # | Visual Studio IDE .NET lõi |
Đi | Bảng điều khiển AWS Lambda |
Triển khai mã Lambda
Khi bạn quyết định ngôn ngữ bạn muốn viết hàm Lambda, có hai cách để triển khai mã:
- Trực tiếp viết mã trong bảng điều khiển AWS
- Zip hoặc jar các tệp với tất cả các tệp và phụ thuộc
Tuy nhiên, hãy nhớ rằng quyền thích hợp phải được cấp cho tệp zip.
Kiểm tra mã Lambda
Mã Lambda có thể được kiểm tra cho các sự kiện bên trong bảng điều khiển AWS Lambda. Cũng có thể kiểm tra chức năng Lambda từ cli AWS và cli không máy chủ. Bảng điều khiển AWS cũng có dữ liệu sự kiện có thể được sử dụng làm sự kiện mẫu trong khi thử nghiệm chức năng AWS Lambda.
Giám sát chức năng Lambda
Việc giám sát chức năng Lambda có thể được thực hiện bằng AWS CloudWatch. Chúng tôi có thể thêm thông báo nhật ký cần thiết bằng các ngôn ngữ mà chúng tôi chọn và thấy tương tự trong AWS CloudWatch.
Để bắt đầu viết hàm Lambda, cần tuân theo một mẫu. Sau đây là các khái niệm cốt lõi chính cần tuân theo để viết một hàm Lambda:
Người xử lý
Trình xử lý là tên của hàm AWS lambda từ nơi bắt đầu thực thi. Nó xuất hiện trong bảng điều khiển AWS như hình dưới đây -
Lưu ý rằng ở đây chúng tôi đã thay đổi trình xử lý mặc định thành một tên khác và cập nhật tương tự trong Trình xử lý -
Lưu ý rằng cách gọi một trình xử lý khác với các ngôn ngữ được chọn làm thời gian chạy.
Các thông số được chuyển cho trình xử lý
Nếu bạn quan sát hàm xử lý, các tham số được truyền là event, context và call back function như hình dưới đây -
Event tham số có tất cả các chi tiết cho trình kích hoạt được sử dụng.
Contextvề cơ bản tham số quan tâm đến chi tiết thời gian chạy để hàm Lambda thực thi. Chúng ta có thể tương tác với hàm Lambda bằng cách sử dụngcontexttham số. Nó có các chi tiết như thời gian còn lại trước khi AWS Lambda kết thúc một hàm, tức là thời gian chờ được chỉ định trong khi tạo hàm Lambda, tên của hàm Lambda, tên nhóm đồng hồ trên đám mây, chi tiết arn, v.v.
Thí dụ
Hãy để chúng tôi hiểu chi tiết thu được từ đối tượng ngữ cảnh AWS Lambda với sự trợ giúp của ví dụ:
exports.lambdahandler = (event, context, callback) => {
// TODO implement
console.log("context object details");
console.log(JSON.stringify(context));
callback(null, 'Lambda test');
};
Khi bạn thực thi hàm Lambda được hiển thị ở trên, bạn có thể thấy kết quả sau:
Đầu ra
Các context chi tiết được đưa ra như sau -
{
"callbackWaitsForEmptyEventLoop":true,"logGroupName":"/aws/lambda/myfirstlambdafunction",
"logStreamName":"2018/05/20/[$LATEST]04f17ee4ff7048d5bb1fedffaa807c71","functionName":
"myfirstlambdafunction","memoryLimitInMB":"128","functionVersion":"$LATEST","invokeid":
"c931e21c-5bf3-11e8-acfe-47fdbb39eee9","awsRequestId":"c931e21c-5bf3-11e8-acfe-47fdbb39eee9",
"invokedFunctionArn":"arn:aws:lambda:us-east-1:625297745038:function:myfirstlambdafunction"
}
Quan sát rằng nó có các chi tiết như functionName, memorylimit, requestId, v.v.
Ghi nhật ký
Các bản ghi được thêm vào bên trong hàm Lambda được hiển thị trong AWS CloudWatch khi hàm AWS thực thi. Cú pháp nhật ký sẽ khác nhau tùy theo ngôn ngữ đã chọn. Ví dụ trongnodejs, nó là console.log.
Đây là kết quả bạn có thể thấy trong AWSCloudWatch -
Xử lý lỗi
Hàm AWS Lambda cung cấp một hàm gọi lại được sử dụng để thông báo cho hàm Lambda rằng đã xảy ra lỗi hoặc thành công. Lưu ý rằng ở đây chúng tôi đã sử dụng nodejs làm thời gian chạy. Việc xử lý lỗi sẽ khác nhau tùy theo ngôn ngữ đã chọn.
Hãy quan sát Ví dụ được đưa ra ở đây để hiểu rõ hơn -
exports.lambdahandler = (event, context, callback) => {
// TODO implement
var error = new Error("There is error in code");
callback(error);
};
Đầu ra
Khi bạn kiểm tra mã Lambda, bạn có thể tìm thấy kết quả như hình dưới đây:
Chi tiết nhật ký như sau:
Nodejs là một trong những ngôn ngữ mà hàm AWS Lambda hỗ trợ. Phiên bản được hỗ trợ với nodejs là v6.10 và v8.10. Trong chương này, chúng ta sẽ tìm hiểu chi tiết về các chức năng khác nhau của hàm AWS Lambda trong NODEJS.
Xử lý trong NodeJS
Để viết hàm LambdaAWS trong nodejs, trước tiên chúng ta nên khai báo một trình xử lý. Trình xử lý trong nodejs là tên của tệp và tên của hàm xuất. Ví dụ, tên của tệp làindex.js và tên hàm xuất là lambda handler, vì vậy trình xử lý tương ứng của nó là index.lambdahandler
Quan sát trình xử lý mẫu được hiển thị ở đây -
exports.lambdahandler = function(event, context, callback) { //code goes here}
Tham số để xử lý
Handler là cốt lõi chính để xây dựng hàm Lambda. Trình xử lý có ba tham số:event, context và callback.
Tham số sự kiện
Nó có tất cả các chi tiết của sự kiện được kích hoạt. Ví dụ, nếu chúng ta đang sử dụng hàm Lambda được kích hoạt trên S3, sự kiện sẽ có thông tin chi tiết của đối tượng S3.
Tham số ngữ cảnh
Nó có các chi tiết về ngữ cảnh như các thuộc tính và chi tiết cấu hình của hàm Lambda.
Chức năng gọi lại
Nó giúp cung cấp thông tin chi tiết lại cho người gọi. Cấu trúc của callback trông như sau:
callback(error, result);
Các tham số của hàm gọi lại được giải thích dưới đây:
Error −Điều này sẽ có thông tin chi tiết nếu có bất kỳ lỗi nào xảy ra trong quá trình thực thi hàm Lambda. Nếu hàm Lambda thành công,null có thể được chuyển làm tham số đầu tiên cho hàm gọi lại.
Result −Điều này sẽ cung cấp các chi tiết về việc thực thi thành công hàm lambda. Nếu xảy ra lỗi, tham số kết quả sẽ bị bỏ qua.
Note −Không bắt buộc phải sử dụng hàm gọi lại trong AWS Lambda. Trong trường hợp nếu không có hàm gọi lại, trình xử lý sẽ trả về giá trị null.
Các chữ ký gọi lại hợp lệ được cung cấp bên dưới:
callback(); // It will return success, but no indication to the caller
callback(null); // It will return success, but no indication to the caller
callback(null, "success"); // It will return the success indication to the caller
callback(error); // It will return the error indication to the caller
Bất cứ khi nào AWS Lambda được thực thi, các chi tiết gọi lại như lỗi hoặc thành công sẽ được đăng nhập vào AWS CloudWatch cùng với các thông báo trên bảng điều khiển, nếu có.
Làm việc với AWS Lambda trong Nodejs8.10
Hãy để chúng tôi hiểu cách làm việc với AWS Lambda trong nodejs8.10 và gọi hàm theo cách đồng bộ và không đồng bộ.
Gọi hàm Lambda theo cách đồng bộ hóa
Ví dụ sau cung cấp cho bạn ý tưởng về cách gọi hàm Lambda theo cách đồng bộ:
exports.handler = function(event, context, callback) {
let arrItems = [4,5,6,8,9,10,35,70,80,31];
function countevennumbers (items) {
return new Promise(resolve => {
setTimeout(() => {
let a = 0;
for (var i in items) {
if (items[i] % 2 == 0) {
a++;
}
}
resolve(a);
},2000);
});
}
let evennumber = countevennumbers(arrItems);
callback(null,'even numbers equals ='+evennumber);
};
Bạn có thể quan sát kết quả sau sau khi kiểm tra mã này trong bảng điều khiển AWS:
Lưu ý rằng đầu ra từ đoạn mã trên là một đối tượng lời hứa. Nó không cung cấp số lượng, vì số lượng được tăng lên bên trong setTimeout và lệnh gọi hàm không đợi thực thi bên trong setTimeout và trả về đối tượng hứa hẹn.
Nếu chúng ta có async/await trên hàm xử lý sẽ nhận được kết quả chính xác từ hàm lambda.
Gọi trình xử lý theo cách không đồng bộ
Ví dụ sau cung cấp cho bạn ý tưởng về cách gọi hàm Lambda theo cách không đồng bộ:
exports.handler = async function(event, context, callback) {
let arrItems = [4,5,6,8,9,10,35,70,80,31];
function countevennumbers (items) {
return new Promise(resolve => {
setTimeout(() => {
let a = 0;
for (var i in items) {
if (items[i] % 2 == 0) {
a++;
}
}
resolve(a);
}, 2000);
});
}
let evennumber = await countevennumbers(arrItems);
callback(null,'even numbers equals ='+evennumber);
};
Chúng tôi đã thêm async và awaittrong đoạn mã trên. Khi chúng tôi sử dụngawaitbên cạnh lời gọi hàm, việc thực thi tạm dừng cho đến khi lời hứa bên trong hàm được giải quyết. Lưu ý rằngawait chỉ có giá trị cho async chức năng.
Bạn có thể quan sát kết quả sau sau khi kiểm tra mã này trong bảng điều khiển AWS:
ContextDetails trong NodeJS
Đối tượng ngữ cảnh cung cấp thông tin chi tiết như tên của hàm Lambda, thời gian còn lại tính bằng mili giây, id yêu cầu, tên nhóm đồng hồ trên đám mây, chi tiết thời gian chờ, v.v.
Các bảng sau đây hiển thị danh sách các phương thức và thuộc tính có sẵn với đối tượng ngữ cảnh:
Phương thức có sẵn cho đối tượng ngữ cảnh
Sr.No | Tên & Mô tả phương pháp |
---|---|
1 | getRemainingTimeInMillis() Phương thức này cung cấp thời gian còn lại tính bằng mili giây cho đến khi hàm Lambda kết thúc hàm |
Các thuộc tính có sẵn cho đối tượng ngữ cảnh
Sr.No | Tên và mô tả thuộc tính |
---|---|
1 | functionName Điều này cung cấp cho tên hàm AWS Lambda |
2 | functionVersion Điều này cung cấp cho phiên bản của hàm AWS Lambda đang thực thi |
3 | nvokedFunctionArn Điều này sẽ cung cấp thông tin chi tiết về ARN. |
4 | memoryLimitInMB Điều này cho thấy giới hạn bộ nhớ được thêm vào khi tạo hàm Lambda |
5 | awsRequestId Điều này cung cấp id yêu cầu AWS. |
6 | logGroupName Điều này sẽ cung cấp tên của tên nhóm đồng hồ đám mây |
7 | logStreamName Điều này sẽ cung cấp tên của tên luồng nhật ký trên cloudwatch nơi các nhật ký được viết. |
số 8 | identity Điều này sẽ cung cấp thông tin chi tiết về nhà cung cấp nhận dạng nhận dạng amazon khi được sử dụng với sdk di động aws. Thông tin chi tiết được đưa ra như sau:
|
9 | clientContext Điều này sẽ chi tiết về ứng dụng khách khi được sử dụng với sdk di động aws. Các chi tiết được đưa ra như sau:
|
Hãy xem ví dụ sau để hiểu rõ hơn về đối tượng ngữ cảnh -
exports.handler = (event, context, callback) => {
// TODO implement
console.log('Remaining time =>', context.getRemainingTimeInMillis());
console.log('functionName =>', context.functionName);
console.log('AWSrequestID =>', context.awsRequestId);
console.log('logGroupName =>', context.log_group_name);
console.log('logStreamName =>', context.log_stream_name);
console.log('clientContext =>', context.clientContext);
callback(null, 'Name of aws Lambda is=>'+context.functionName);
};
Bạn có thể quan sát kết quả sau sau khi kiểm tra mã này trong bảng điều khiển AWS:
Bạn có thể quan sát đầu ra nhật ký sau khi kiểm tra mã này trong bảng điều khiển AWS -
Đăng nhập NodeJS
Chúng ta có thể sử dụng console.log để đăng nhập NodeJS. Chi tiết nhật ký có thể được tìm nạp từ dịch vụ CloudWatch dựa trên hàm Lambda.
Quan sát ví dụ sau để hiểu rõ hơn -
exports.handler = (event, context, callback) => {
// TODO implement
console.log('Logging for AWS Lamnda in NodeJS');
callback(null, 'Name of aws Lambda is=>'+context.functionName);
};
Bạn có thể quan sát kết quả sau sau khi kiểm tra mã này trong bảng điều khiển AWS:
Bạn có thể quan sát ảnh chụp màn hình sau đây từ CloudWatch -
Xử lý lỗi trong NodeJS
Hãy cho chúng tôi hiểu cách thông báo lỗi được thực hiện trong NodeJS. Quan sát đoạn mã sau:
exports.handler = function(event, context, callback) {
// This Source code only throws error.
var error = new Error("something is wrong");
callback(error);
};
Bạn có thể quan sát những điều sau trong đầu ra nhật ký:
Chi tiết lỗi được đưa ra trong cuộc gọi lại như sau:
{
"errorMessage": "something is wrong",
"errorType": "Error",
"stackTrace": [ "exports.handler (/var/task/index.js:2:17)" ]
}
Trong chương này, chúng ta hãy hiểu chi tiết cách tạo một hàm AWS Lambda đơn giản trong Java một cách chi tiết.
Tạo tệp JAR trong Eclipse
Trước khi tiến hành tạo một hàm lambda trong AWS, chúng ta cần hỗ trợ bộ công cụ AWS cho Eclipse. Đối với bất kỳ hướng dẫn về cài đặt tương tự, bạn có thể tham khảoEnvironment Setup chương trong hướng dẫn này.
Khi bạn hoàn tất quá trình cài đặt, hãy làm theo các bước được cung cấp tại đây -
Bước 1
Mở Eclipse IDE và tạo một dự án mới với AWS Lambda Java Project. Quan sát ảnh chụp màn hình dưới đây để hiểu rõ hơn -
Bước 2
Sau khi bạn chọn Next, nó sẽ chuyển hướng bạn đến màn hình hiển thị bên dưới -
Bước 3
Bây giờ, một mã mặc định được tạo cho Loại đầu vào Custom. Khi bạn nhấp vàoFinish nút dự án được tạo như hình dưới đây -
Bước 4
Bây giờ, nhấp chuột phải vào dự án của bạn và xuất nó. Lựa chọnJava / JAR tập tin từ Export thuật sĩ và nhấp chuột Next.
Bước 5
Bây giờ, nếu bạn nhấp vào Next, bạn sẽ được nhắc lưu tệp vào thư mục đích sẽ được hỏi khi bạn nhấp vào tiếp theo.
Sau khi tệp được lưu, hãy quay lại Bảng điều khiển AWS và tạo hàm AWS Lambda cho Java.
Bước 6
Bây giờ, tải lên .jar tệp mà chúng tôi đã tạo bằng cách sử dụng Upload như được hiển thị trong ảnh chụp màn hình dưới đây -
Chi tiết về trình xử lý cho Java
Handler Là package name và class name. Hãy xem ví dụ sau để hiểu chi tiết về trình xử lý:
Thí dụ
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler
Quan sát rằng từ đoạn mã trên, trình xử lý sẽ com.amazonaws.lambda.demo.LambdaFunctionHandler
Bây giờ, chúng ta hãy kiểm tra các thay đổi và xem kết quả -
Đối tượng ngữ cảnh trong Java
Tương tác với AWS Lambda thực thi được thực hiện bằng cách sử dụng ngữ cảnh. Nó cung cấp các phương thức sau để được sử dụng bên trong Java:
Sr.No | Phương pháp và mô tả ngữ cảnh |
---|---|
1 | getMemoryLimitInMB() điều này sẽ cung cấp giới hạn bộ nhớ mà bạn đã chỉ định trong khi tạo hàm lambda. |
2 | getFunctionName() điều này sẽ cung cấp tên của hàm lambda. |
3 | getFunctionVersion() điều này sẽ cung cấp cho phiên bản của hàm lambda đang chạy. |
4 | getInvokedFunctionArn() điều này sẽ cung cấp cho ARN được sử dụng để gọi hàm. |
5 | getAwsRequestId() điều này sẽ cung cấp id yêu cầu aws. Id này được tạo cho hàm lambda và nó là duy nhất. Id có thể được sử dụng với hỗ trợ aws nếu bạn gặp bất kỳ vấn đề nào. |
6 | getLogGroupName() điều này sẽ cung cấp cho tên nhóm đồng hồ đám mây aws được liên kết với hàm aws lambda được tạo. Nó sẽ vô hiệu nếu người dùng iam không có quyền ghi nhật ký đồng hồ trên đám mây. |
7 | getClientContext() điều này sẽ cung cấp thông tin chi tiết về ứng dụng và thiết bị khi được sử dụng với sdk di động aws. Nó sẽ cung cấp các chi tiết như tên và mã phiên bản, id ứng dụng khách, tiêu đề, tên gói ứng dụng. Nó có thể là null. |
số 8 | getIdentity() điều này sẽ cung cấp thông tin chi tiết về nhận dạng của amazon khi được sử dụng với sdk di động aws. Nó có thể là null. |
9 | getRemainingTimeInMillis() điều này sẽ cung cấp thời gian thực thi còn lại tính bằng mili giây khi hàm bị kết thúc sau thời gian chờ được chỉ định. |
10 | getLogger() điều này sẽ cung cấp cho trình ghi nhật ký lambda được liên kết với đối tượng ngữ cảnh. |
Bây giờ, chúng ta hãy cập nhật đoạn mã được đưa ra ở trên và quan sát đầu ra cho một số phương thức được liệt kê ở trên. Hãy quan sát mã Ví dụ dưới đây để hiểu rõ hơn -
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
context.getLogger().log("Input: " + input);
System.out.println("AWS Lambda function name: " + context.getFunctionName());
System.out.println("Memory Allocated: " + context.getMemoryLimitInMB());
System.out.println("Time remaining in milliseconds: " + context.getRemainingTimeInMillis());
System.out.println("Cloudwatch group name " + context.getLogGroupName());
System.out.println("AWS Lambda Request Id " + context.getAwsRequestId());
// TODO: implement your handler
return "Hello from Lambda!";
}
}
Khi bạn chạy mã được đưa ra ở trên, bạn có thể tìm thấy đầu ra như được cung cấp bên dưới:
Nhật ký cho ngữ cảnh
Bạn có thể quan sát đầu ra sau đây khi bạn đang xem đầu ra nhật ký của mình:
Bộ nhớ được cấp cho hàm Lambda là 512MB. Thời gian được phân bổ là 25 giây. Thời gian còn lại như hiển thị ở trên là 24961, tính bằng mili giây. Vì vậy, 25000 - 24961 tương đương với 39 mili giây được sử dụng để thực thi hàm Lambda. Lưu ý rằng tên nhóm Cloudwatch và id yêu cầu cũng được hiển thị như hình trên.
Lưu ý rằng chúng tôi đã sử dụng lệnh sau để in nhật ký trong Java:
System.out.println (“log message”)
Điều tương tự cũng có trong CloudWatch. Đối với điều này, hãy chuyển đến dịch vụ AWS, chọnCloudWatchservices và bấm vào Logs.
Bây giờ, nếu bạn chọn hàm Lambda, nó sẽ hiển thị ngày nhật ký như hình dưới đây -
Đăng nhập Java
Bạn cũng có thể sử dụng Lambdalogger trong Java để ghi dữ liệu. Quan sát ví dụ sau cho thấy điều tương tự -
Thí dụ
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
LambdaLogger logger = context.getLogger();
logger.log("Input: " + input);
logger.log("AWS Lambda function name: " + context.getFunctionName()+"\n");
logger.log("Memory Allocated: " + context.getMemoryLimitInMB()+"\n");
logger.log("Time remaining in milliseconds: " + context.getRemainingTimeInMillis()+"\n");
logger.log("Cloudwatch group name " + context.getLogGroupName()+"\n");
logger.log("AWS Lambda Request Id " + context.getAwsRequestId()+"\n");
// TODO: implement your handler
return "Hello from Lambda!";
}
}
Đoạn mã hiển thị ở trên sẽ cung cấp cho bạn kết quả sau:
Đầu ra trong CloudWatch sẽ như hình dưới đây -
Xử lý lỗi trong Java cho Hàm Lambda
Phần này sẽ giải thích cách xử lý lỗi trong Java cho hàm Lambda. Quan sát đoạn mã sau cho thấy giống nhau:
package com.amazonaws.lambda.errorhandling;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
throw new RuntimeException("Error from aws lambda");
}
}
Lưu ý rằng chi tiết lỗi được hiển thị trong json định dạng với errorMessage Error from AWS Lambda. Ngoài ra,ErrorType và stackTrace cung cấp thêm chi tiết về lỗi.
Đầu ra và đầu ra nhật ký tương ứng của mã được đưa ra ở trên sẽ được hiển thị trong ảnh chụp màn hình sau được đưa ra bên dưới:
Trong chương này, chúng ta sẽ tạo một hàm AWS Lambda đơn giản bằng Python và hiểu chi tiết các khái niệm hoạt động của nó sau đây.
Trước khi tiến hành tạo một hàm Lambda trong AWS, chúng ta cần hỗ trợ bộ công cụ AWS cho Python. Với mục đích này, hãy làm theo các bước dưới đây và quan sát các ảnh chụp màn hình tương ứng được đính kèm -
Bước 1
Đăng nhập vào bảng điều khiển AWS và tạo hàm Lambda và chọn ngôn ngữ là Python.
Bước 2
Bây giờ, hãy nhấp vào Create functionvà nhập các chi tiết để tạo AWS Lambda đơn giản bằng Python. Mã này trả về tin nhắnHello from Lambda using Python và trông như được hiển thị ở đây -
Bước 3
Bây giờ, hãy lưu các thay đổi và kiểm tra mã để xem kết quả. Bạn sẽ thấy kết quả và nhật ký sau khi kiểm tra nó trong bảng điều khiển AWS bằng nút kiểm tra từ giao diện người dùng.
Bước 4
Bây giờ, bạn có thể viết mã bên trong bất kỳ trình soạn thảo nào hoặc IDE cho Python. Ở đây, chúng tôi đang sử dụng mã studio trực quan để viết mã. Sau đó, bạn nên nén tệp và tải lên trong bảng điều khiển AWS.
Ở đây, chúng tôi đã nén mã và sử dụng bảng điều khiển AWS.
Bước 5
Bây giờ, hãy chọn Upload a .ZIP file tùy chọn như hình dưới đây -
Chi tiết về trình xử lý cho Python
Lưu ý rằng trình xử lý phải là tên của tệp theo sau là tên của hàm. Trong trường hợp trên, tên tệp của chúng tôi làhellopython.py và tên của chức năng là my_handler; vì vậy người xử lý sẽ hellopython.my_handler.
Khi quá trình tải lên hoàn tất và các thay đổi được lưu, nó thực sự hiển thị chi tiết của tệp zip trong trình chỉnh sửa trực tuyến trong bảng điều khiển AWS Lambda. Bây giờ, chúng ta hãy kiểm tra mã để xem đầu ra và nhật ký.
Bây giờ, chúng ta hãy hiểu chi tiết về hàm Lambda bằng cách sử dụng mã mẫu sau:
def my_handler(event, context):
return "aws lambda in python using zip file"
Trong đoạn mã trên, tên hàm my_handler có 2 tham số, sự kiện và ngữ cảnh.
Đối tượng ngữ cảnh trong Python
Đối tượng ngữ cảnh cung cấp các chi tiết như tên của hàm Lambda, thời gian còn lại tính bằng mili giây, id yêu cầu, tên nhóm đồng hồ trên đám mây, chi tiết thời gian chờ, v.v.
Các phương thức và thuộc tính có sẵn trên đối tượng ngữ cảnh được hiển thị trong bảng dưới đây:
Sr.No | Tên & Mô tả phương pháp |
---|---|
1 | get_remaining_time_in_millis() Phương thức này cung cấp thời gian còn lại tính bằng mili giây cho đến khi hàm lambda kết thúc hàm |
Sr.No | Thuộc tính & Mô tả |
---|---|
1 | function_name Điều này cung cấp cho tên hàm aws lambda |
2 | function_version Điều này cung cấp cho phiên bản của hàm aws lambda đang thực thi |
3 | invoked_function_arn Điều này sẽ cung cấp thông tin chi tiết về ARN. |
4 | memory_limit_in_mb Điều này cho thấy giới hạn bộ nhớ được thêm vào khi tạo hàm lambda |
5 | aws_request_id Điều này cung cấp id yêu cầu aws. |
6 | og_group_name Điều này sẽ cung cấp tên của tên nhóm đồng hồ đám mây |
7 | log_stream_name Điều này sẽ cung cấp tên của tên luồng nhật ký trên cloudwatch nơi các nhật ký được viết. |
số 8 | identity Điều này sẽ cung cấp thông tin chi tiết về nhà cung cấp nhận dạng nhận dạng amazon khi được sử dụng với sdk di động aws. Thông tin chi tiết được đưa ra như sau:
|
9 | client_context Điều này sẽ chi tiết về ứng dụng khách khi được sử dụng với sdk di động aws. Các chi tiết được đưa ra như sau:
|
Hãy để chúng tôi xem một ví dụ làm việc bằng Python xuất ra các chi tiết ngữ cảnh. Quan sát đoạn mã dưới đây -
def my_handler(event, context):
print("Log stream name:", context.log_stream_name)
print("Log group name:", context.log_group_name)
print("Request ID:",context.aws_request_id)
print("Mem. limits(MB):", context.memory_limit_in_mb)
print("Time remaining (MS):", context.get_remaining_time_in_millis())
return "aws lambda in python using zip file"
Đầu ra tương ứng của mã hiển thị ở trên được đưa ra dưới đây:
Ghi nhật ký bằng Python
Để ghi thông tin bằng Python, chúng ta có thể sử dụng chức năng in hoặc ghi có sẵn. Hãy để chúng tôi sử dụng ví dụ ở trên về ngữ cảnh và kiểm tra trongCloudWatch để xem các bản ghi đã được in chưa. Quan sát đoạn mã sau:
def my_handler(event, context):
print("Log stream name:", context.log_stream_name)
print("Log group name:", context.log_group_name)
print("Request ID:",context.aws_request_id)
print("Mem. limits(MB):", context.memory_limit_in_mb)
print("Time remaining (MS):", context.get_remaining_time_in_millis())
return "aws lambda in python using zip file"
Đầu ra của mã này trong CloudWatch như được hiển thị bên dưới:
Quan sát ví dụ sau để hiểu về cách sử dụng trình ghi nhật ký để in nhật ký lên CloudWatch -
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def my_handler(event, context):
logger.info('Using logger to print messages to cloudwatch logs')
return "aws lambda in python using zip file"
Đầu ra cho điều này sẽ như được hiển thị trong ảnh chụp màn hình dưới đây -
Xử lý lỗi trong Python cho hàm Lambda
Trong phần này, chúng ta hãy xem một ví dụ làm việc cho thấy cách xử lý lỗi trong Python. Quan sát đoạn mã được đưa ra ở đây -
def error_handler(event, context):
raise Exception('Error Occured!')
Màn hình hiển thị nhật ký như trong hình ảnh ở đây -
Hỗ trợ Ngôn ngữ Go là một bổ sung gần đây cho AWS. Để làm việc với Go, bạn cần chọn ngôn ngữ từ bảng điều khiển AWS trong khi tạo hàm AWS Lambda. Trong chương này, chúng ta hãy tìm hiểu chi tiết về hàm AWS Lambda trong ngôn ngữ Go.
Cài đặt Go
Để bắt đầu, chúng tôi cần hỗ trợ Go Language. Trong phần này, chúng ta sẽ đi qua các chi tiết sau để bắt đầu làm việc với AWS Lambda trong Go. Đây là trang web chính thức để tải xuống Go:https://golang.org/dl/
Bây giờ, hãy tải xuống gói tùy theo hệ điều hành. Làm theo quy trình được đưa ra ở đây để cài đặt Go trên hệ điều hành tương ứng.
Cài đặt trên Windows
Hãy quan sát rằng đối với Windows, có sẵn bản tải xuống 32 bit và 64 bit. Tải xuống tệp zip và trích xuất nội dung và lưu trữ trong thư mục bạn chọn.
Thêm các biến môi trường có sẵn tại ControlPanel ---> System ---> Advanced system settings.
Bây giờ, hãy nhấp vào Environment Variables và thêm đường dẫn thư mục như được hiển thị ở đây -
Bạn cũng có thể chỉnh sửa biến hệ thống như được hiển thị ở đây -
Sau khi hoàn tất các bước này, bạn sẽ có thể bắt đầu làm việc với Go. Mở dấu nhắc lệnh và kiểm tra lệnh Go cho phiên bản. Quan sát ảnh chụp màn hình sau để biết điều tương tự.
Cài đặt cho Linux và Mac OS
Để cài đặt các gói trên Linux và Mac OS, hãy làm theo hướng dẫn như hình dưới đây -
Giải nén các gói và cất giữ tại địa điểm /usr/local/go. Bây giờ, hãy thêm/usr/local/go/binvào biến môi trường PATH. Nó có thể được thực hiện bằng cách sử dụng/etc/profile hoặc là $HOME/.profile.
Với mục đích này, bạn có thể sử dụng lệnh sau
export PATH=$PATH:/usr/local/go/bin
Để thêm hỗ trợ AWS cho Windows, Linux và mac, hãy sử dụng phần sau trong dòng lệnh git của bạn:
go.exe get -u github.com/aws/aws-lambda-go/lambda
go.exe get -u github.com/aws/aws-lambda-go/lambdacontext
go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip
Để biên dịch mã Windows / Linux / Mac, hãy sử dụng các lệnh sau:
GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main
Hàm AWS Lambda sử dụng GO
Một chương trình được trả về trong Go khi bản dựng cung cấp một tệp thực thi. Sau đây là một chương trình đơn giản trong Go có hỗ trợ AWS Lambda. Chúng tôi cần nhậpgithub.com/aws/aws-lambda-go/lambda, vì điều này có chức năng lập trình Lambda. Một nhu cầu quan trọng khác đối với AWS Lambda là trình xử lý.
Main.go
// main.go
package main
import (
"github.com/aws/aws-lambda-go/lambda"
)
func hello() (string, error) {
return "Hello Lambda", nil
}
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Lưu ý rằng việc thực hiện Gochương trình bắt đầu từ main nơi lambda. start được gọi với hàm xử lý. Quan sát mã hiển thị bên dưới -
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Bây giờ, chúng ta hãy thực thi tệp ở trên bằng lệnh Go và sau đó nén tệp thực thi.
Cấu trúc của tệp chúng tôi đang sử dụng như được hiển thị ở đây -
Với go build, nó tạo ra một tệp thực thi được gọi là main.exe. Để nén tệp và tải lên trong AWS Lambda, bạn có thể sử dụng quy trình sau:
Để biên dịch mã Windows / Linux / Mac, hãy sử dụng các lệnh sau:
GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main
Sau đó, đăng nhập vào bảng điều khiển AWS và tạo hàm Lambda bằng cách sử dụng Go như thời gian chạy -
Khi hàm được tạo, hãy tải lên tệp zip thực thi được tạo ở trên.
Trình xử lý hàm Lambda với Go
Handler là nơi bắt đầu thực thi chương trình Go. Từ cuộc gọi chính đếnlambda.start, việc thực thi được gọi với hàm xử lý. Lưu ý rằng trình xử lý được thêm vào sẽmain.
Quan sát mã ở đây để hiểu -
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Thực hiện theo các ảnh chụp màn hình được cung cấp bên dưới -
Bây giờ, hãy lưu chức năng và kiểm tra nó. Bạn có thể xem kết quả thực hiện như hình ở đây.
Đầu ra nhật ký tương ứng sẽ được hiển thị ở đây:
Đối tượng ngữ cảnh với Go
AWS Lambda in Go cung cấp các biến và thuộc tính toàn cầu cho ngữ cảnh.
MemoryLimitInMB - Giới hạn bộ nhớ, tính bằng MB được định cấu hình trong aws lambda.
FunctionName - tên của hàm lambda aws.
FunctionVersion - phiên bản của hàm aws lambda đang thực thi.
LogStreamName - tên luồng nhật ký cloudwatch.
LogGroupName - tên nhóm đồng hồ điện toán đám mây.
Các thuộc tính có sẵn trên ngữ cảnh được đưa ra dưới dạng:
AwsRequestID
Đây là id yêu cầu AWS mà bạn nhận được khi hàm AWS Lambda được gọi.
ClientContext
Phần này chứa thông tin chi tiết về ứng dụng khách và thiết bị khi được gọi thông qua AWS Mobile SDK. Nó có thể là null. Ngữ cảnh ứng dụng cung cấp các chi tiết như ID ứng dụng, tiêu đề ứng dụng, tên phiên bản, mã phiên bản và tên gói ứng dụng.
InvokedFunctionArn
ARN của hàm được gọi. ARN không đủ tiêu chuẩn thực thi phiên bản $ LATEST và các bí danh thực thi phiên bản hàm mà nó trỏ tới.
Danh tính
Nó cung cấp thông tin chi tiết về nhà cung cấp danh tính Amazon Cognito khi được sử dụng với SDK di động AWS.
Các thay đổi được thêm vào main.go để in chi tiết ngữ cảnh -
// main.go
package main
import (
"context"
"log"
"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-lambda-go/lambdacontext"
)
func hello(ctx context.Context) (string, error) {
lc, _ := lambdacontext.FromContext(ctx);
log.Print(lc);
log.Print(lc.AwsRequestID);
log.Print(lc.InvokedFunctionArn);
return "Hello Lambda", nil
}
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Chúng tôi cần nhập log và lambda contextđể sử dụng nó với Go. Chi tiết bối cảnh như sau:
func hello(ctx context.Context) (string, error) {
lc, _ := lambdacontext.FromContext(ctx);
log.Print(lc);
log.Print(lc.AwsRequestID);
log.Print(lc.InvokedFunctionArn);
return "Hello Lambda", nil
}
Bạn có thể quan sát kết quả sau khi kiểm tra đoạn mã trên:
Ghi dữ liệu
Với Go bạn có thể ghi dữ liệu bằng mô-đun log hoặc fmt như hình dưới đây -
// main.go
package main
import (
"log"
"fmt"
"github.com/aws/aws-lambda-go/lambda"
)
func hello() (string, error) {
log.Print("Hello from Lambda Go using log");
fmt.Print("Hello from Lambda Go using fmt");
return "Hello Lambda", nil
}
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Đầu ra cho tương tự như hình dưới đây:
Kiểm tra nhật ký trong CloudWatch
Bạn cũng có thể xem nhật ký trong CloudWatch. Đối với điều này, hãy truy cập dịch vụ AWS và chọn cloudwatch và nhấp vàoLogsở phía bên trái. Bây giờ, hãy tìm kiếm hàm Lambda trong danh sách để xem nhật ký -
Lỗi chức năng
Bạn có thể tạo xử lý lỗi tùy chỉnh trong AWS Lambda bằng cách sử dụng mô-đun lỗi như được hiển thị trong mã bên dưới -
// main.go
package main
import (
"errors"
"github.com/aws/aws-lambda-go/lambda"
)
func hello() error {
return errors.New("There is an error in the code!")
}
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Đầu ra cho mã hiển thị ở trên như được đưa ra bên dưới:
Chương này sẽ giải thích cho bạn cách làm việc với hàm AWS Lambda trong C # một cách chi tiết. Ở đây, chúng ta sẽ sử dụng visual studio để viết và triển khai mã cho AWS Lambda. Để biết bất kỳ thông tin và trợ giúp nào về cài đặt Visual studio và thêm bộ công cụ AWS vào Visual Studio, vui lòng tham khảoIntroductionchương trong hướng dẫn này. Sau khi bạn hoàn tất quá trình cài đặt Visual Studio, hãy làm theo các bước dưới đây. Tham khảo các ảnh chụp màn hình tương ứng để hiểu rõ hơn -
Bước 1
Mở Visual Studio của bạn và làm theo các bước để tạo dự án mới. Bấm vàoFile -> New -> Project.
Bước 2
Bây giờ, màn hình sau được hiển thị trong đó bạn chọn AWS Lambda for Visual C#. Lựa chọnAWS Lambda Project (.NET Core).
Bạn có thể thay đổi tên nếu cần, sẽ giữ ở đây tên mặc định. Nhấp chuộtOK để tiếp tục.
Bước tiếp theo sẽ yêu cầu bạn chọn một Blueprint.
Lựa chọn Empty function cho ví dụ này và nhấp vào Finish. Nó sẽ tạo một cấu trúc dự án mới như hình dưới đây:
Bây giờ, hãy chọn Function.cs là tệp chính nơi trình xử lý với sự kiện và ngữ cảnh được tạo cho AWS Lambda.
Cách hiển thị tệp Functions.cs như sau:
Bạn có thể sử dụng lệnh dưới đây để tuần tự hóa các tham số đầu vào và đầu ra cho hàm AWS Lambda.
[assembly:
LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
Chi tiết về trình xử lý cho C #
Trình xử lý được hiển thị như sau:
public string FunctionHandler(string input, ILambdaContext context) {
return input?.ToUpper();
}
Các thành phần khác nhau của đoạn mã trên được giải thích bên dưới:
FunctionHandler −Đây là điểm bắt đầu của hàm C # AWS Lambda.
String input − Các tham số cho trình xử lý string input có tất cả dữ liệu sự kiện như đối tượng S3, chi tiết cổng API, v.v.
ILambdaContext context −ILamdaContext là một giao diện có các chi tiết ngữ cảnh. Nó có các chi tiết như tên hàm lambda, chi tiết bộ nhớ, chi tiết thời gian chờ, v.v.
Trình xử lý Lambda có thể được gọi theo cách đồng bộ và không đồng bộ. Nếu được gọi theo cách đồng bộ như hình trên, bạn có thể có kiểu trả về. Nếu không đồng bộ hơn kiểu trả về phải là vô hiệu.
Bây giờ, chúng ta hãy triển khai AWS Lambda C # và thử nghiệm tương tự. Nhấp chuột phải vào dự án và nhấp vàoPublish to AWS Lambda như hình dưới đây -
Điền vào Function Name và nhấp vào Next. Màn hình tiếp theo được hiển thị làAdvanced Function Details như hình -
Nhập Role Name, Memory và Timeout. Lưu ý rằng ở đây chúng tôi đã chọn vai trò hiện có được tạo và sử dụng bộ nhớ là 128MB và thời gian chờ là 10 giây. Sau khi bấm xongUpload để xuất bản lên bảng điều khiển AWS Lambda.
Bạn có thể thấy màn hình sau khi chức năng AWS Lambda được tải lên. Nhấp chuộtInvokeđể thực thi hàm AWS Lambda đã tạo. Hiện tại, nó hiển thị lỗi vì nó cần một số đầu vào theo mã được viết.
Bây giờ, chúng ta hãy nhập một số đầu vào mẫu và Invokenó một lần nữa. Lưu ý rằng ở đây chúng tôi đã nhập một số văn bản vào hộp nhập liệu và tương tự khi nhấp vàoinvokeđược hiển thị bằng chữ hoa trong phần phản hồi. Đầu ra nhật ký được hiển thị bên dưới -
Bây giờ, chúng ta cũng hãy kiểm tra bảng điều khiển AWS để xem liệu hàm có được tạo như chúng ta đã triển khai hàm từ Visual Studio hay không.
Hàm Lambda được tạo ở trên là aws lambda using csharp và điều tương tự được hiển thị trong bảng điều khiển AWS như được hiển thị trong ảnh chụp màn hình được cung cấp bên dưới -
Chữ ký của người xử lý
Xử lý là điểm bắt đầu để AWS thực thi. Tên của trình xử lý phải được định nghĩa là -
ASSEMBLY::TYPE::METHOD
Chi tiết về chữ ký được giải thích như sau:
ASSEMBLY- Đây là tên của lắp ráp .NET cho ứng dụng được tạo. Về cơ bản nó là tên của thư mục mà từ đó dự án được tạo.
TYPE- Đây là tên của người xử lý. Về cơ bản nó là namespace.classname.
METHOD - Đây là tên của hàm xử lý.
Mã cho chữ ký của trình xử lý như được hiển thị bên dưới:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
namespace AWSLambda3 {
public class Function {
/// <summary>
/// A simple function that takes a string and does a ToUpper
/// </summary>
/// <param name="input"></param>
/// <param name="context"></param>
/// <returns></returns>
public string FunctionHandler(string input, ILambdaContext context) {
return input?.ToUpper();
}
}
}
Lưu ý rằng ở đây lắp ráp là AWSLamda3, Type là namespace .classname là AWSLambda3.Function và Phương pháp là FunctionHandler. Do đó, chữ ký xử lý làAWSLamda3::AWSLambda3.Function::FunctionHandler
Đối tượng ngữ cảnh trong C #
Đối tượng ngữ cảnh cung cấp thông tin hữu ích về thời gian chạy trong môi trường AWS. Các thuộc tính có sẵn trong đối tượng ngữ cảnh như được hiển thị trong bảng sau:
Sr.No | Thuộc tính & Mô tả |
---|---|
1 | MemoryLimitInMB Điều này sẽ cung cấp thông tin chi tiết về bộ nhớ được định cấu hình cho chức năng AWS Lambda |
2 | FunctionName Tên của hàm AWS Lambda |
3 | FunctionVersion Phiên bản của hàm AWS Lambda |
4 | InvokedFunctionArn ARN được sử dụng để gọi hàm này. |
5 | AwsRequestId Id yêu cầu AWS cho hàm AWS đã tạo |
6 | LogStreamName Tên luồng nhật ký Cloudwatch |
7 | LogGroupName Tên nhóm Cloudwatch |
số 8 | ClientContext Thông tin về ứng dụng khách và thiết bị khi được sử dụng với AWS mobile SDK |
9 | Identity Thông tin về danh tính ẩn danh trên amazon khi được sử dụng với AWS mobile SDK |
10 | RemainingTime Thời gian thực hiện còn lại cho đến khi kết thúc chức năng |
11 | Logger Trình ghi nhật ký được liên kết với ngữ cảnh |
Thí dụ
Trong phần này, chúng ta hãy kiểm tra một số thuộc tính trên trong AWS Lambda trong C #. Hãy quan sát mã mẫu dưới đây -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
namespace AWSLambda6 {
public class Function {
/// <summary>
/// </summary>
/// <param name="input"></param>
/// <param name="context"></param>
/// <returns></returns>
public void FunctionHandler(ILambdaContext context) {
LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");
}
}
}
Đầu ra liên quan mà bạn có thể quan sát khi gọi đoạn mã trên trong C# như hình dưới đây -
Đầu ra liên quan mà bạn có thể quan sát khi gọi đoạn mã trên trong AWS Console như hình dưới đây -
Ghi nhật ký bằng C #
Để ghi nhật ký, bạn có thể sử dụng hai chức năng:
context.Logger.Log
LambdaLogger.Log
Quan sát ví dụ sau được hiển thị ở đây:
public void FunctionHandler(ILambdaContext context) {
LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");
}
Đầu ra tương ứng cho mã được đưa ra ở trên được hiển thị ở đây:
Bạn có thể lấy nhật ký từ CloudWatch như hình dưới đây -
Xử lý lỗi trong C # cho Hàm Lambda
Phần này thảo luận về xử lý lỗi trong C #. Để xử lý lỗi,Exception lớp phải được mở rộng như trong ví dụ minh họa bên dưới -
thí dụ
namespace example {
public class AccountAlreadyExistsException : Exception {
public AccountAlreadyExistsException(String message) :
base(message) {
}
}
}
namespace example {
public class Handler {
public static void CreateAccount() {
throw new AccountAlreadyExistsException("Error in AWS Lambda!");
}
}
}
Đầu ra tương ứng cho mã được đưa ra ở trên như được đưa ra bên dưới:
{
"errorType": "LambdaException",
"errorMessage": "Error in AWS Lambda!"
}
Trong các chương trước, chúng ta đã học cách tạo hàm AWS Lambda trong bảng điều khiển AWS. Tuy nhiên, có các tham số khác để tạo một hàm Lambda. Chúng bao gồm phân bổ bộ nhớ, thời gian chờ, v.v.
Trong chương này, hãy để chúng tôi hiểu chi tiết về các thuộc tính cấu hình sau cho AWS Lambda.
Cấp phát bộ nhớ
Đăng nhập vào bảng điều khiển AWS và tạo hoặc chọn chức năng lambda hiện có. Nhấn vàoConfigurationtab để lấy thông tin chi tiết của bộ nhớ được cấp phát. Nhìn vào ảnh chụp màn hình được hiển thị bên dưới -
Lưu ý rằng theo mặc định, bộ nhớ được cấp phát là 128MB. Nếu bạn muốn tăng bộ nhớ, bạn có thể nhấp vào thanh trượt.
Bộ nhớ sẽ được tăng dần lên 64MBkhi bạn di chuyển thanh trượt. Quan sát rằng bộ nhớ tối đa có sẵn là3008MB. Nhìn vào ảnh chụp màn hình được hiển thị bên dưới -
Bạn cũng có thể dùng aws clitừ dấu nhắc lệnh để tăng giới hạn bộ nhớ. Bạn sẽ phải cung cấp cho bộ nhớ với gia số là 64MB.
Bây giờ, chúng ta hãy tăng giới hạn bộ nhớ của AWS Lambda với tên:myfirstlambdafunction.
Chi tiết bộ nhớ của chức năng được hiển thị trong ảnh chụp màn hình dưới đây -
Lệnh được sử dụng để thay đổi bộ nhớ bằng cách sử dụng aws cli như sau -
aws lambda update-function-configuration --function-name your function name --
region region where your function resides --memory-size memory amount --
profile admin user
Đầu ra tương ứng của hàm AWS Lambda myfirstlambdafunctiontrong bảng điều khiển AWS được hiển thị ở đây. Quan sát rằng bộ nhớ được thay đổi từ 128MB thành 256MB.
Thời gian thực hiện tối đa
Thời gian chờ là thời gian được phân bổ cho hàm AWS Lambda để chấm dứt nếu thời gian chờ xảy ra. Hàm AWS Lambda sẽ chạy trong thời gian được phân bổ hoặc kết thúc nếu vượt quá thời gian chờ đã cho. Bạn cần đánh giá thời gian cần thiết để chức năng thực thi và chọn thời gian trongConfiguration trong bảng điều khiển AWS như được hiển thị bên dưới -
Vai trò IAM
Khi tạo hàm AWS Lambda, vai trò hoặc quyền cần được chỉ định. Trong trường hợp bạn cần AWS Lambda cho S3 hoặc dynamicoDB, bạn cần phải chỉ định quyền đối với các dịch vụ của lambda. Dựa trên vai trò được giao, AWS Lambda sẽ quyết định các bước cần thực hiện. Ví dụ: nếu bạn cấp quyền truy cập đầy đủ vào dynamicodb, bạn có thể thêm, cập nhật và xóa các hàng khỏi bảng dynamicodb.
Tên người xử lý
Đây là bước bắt đầu thực thi hàm AWS Lambda. Hàm xử lý có các chi tiết về sự kiện được kích hoạt, đối tượng ngữ cảnh và lệnh gọi lại phải gửi lạisuccess hoặc là error của AWS Lambda.
Định dạng của hàm xử lý trong nodejs được hiển thị ở đây:
exports.handler = (event, context, callback) => {
callback(null, "hello from lambda");
};
Hàm Lambda sử dụng các biến môi trường
Trong phần này, chúng ta sẽ tạo một hàm Lambda đơn giản bằng cách sử dụng các biến môi trường được thêm vào trong phần cấu hình. Với mục đích này, hãy làm theo các bước dưới đây và tham khảo các ảnh chụp màn hình tương ứng -
Bước 1
Vào bảng điều khiển AWS và tạo một hàm trong Lambda như hình.
Bước 2
Bây giờ, hãy thêm các biến môi trường như được hiển thị -
Bước 3
Bây giờ, chúng ta hãy tìm nạp cùng một mã Lambda như sau:
exports.handler = (event, context, callback) => {
var hostName = process.env.host;
var userName = process.env.username;
callback(null, "Environment Variables =>"+hostName+" and "+userName);
};
Bước 4
Để có được chi tiết từ các biến môi trường, chúng ta cần sử dụng process.envnhư hình. Lưu ý rằng cú pháp này dành choNodeJS thời gian chạy.
var hostName = process.env.host;
var userName = process.env.username;
Bước 5
Kết quả đầu ra cho hàm Lambda khi thực thi sẽ như sau:
Chúng ta có thể tạo hàm Lambda và kiểm tra tương tự trong bảng điều khiển AWS. Chương này thảo luận chi tiết về vấn đề này. Với mục đích này, bạn sẽ phải làm theo các bước được đưa ra ở đây và quan sát các ảnh chụp màn hình tương ứng được cung cấp -
Bước 1
Đăng nhập vào Bảng điều khiển AWS https://aws.amazon.com/console/. Bây giờ, bạn sẽ được chuyển hướng đến màn hình nơi các dịch vụ AWS được hiển thị.
Bước 2
Bây giờ, hãy nhấp vào Lambdadịch vụ như được đánh dấu ở trên. Thao tác này sẽ chuyển hướng đến chức năng tạo như hình dưới đây:
Bước 3
Bây giờ, hãy nhấp vào Create functionvà nhập các chi tiết của chức năng. Sau đó, bạn có thể thấy một màn hình như hình dưới đây -
Bước 4
Bạn có thể viết mã của mình bằng cách chọn ngôn ngữ bạn chọn. Mã phải được viết trong trình soạn thảo nếu tùy chọn được chọn là chỉnh sửa mã nội tuyến. Các tùy chọn khác có sẵn như sau:
Bước 5
Sau khi hoàn tất, bạn cần lưu các thay đổi mà nút được đưa ra ở góc trên cùng bên phải như hình dưới đây -
Bước 6
Bây giờ, hãy nhấp vào Testcái nút. Điều này cung cấp tất cả các chi tiết về việc thực thi hàm Lambda như được hiển thị bên dưới:
Bước 7
Mã cho index.js như sau -
exports.handler = (event, context, callback) => {
// TODO implement
callback(null, 'Lambda test');
};
Điều này sẽ gọi Callback functionvà kết quả có thể là lỗi hoặc thành công. Khi thành công, bạn sẽ thấy mộtLambda testthông điệp; nếu lỗi nó sẽ vượt qua null.
Bước 8
Các Role chi tiết cho chức năng Lambda là một phần của cấu hình và được hiển thị như hình dưới đây:
Bước 9
Bây giờ, bạn có thể cập nhật vai trò nếu cần và lưu hàm Lambda. Sau đó, chi tiết bộ nhớ và thời gian chờ cho hàm lambda được hiển thị như hình dưới đây:
Bước 10
Bây giờ, chúng ta cần thêm trigger vào hàm Lambda để nó thực thi khi sự kiện xảy ra. Chi tiết kích hoạt được hiển thị ở đầu màn hình chức năng AWS Lambda như hình dưới đây -
Từ đó, bạn có thể chọn trình kích hoạt mà bạn muốn chức năng Lambda của bạn được kích hoạt. Khi bạn chọn trình kích hoạt, chi tiết cấu hình cho trình kích hoạt phải được thêm vào.
Ví dụ, để kích hoạt trên S3, chi tiết cấu hình sẽ được thêm vào như sau:
Bước 11
Bây giờ, hãy chọn nhóm mà bạn muốn kích hoạt. Loại sự kiện có các chi tiết sau:
Bước 12
Đối với trình kích hoạt, bạn cũng có thể đề cập đến các tệp loại tiền tố hoặc mẫu tệp, Lambda phải được kích hoạt. Chi tiết như hình -
Bước 13
Bây giờ, hãy điền các chi tiết cần thiết cho trình kích hoạt và nhấp vào Add . Lưu chức năng Lambda để kích hoạt được thêm vào. Lưu chức năng triển khai chi tiết và từ bây giờ trở đi bất cứ khi nào tệp được thêm vào nhóm S3, Lambda sẽ được kích hoạt.
Quan sát ảnh chụp màn hình sau cho thấy trình kích hoạt S3 được thêm vào AWS Lambda -
Bước 14
Bây giờ, chúng ta hãy sử dụng sự kiện mẫu S3 để kiểm tra hàm Lambda. Mã cho cùng một được hiển thị ở đây -
Sự kiện mẫu đặt trên Amazon S3
{
"Records": [{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"ExampleIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg",
"size": 1024
},
"bucket": {
"arn": bucketarn,
"name": "Examplebucket",
"ownerIdentity": {
"principalId": "Example"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "Example123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "Example123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "Example"
},
"eventSource": "aws:s3"
}]
}
Bạn sẽ phải sử dụng lệnh sau để lấy thông tin chi tiết của tệp được tải lên từ sự kiện đưa S3 -
event.Records[0].s3.object.key //will display the name of the file
Bạn sẽ phải sử dụng lệnh sau để lấy tên thùng:
event.Records[0].s3.bucket.name //will give the name of the bucket.
Bạn sẽ phải sử dụng lệnh sau để lấy EventName -
event.Records[0].eventName // will display the event name
Bước 15
Bây giờ, chúng ta hãy cập nhật mã AWS Lambda để in chi tiết S3 như hình dưới đây -
exports.lambdahandler = (event, context, callback) => {
callback(null, "Bucket name: "+event.Records[0].s3.bucket.name+"
File name:"+event.Records[0].s3.object.key );
};
Bước 16
Lưu các thay đổi. Nhấp chuộtTest và nhập sự kiện mẫu S3 -
Bước 17
Bây giờ bấm vào Test và bạn có thể thấy đầu ra như được hiển thị -
Bước 18
Để kiểm tra trình kích hoạt trên S3 bằng dịch vụ S3 AWS, hãy tải lên một tệp trong nhóm S3: test bucket trigger. Cập nhật vai trò được sử dụng với Lambda để nhận quyền của S3 và chính sách SES (để gửi thư). Thao tác này sẽ cập nhật mã AWS Lambda để gửi thư để xem trình kích hoạt hoạt động -
Mã AWS Lambda được cập nhật như được hiển thị:
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
exports.lambdahandler = function(event, context, callback) {
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "Bucket name: "+event.Records[0].s3.bucket.name+" File name:"+event.Records[0].s3.object.key
}
},
Subject: {
Data: "S3 and AWS Lambda"
}
},
Example: "[email protected]"
};
console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
Ảnh chụp màn hình tương ứng được hiển thị ở đây -
Bước 19
Bây giờ, hãy tải tệp lên và kiểm tra id thư được cung cấp trong mã AWS Lambda -
AWS CLIlà một công cụ dòng lệnh giúp làm việc với các dịch vụ AWS. Chúng ta có thể sử dụng nó để tạo, cập nhật, xóa, gọi hàm aws lambda. Trong chương này, bạn sẽ thảo luận chi tiết về cài đặt và sử dụng AWS CLI.
Cài đặt AWS CLI
Phần này sẽ hướng dẫn bạn cài đặt AWS CLI trên các hệ điều hành khác nhau. Làm theo các bước được đưa ra và quan sát ảnh chụp màn hình tương ứng ở bất kỳ nơi nào được đính kèm.
Cho cửa sổ
Kiểm tra cấu hình Windows của bạn và chọn một trong các liên kết sau để cài đặt AWS CLI MSI -
Đối với Windows 64 bit - AWS CLI MSI cài đặt cho Windows (64 bit)
Đối với Windows 32 bit - AWS CLI MSI cài đặt cho Windows (32)
Khi bạn chọn liên kết tương ứng và nhấp vào liên kết đó, bạn có thể tìm thấy một Cửa sổ như được hiển thị ở đây -
Tiếp theo, đặt Environment path in windows như thể hiện trong ảnh chụp màn hình bên dưới -
Sau khi hoàn tất, bạn có thể sử dụng lệnh sau trên dấu nhắc lệnh, để xem nếu aws cli được cài đặt -
aws --version
Nó hiển thị các chi tiết của phiên bản aws-cli như được hiển thị trong ảnh chụp màn hình sau:
Đối với Linux / Mac
Để cài đặt trên Linux và Mac, bạn cần có Python 2.6.3 hoặc cao hơn. Sau đó, sử dụng các lệnh sau cho các quá trình cài đặt tiếp theo:
$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" $ unzip awscli-bundle.zip
$ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
Bây giờ, chúng ta cần định cấu hình cài đặt AWS. Bạn có thể sử dụng lệnh sau cho mục đích này:
aws configure
Với mục đích này, nó yêu cầu các chi tiết như -
- ID khóa truy cập AWS
- Khóa truy cập bí mật AWS
- Tên vùng mặc định
- Đầu ra mặc định từ định dạng
Bạn có thể lấy những thông tin chi tiết này từ bảng điều khiển aws của mình. Chuyển đến bạn Tên tài khoản ở góc trên bên phải như hình -
Bây giờ, hãy nhấp vào My Security Credentialsvà chọn người dùng từ phía bên trái. Thêm người dùng với các chi tiết như được yêu cầu.
Thêm người dùng và nhận khóa truy cập và khóa bí mật. Để xem khóa truy cập mới, hãy chọnShow. Thông tin đăng nhập của bạn sẽ giống như hình dưới đây -
Access key ID − AOSAIOSFOCDD7Example
Secret access key − aJuirCVtnROUN/K7MDENG/bPxRfiCYExampleKEY
Các lệnh tham chiếu cho AWS CLIS
Bảng sau sẽ cung cấp các tham chiếu lệnh có sẵn để làm việc với aws cli.
Tên của lệnh cli aws | Tham chiếu lệnh |
---|---|
create-function | create-function - function-name <value> --runtime <value> --role <value> --handler <value> [--code <value>] [--description <value>] [--timeout < value>] [--memory-size <value>] [--enosystem <value>] [--kms-key-arn <value>] [--tags <value>] [--zip-file <value> ] [--cli-input-json <value>] |
list-functions | list-functions [--master-region <value>] [- function-version <value>] [--max-items <value>] [--cli-input-json <value>] [--starting- mã thông báo <giá trị>] [--page-size <giá trị>] [--generate-cli-khung xương <giá trị>] |
get-function | get-function - function-name <value> [--qualifier <value>] [--cli-input-json <value>] [--generate-cli-khung xương <value>] |
get-function-configuration | get-function-configuration - functions-name <value> [--qualifier <value>] [--cli-input-json <value>] [--generate-cli-khung xương <value>] |
get-account-settings | get-account-settings [--cli-input-json <value>] [--generate-cli-khung xương <value>] |
update-function-configuration | update-function-configuration - functions-name <value> [--role <value>] [--handler <value>] [--description <value>] [--timeout <value>] [--memory- kích thước <giá trị>] [--vpc-config <giá trị>] [--en môi trường <giá trị>] [--runtime <giá trị>] [--dead-letter-config <giá trị>] [--kms-key- arn <value>] [--tracing-config <value>] [--revision-id <value>] [--cli-input-json <value>] [--generate-cli-bone <value>] |
update-function-code | update-function-code - functions-name <value> [--zip-file <value>] [--s3-bucket <value>] [--s3-key <value>] [--s3-object- phiên bản <giá trị>] [--publish | --no-Publishing] [--dry-run | --no-dry-run] [--revision-id <value>] [- cli-input-json <value>] [- create-cli-bone <value>] |
delete-function | delete-function - function-name <value> [--qualifier <value>] [--cli-input-json <value>] [--generate-cli-bone <value>] |
Bây giờ, chúng ta hãy thảo luận chi tiết về các lệnh này.
chức năng tạo
Api này sẽ tạo một hàm lambda mới. Mã cần được cung cấp ở định dạng zip. Nếu hàm được tạo đã tồn tại, api sẽ bị lỗi. Lưu ý rằng tên hàm có phân biệt chữ hoa chữ thường.
Lệnh bao gồm
Danh sách các lệnh mà bạn có thể sử dụng với hàm tạo được đưa ra ở đây:
create-function
--function-name <value>
--runtime <value>
--role <value>
--handler <value>
[--code <value>]
[--description <value>]
[--timeout <value>]
[--memory-size <value>]
[--environment <value>]
[--kms-key-arn <value>]
[--tags <value>]
[--zip-file <value>]
[--cli-input-json <value>]
Tùy chọn bao gồm
Các tùy chọn khác nhau mà bạn có thể sử dụng với các chức năng trên như sau:
--function-name (string)- Cái này lấy tên của hàm. Tên có thể là các ký tự 64 bit.
--runtime(string)- Ở đây bạn cần chỉ định môi trường thời gian chạy tức là lựa chọn ngôn ngữ. Chi tiết về thời gian chạy như được đưa ra bên dưới:
Các tùy chọn có sẵn | thời gian chạy |
---|---|
Python v3.6 | python3,6 |
Python v2.7 | python2,7 |
NodeJS v6.10 | nodejs6.10 |
NodeJS v8.10 | nodejs8.10 |
Java | java8 |
C # 1 | dotnetcore1.0 |
C # 2 | dotnetcore2.0 |
Đi | go1.x |
--role(string)- Đây sẽ là tên của chính sách lambda tức là vai trò được trao cho hàm lambda để truy cập các dịch vụ khác. Nó sẽ có quyền theo vai trò được chỉ định.
--handler (string) - Đây là tên của trình xử lý nơi bắt đầu thực thi mã lambda.
- Đối với nodejs, tên trình xử lý là tên mô-đun mà chúng tôi xuất.
- Đối với java, nó là package.classname :: handler hoặc package.classname
- Đối với python, trình xử lý là nameofthefile.
--code (structure) −AWS Lambda mã
--description (string) - mô tả cho hàm AWS Lambda
--timeout (integer)- timeout sẽ có thời gian mà hàm lambda phải kết thúc thực thi. Mặc định là 3 giây.
--memory-size (integer)- Đây là vùng nhớ được cấp cho hàm aws lambda. AWS sẽ phân bổ lượng CPU và phân bổ bộ nhớ dựa trên bộ nhớ đã cho.
--environment (structure) - nó là một đối tượng với các chi tiết về môi trường được yêu cầu trong hàm aws lambda.
e.g : Variables = {Name1 = string, Name2 = string}
--kms-key-arn (string)- đây là tên tài nguyên amazon (ARN) được sử dụng để mã hóa các biến môi trường. Nếu không được cung cấp, nó sẽ lấy cài đặt mặc định để mã hóa.
--zip-file (blob) - đường dẫn của tệp zip có các chi tiết của mã.
--cli-input-json (string): Thực hiện hoạt động dịch vụ dựa trên chuỗi JSON được cung cấp. Chuỗi JSON tuân theo định dạng được cung cấp bởi --generate-cli-bone. Nếu các đối số khác được cung cấp trên dòng lệnh, các giá trị CLI sẽ ghi đè các giá trị do JSON cung cấp.
Bây giờ, chúng ta hãy tạo một hàm AWS Lambda đơn giản bằng cách sử dụng thời gian chạy dưới dạng nodejs và thêm một số console.logs sẽ được in.
Hãy xem xét một mã mẫu để hiểu giống nhau -
exports.handler = async (event) => {
console.log("Using aws cli");
return 'Hello from Lambda from aws cli!'
};
Bây giờ, nén tệp và lưu trữ dưới dạng awscli.zip.
Nhận ARN
Đối với vai trò, chúng ta hãy sử dụng arntừ vai trò hiện có mà chúng tôi đã tạo. Để có được ARN, bạn sẽ phải làm theo các bước như hình dưới đây. Quan sát các ảnh chụp màn hình tương ứng ở bất cứ nơi nào được đính kèm -
Bước 1
Đi tới IAM và chọn vai trò bạn muốn Roles. Chi tiết ARN cho vai trò được hiển thị như hình dưới đây. Sử dụngRole ARN với create-function trong aws cli.
Quan sát ở đây rằng vai trò của arn là: arn: aws: iam :: 625297745038: role / lambdaapipolicy
Lệnh có các giá trị cho create-function như sau -
aws lambda create-function
--function-name "awslambdausingcli"
--runtime "nodejs8.10"
--role "arn:aws:iam::625297745038:role/lambdaapipolicy"
--handler "awscli.handler"
--timeout 5
--memory-size 256
--zip-file "fileb://awscli.zip"
Bây giờ, nếu bạn chạy lệnh trong aws cli, bạn có thể tìm thấy kết quả như hình dưới đây:
Trong bảng điều khiển AWS, hàm Lambda được hiển thị như hình dưới đây:
Chi tiết các chức năng được hiển thị tại đây -
Các chi tiết của cấu hình như dưới đây:
Bạn có thể kiểm tra chức năng và kiểm tra đầu ra như hình:
Đầu ra Nhật ký tương ứng được hiển thị ở đây -
danh sách-chức năng
Api này cung cấp danh sách các hàm được tạo cho đến nay trong AWS Lambda.
Lệnh bao gồm
Sau đây là các lệnh được liên kết với API này:
list-functions
[--master-region <value>]
[--function-version <value>]
[--max-items <value>]
[--cli-input-json <value>]
Các tùy chọn trong danh sách các chức năng
Sau đây là các tùy chọn khác nhau mà bạn có thể sử dụng trong api danh sách chức năng này:
--master-region(string)- tùy chọn. Khu vực mà từ đó các chức năng cần được hiển thị.
--function-version(string)- tùy chọn. Điều này sẽ cung cấp cho phiên bản chức năng.
--max-items(integer)- tùy chọn. Điều này sẽ cung cấp cho các mặt hàng theo giá trị được chỉ định.
--cli-input-json(string)- tùy chọn. Sẽ thực hiện thao tác dựa trên tệp json được cung cấp.
Lệnh với các giá trị list-functions như sau -
aws lambda list-functions --max-items 3
Lệnh hiển thị chi tiết như sau:
hàm get
Api này sẽ cung cấp chi tiết về các chức năng và cũng có một liên kết url có tệp zip được tải lên bằng cách sử dụng hàm tạo. Url với chi tiết zip sẽ chỉ có hiệu lực trong 10 phút.
Lệnh bao gồm
Sau đây là các lệnh liên quan đến api này:
get-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Tùy chọn bao gồm
--function-name- Tên của hàm AWS Lambda. Bạn cũng có thể chỉ định Tên tài nguyên Amazon của hàm.
--qualifier(string)- Không bắt buộc. Phiên bản chức năng có thể được sử dụng để lấy thông tin chi tiết của chức năng.
Lệnh có các giá trị cho hàm get là:
aws lambda get-function --function-name awslambdausingcli
Chi tiết hiển thị lệnh như sau:
Nó cung cấp cho url có mã zip được tải lên. Trong trường hợp trên, url là -
https://prod-04-2014-
tasks.s3.amazonaws.com/snapshots/625297745038/awslambdausingcli-97048f8d-4a08
-4ed9-99d9-acb00d2063d2?versionId=d04HKvPu9S2zz8pzjbW6Rmf5o5fxnc_r&X-Amz-Security
-Token=FQoDYXdzEKT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDCpTmGvtwKToPBiWcyK3A96UcJEnwvYDhMbbxu
%2Bg2gffK2ocfnlEeiCHak8QqqE1RFpbKrdks9NzxP9gNbagL4M9RValxJ1a9PUY%2FOdAekscRHOiX00MVAxUlI8
2pKryhdOwLJWSj0uRzqvOxCcBwJenHrSNPeG6lMa2ZDo0qZFEUDONSaTg4nuSnJK1f6t3pMAKu4vF9wPvf92G%2BU
60rUxwleggigISmD9l1IlZse3%2BVF1JlNuN%2F5d85v0y2Q%2F%2BO515CybcZpn91sHPYG8JMJ00LsrkQ2Ww4VU
9Zz5c5QYH4JYPj0CyEgSz9b%2FMceMPpOoPUAMjctb%2FEwQqcShZeqAr9%2Fcd2ZI%2BXl2%2Bs4ri0ucgPvQQvs
eGIIiZbX3GqdwR2jb1nylrAEIfiuFMoSWfcFYoYtuL0MZnjGR9jy2GNkp6MB%2BlHHr7%2BnuFRUzU26rgDYmdE1w
Rb3%2B21Jm49WGDa9opRLvUxFaux57Or70haib2FuKzN6Gf3Vzzk5KPdWsYUpaLyf%2B1ovEytOZhB1JEXuCs%2FG
IlOXS88yxT%2BpOKmyxweiezpGgI%2FAkSAQTbSRsYQKIOFyIJNHzplwrJKhy28vy60numIBIo9Zqq2AU%3D
&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20180527T112426Z&X-Amz-
SignedHeaders=host&X-Amz-Expires=600&X-Amz-
Credential=ASIAICSQHLSBWFP37U4Q%2F20180527%2Fus-
east-1%2Fs3%2Faws4_request&X-Amz-Signature=
8b97e7d6d7da13313068e027894d2c875be5e50a0c5a62550f55307985bdc1aa
get-function-configuration
Điều này sẽ cung cấp chi tiết cấu hình của chức năng AWS Lambda.
Sau đây là các lệnh được sử dụng cùng với api này:
get-function-configuration
--function-name <value>
[--qualifier <value>]
The following are the options used with
--function-name (string) −tên của hàm lambda aws. Bạn cũng có thể chỉ định Tên tài nguyên Amazon của hàm.
--qualifier(string) − Tùy chọn. Phiên bản chức năng có thể được sử dụng để lấy thông tin chi tiết của chức năng.
Lệnh có các giá trị cho hàm get là:
aws lambda get-function-configuration --function-name awslambdausingcli
Lệnh hiển thị chi tiết như sau:
get-account-settings
Api này cung cấp các cài đặt tài khoản.
Các lệnh liên quan
Lệnh mà bạn có thể sử dụng với api này là:
get-account-settings
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Các tùy chọn liên quan
Bạn có thể sử dụng các tùy chọn sau với api này:
--cli-input-json(string) − Thực hiện dịch vụ dựa trên chuỗi json được cung cấp.
--generate-cli-skeleton(string) − Nó in đầu ra json mà không cần gửi yêu cầu API.
Bạn có thể sử dụng lệnh sau cho get-account-settings -
aws lambda get-account-settings
Bạn có thể thấy kết quả sau khi thực hiện lệnh được đưa ra ở trên:
cập nhật-chức năng-cấu hình
Api này giúp cập nhật chi tiết cấu hình cho hàm AWS Lambda được tạo. Bạn có thể thay đổi bộ nhớ, thời gian chờ, trình xử lý, vai trò, thời gian chạy, mô tả, v.v.
Các lệnh liên quan
Sau đây là các lệnh liên quan đến api update-function-configuration:
update-function-configuration
--function-name <value>
[--role <value>]
[--handler <value>]
[--description <value>]
[--timeout <value>]
[--memory-size <value>]
[--environment <value>]
[--runtime <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Các tùy chọn liên quan
Sau đây là các tùy chọn liên quan đến api update-function-configuration:
--function-name − tên của hàm lambda aws
--role (string) −không bắt buộc. ARN của vai trò cần được cập nhật.
--handler (string) −không bắt buộc. Trình xử lý chi tiết của hàm aws lambda.
--description(string) −không bắt buộc. Mô tả cho chức năng.
--timeout(integer) −không bắt buộc. Thời gian cần thiết để hàm lambda aws có thể kết thúc.
--memory-size(integer) −không bắt buộc. Đây là bộ nhớ được cấp cho hàm lambda aws. AWS sẽ phân bổ lượng CPU và phân bổ bộ nhớ dựa trên bộ nhớ đã cho.
--environment (structure) −không bắt buộc. Nó là một đối tượng với thông tin chi tiết về môi trường được yêu cầu trong hàm aws lambda.
e.g: Variables = {Name1 = string, Name2 = string}
--runtime(string) − Ở đây bạn cần chỉ định môi trường thời gian chạy tức là lựa chọn ngôn ngữ.
Chi tiết về thời gian chạy được hiển thị trong bảng dưới đây:
Các tùy chọn có sẵn | thời gian chạy |
---|---|
Python v3.6 | python3,6 |
Python v2.7 | python2,7 |
NodeJS v6.10 | nodejs6.10 |
NodeJS v8.10 | nodejs8.10 |
Java | java8 |
C # 1 | dotnetcore1.0 |
C # 2 | dotnetcore2.0 |
Đi | go1.x |
--cli-input-json (string) −không bắt buộc. Thao tác này sẽ thực hiện thao tác trên api như được chỉ định trong chuỗi json được cung cấp.
--generate-cli-skeleton (string) −không bắt buộc. Điều này sẽ xuất ra khung JSON của tất cả các chi tiết mà không cần thực thi api. Đầu ra có thể được sử dụng làm đầu vào cho--cli-input-json.
Bây giờ, chúng ta hãy kiểm tra bộ nhớ và thời gian chờ của hàm AWS Lambda mà chúng ta đã tạo trước đó. Thực hiện theo các Bước dưới đây và quan sát các ảnh chụp màn hình tương ứng được đính kèm cho mục đích này -
Bước 1
Bộ nhớ và thời gian chờ trước khi thay đổi xảy ra như sau:
Bước 2
Bây giờ với update-function-configuration, chúng ta hãy thay đổi bộ nhớ và thời gian chờ thành 320MB và thời gian chờ thành 10 giây. Với mục đích này, hãy sử dụng lệnh sau với các giá trị:
aws lambda update-function-configuration --function-name “awslambdusingcli”
--timeout 10 --memory-size 320
Bước 3
Sau đó, bạn có thể thấy đầu ra sau đây dưới dạng màn hình:
Bước 4
Màn hình trong bảng điều khiển AWS sau khi sử dụng update-function-configuration như sau -
Cập nhật-chức năng-mã
Api này sẽ cập nhật mã cho một hàm AWS Lambda hiện có.
Các lệnh liên quan
update-function-code
--function-name <value>
[--zip-file <value>]
[--s3-bucket <value>]
[--s3-key <value>]
[--s3-object-version <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Các tùy chọn liên quan
Sau đây là các tùy chọn liên quan đến api mã update-function-code:
--function-name(string) − tên của hàm lambda aws
--zip-file (blob) −không bắt buộc. Đường dẫn của tệp zip có mã được cập nhật.
--s3-bucket(string) −không bắt buộc. Tên nhóm S3 có tệp zip với mã được tải lên.
--s3-key(string) −không bắt buộc. Tên khóa đối tượng AWS s3 phải được tải lên.
--s3-object-version (string) −không bắt buộc. Phiên bản đối tượng AWS s3.
--cli-input-json (string) −không bắt buộc. Thao tác này sẽ thực hiện thao tác trên api như được chỉ định trong chuỗi json được cung cấp.
--generate-cli-skeleton (string) −không bắt buộc. Điều này sẽ xuất ra khung JSON của tất cả các chi tiết mà không cần thực thi api. Đầu ra có thể được sử dụng làm đầu vào cho --cli-input-json.
Mã được cập nhật như hình dưới đây -
exports.handler = async (event, context) => {
console.log("Using aws cli");
console.log()
return 'Hello from Lambda from aws cli!'
};
Bạn có thể sử dụng những thứ sau command with values for this purpose -
aws lambda update-function-code --function-name "awslambdausingcli"
--zip-file "fileb://awscli.zip"
Đầu ra tương ứng được hiển thị ở đây -
Màn hình từ bảng điều khiển AWS như được hiển thị ở đây -
Đầu ra nhật ký tương ứng như hình dưới đây -
chức năng xóa
Các delete aws cli api sẽ xóa chức năng đã cho.
Lệnh bao gồm
Chi tiết lệnh cho tương tự được đưa ra ở đây -
delete-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Tùy chọn bao gồm
Các tùy chọn bao gồm trong api này như được đưa ra bên dưới -
--function-name(string) − điều này sẽ lấy tên hàm lambda hoặc arn của hàm lambda aws.
--qualifier (string) −Đây là tùy chọn. Tại đây bạn có thể chỉ định phiên bản aws lambda cần được xóa.
-- cli-input-json(string) −Thực hiện hoạt động dịch vụ dựa trên chuỗi JSON được cung cấp. Chuỗi JSON tuân theo định dạng được cung cấp bởi --generate-cli-bone. Nếu các đối số khác được cung cấp trên dòng lệnh, các giá trị CLI sẽ ghi đè các giá trị do JSON cung cấp.
--generate-cli-skeleton(string) − nó in khung xương json ra đầu ra tiêu chuẩn mà không cần gửi yêu cầu API.
aws lambda delete-function --function-name "lambdatestcli"
Bây giờ, hãy quan sát rằng hàm sẽ không được nhìn thấy trong danh sách hàm AWS Lambda -
AWS Lambda có thể được tạo và triển khai bằng cách sử dụng khuôn khổ không máy chủ. Nó cho phép bạn tạo các trình kích hoạt AWS Lambda và cũng triển khai tương tự bằng cách tạo các vai trò bắt buộc. Serverless framework cho phép xử lý các dự án lớn một cách dễ dàng hơn. Các sự kiện và tài nguyên cần thiết được viết ở một nơi và chỉ một số lệnh sẽ giúp triển khai toàn bộ chức năng trên bảng điều khiển AWS.
Trong chương này, bạn sẽ tìm hiểu chi tiết cách bắt đầu với AWS serverless framework.
Cài đặt Serverless Framework bằng npm install
Để bắt đầu, trước tiên bạn cần cài đặt nodejs. Bạn có thể kiểm tra nodejs như sau:
Bạn sẽ phải sử dụng lệnh sau để cài đặt serverless bằng gói npm -
npm install -g serverless
Sau khi hoàn tất npm, hãy thực thi lệnh serverless hiển thị danh sách lệnh sẽ được sử dụng để tạo và triển khai hàm AWS Lambda. Quan sát các ảnh chụp màn hình dưới đây -
Bạn cũng có thể sử dụng sls thay vì serverless. sls là lệnh viết tắt cho serverless.
Trong trường hợp bạn cần trợ giúp về lệnh sls, bạn có thể sử dụng lệnh sau:
sls create --help
Để tạo một khung công tác không máy chủ, bạn phải làm theo các bước dưới đây:
Bước 1
Để bắt đầu sử dụng serverless framework, chúng ta cần thêm thông tin đăng nhập. Bằng cách này, bạn có thể là người dùng đầu tiên trong bảng điều khiển AWS như sau:
Bước 2
Bấm vào Next:Permissionsđể thêm quyền. Bạn sẽ phải đính kèm các chính sách hiện có hoặc Quyền truy cập của Quản trị viên cho người dùng này.
Bước 3
Nhấp chuột Create Userđể thêm người dùng. Nó sẽ hiển thị khóa truy cập và khóa bí mật mà chúng ta cần để định cấu hình khung máy chủ -
Định cấu hình AWS Serverless Framework
Hãy để chúng tôi xem cách định cấu hình khung máy chủ AWS. Bạn có thể sử dụng lệnh sau cho mục đích này:
sls config credentials --provider aws --key accesskey --secret secretkey
Lưu ý rằng các chi tiết của thông tin xác thực đã nhập, đó là access key và secret key được lưu trữ trong file /aws/credentials.
Đầu tiên, tạo một thư mục nơi bạn muốn các tệp dự án của mình được lưu trữ.
Tiếp theo, chúng ta sẽ bắt đầu công việc trong aws-serverless thư mục.
Tạo AWS Lambda bằng cách sử dụng Serverless Framework
Bây giờ, chúng ta hãy tạo một hàm Lambda với khung công tác không máy chủ bằng cách sử dụng Các bước dưới đây:
Bước 1
Sau đây là thông tin chi tiết về serverless create lệnh -
Bước 2
Bây giờ, chúng ta cần gán mẫu như sau:
AWS-nodejs, aws-nodejs-typescript, aws-nodejs-ecma-script, aws-python, aws-python3, aws-groovy-gradle etc.
Bước 3
Chúng tôi sẽ tận dụng aws-nodejsmẫu để tạo dự án đầu tiên của chúng tôi bằng cách sử dụng khuôn khổ không máy chủ. Lệnh cho mục đích tương tự như được hiển thị ở đây -
sls create --template aws-nodejs
Lưu ý rằng lệnh này tạo một bản soạn sẵn cho mẫu aws-nodejs.
Bước 4
Bây giờ, hãy mở thư mục đã tạo trong IDE. Ở đây chúng tôi đang sử dụng mã Visual Studio và cấu trúc thư mục như sau:
Bước 5
Có 2 tệp được tạo: handler.js và Serverless.yml
Chi tiết chức năng cơ bản của AWS Lambda được hiển thị trong handler.js như sau -
'use strict';
module.exports.hello = (event, context, callback) => {
const response = {
statusCode: 200,
body: JSON.stringify({
message: 'Go Serverless v1.0! Your function executed successfully!',
input: event,
}),
};
callback(null, response);
// Use this code if you don't use the http event with the LAMBDA-PROXY integration
// callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};
Tập tin này Serverless.yml có chi tiết cấu hình của khung công tác không máy chủ như được hiển thị bên dưới -
# Welcome to Serverless!
#
# This file is the main config file for your service.
# It's very minimal at this point and uses default values.
# You can always add more config options for more control.
# We've included some commented out config Examples here.
# Just uncomment any of them to get that config option.
#
# For full config options, check the docs:
# docs.serverless.com
#
# Happy Coding!
service: aws-nodejs # NOTE: update this with your service name
# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"
provider:
name: aws
runtime: nodejs6.10
# you can overwrite defaults here
# stage: dev
# region: us-east-1
# you can add statements to the Lambda function's IAM Role here
# iamRoleStatements:
# - Effect: "Allow"
# Action:
# - "s3:ListBucket"
# Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] }
# - Effect: "Allow"
# Action:
# - "s3:PutObject"
# Resource:
# Fn::Join:
# - ""
# - - "arn:aws:s3:::"
# - "Ref" : "ServerlessDeploymentBucket"
# - "/*"
# you can define service wide environment variables here
# environment:
# variable1: value1
# you can add packaging information here
#package:
# include:
# - include-me.js
# - include-me-dir/**
# exclude:
# - exclude-me.js
# - exclude-me-dir/**
functions:
hello:
handler: handler.hello
# The following are a few example events you can configure
# NOTE: Please make sure to change your handler code to work with those events
# Check the event documentation for details
# events:
# - http:
# path: users/create
# method: get
# - s3: ${env:BUCKET}
# - schedule: rate(10 minutes)
# - sns: greeter-topic
# - stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000
# - alexaSkill: amzn1.ask.skill.xx-xx-xx-xx
# - alexaSmartHome: amzn1.ask.skill.xx-xx-xx-xx
# - iot:
# sql: "SELECT * FROM 'some_topic'"
# - cloudwatchEvent:
# event:
# Example:
# - "aws.ec2"
# detail-type:
# - "EC2 Instance State-change Notification"
# detail:
# state:
# - pending
# - cloudwatchLog: '/aws/lambda/hello'
# - cognitoUserPool:
# pool: MyUserPool
# trigger: PreSignUp
# Define function environment variables here
# environment:
# variable2: value2
# you can add CloudFormation resource templates here
#resources:
# resources:
# NewResource:
# Type: AWS::S3::Bucket
# Properties:
# BucketName: my-new-bucket
# Outputs:
# NewOutput:
# Description: "Description for the output"
# Value: "Some output value"
Bây giờ, chúng tôi cần thêm các thay đổi trong tệp serverless.yml theo yêu cầu của chúng tôi. Bạn có thể sử dụng các lệnh như dưới đây:
Bạn có thể sử dụng lệnh sau cho Service -
service: aws-nodejs # NOTE: update this with your service name
Bây giờ, hãy thay đổi dịch vụ ở đây và thêm tên được đặt cho thư mục của chúng tôi như được hiển thị -
service: aws-serverless # NOTE: update this with your service name
Thông tin chi tiết về nhà cung cấp như được hiển thị -
provider:
name: aws
runtime: nodejs6.10
Nhà cung cấp là aws và thời gian chạy là nodejs6.10. Chúng tôi cần thêmregion trong đó chúng tôi sẽ làm việc và stage, đó là dev or prodmôi trường cho dự án. Vì vậy, đây là chi tiết cập nhật của nhà cung cấp: nhà cung cấp -
name: aws
runtime: nodejs6.10
# you can overwrite defaults here
stage: prod
region: us-east-1
Vai trò IAM
Các iam role, nghĩa là, mã cho phép làm việc với Lambda được hiển thị ở đây trong .yml tập tin -
# iamRoleStatements:
# - Effect: "Allow"
# Action:
# - "s3:ListBucket"
# Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] }
# - Effect: "Allow"
# Action:
# - "s3:PutObject"
# Resource:
# Fn::Join:
# - ""
# - - "arn:aws:s3:::"
# - "Ref" : "ServerlessDeploymentBucket"
# - "/*"
Lưu ý rằng chúng tôi cần cung cấp chi tiết về vai trò, đó là quyền cần thiết với các dịch vụ AWS khác, trong phần trên.
Chi tiết Trình xử lý AWS Lambda
Tên của hàm xuất trong handler.jsxin chào. Vì vậy, trình xử lý là tên của tệp theo sau là tên xuất.
functions:
hello:
handler: handler.hello
Chi tiết tài nguyên về dịch vụ s3 được thêm vào như hình dưới đây -
# you can add CloudFormation resource templates here
#resources:
# resources:
# NewResource:
# Type: AWS::S3::Bucket
# Properties:
# BucketName: my-new-bucket
# Outputs:
# NewOutput:
# Description: "Description for the output"
# Value: "Some output value"
Triển khai AWS Lambda bằng Serverless Framework
Hãy để chúng tôi triển khai hàm lambda ở trên cho bảng điều khiển AWS. Bạn có thể sử dụng các Bước sau cho mục đích này:
Bước 1
Đầu tiên, bạn sẽ phải sử dụng lệnh sau:
sls deploy
Bước 2
Bây giờ, bạn sẽ thấy chức năng trong bảng điều khiển AWS như được hiển thị. Các chi tiết của AWS không máy chủ được đăng nhập trong hệ thống đám mây AWS. Vì mục đích này, hãy chuyển đến dịch vụ AWS và chọnCloudFormation. Các chi tiết của AWS Lambda được hiển thị như sau:
Quan sát rằng tên được đưa ra là tên dự án, theo sau là giai đoạn được sử dụng.
Bước 3
Nó tạo ra vai trò iam cho AWS Lambda và nhóm nhật ký cho AWS cloudwatch. Nhóm S3 được tạo để lưu trữ chi tiết mã và chi tiết cấu hình.
Điều này được tạo ra bởi lệnh sls deploy. Bạn không cần chỉ định vai trò iam, thay vào đó nó được tạo theo mặc định trongdeploy sân khấu.
Bước 4
Luồng chi tiết của các sự kiện được hiển thị bên dưới trong dịch vụ hình thành đám mây.
Mã AWS Lambda
Mã AWS Lambda và cài đặt thực thi của nó được hiển thị trong ảnh chụp màn hình dưới đây -
Khi bạn kiểm tra hàm Lambda, bạn có thể tìm thấy kết quả sau:
Đầu ra Nhật ký cho chức năng trên được hiển thị ở đây:
Chúng tôi cũng có thể kiểm tra chức năng AWS Lambda bằng cách sử dụng lệnh serverless như hình dưới đây:
sls invoke --function hello
Cú pháp của lệnh gọi được hiển thị ở đây:
sls invoke --function hello
Lệnh gọi này kích hoạt chức năng AWS Lambda và hiển thị kết quả đầu ra trong dấu nhắc lệnh như hình dưới đây:
Bạn cũng có thể kiểm tra hàm Lambda trước khi triển khai và lệnh tương tự bằng cách sử dụng lệnh sau:
sls invoke local --function hello
Xin lưu ý rằng không phải lúc nào cũng có thể kiểm tra cục bộ vì các tài nguyên như S3 vàDynanoDB không thể được mô phỏng trên môi trường cục bộ. Chỉ có thể kiểm tra cục bộ các lệnh gọi hàm cơ bản.
Sử dụng API Gateway và AWS Lambda với Serverless Framework
Hãy để chúng tôi xem cách tạo dự án mới để làm việc với Lambda và api gateway. Bạn có thể sử dụng lệnh sau cho mục đích này:
sls create --template aws-nodejs
Bây giờ mở aws-apidự án trong mã trực quan. Bạn có thể thấy rằnghandler.js và serverless.ymlcác tệp được tạo. Hãy để chúng tôi thực hiện các thay đổi trong đó để bổ sung api gateway.
Bạn sẽ phải thực hiện những thay đổi sau trong serverless.yml -
Giờ đây, các chi tiết sự kiện đã được thêm vào để kích hoạt cổng api với AWS Lambda -
Có một thứ mới được thêm vào đây được gọi là events. Chúng tôi đã chỉ định sự kiện làhttp, cùng với đường dẫn và phương pháp của nó.
Đường dẫn là điểm cuối mà chúng ta sẽ sử dụng khi đường dẫn cổng api được tạo và phương thức được sử dụng là GET.
Quan sát rằng trình xử lý là handler.hellovà xin chào là tên xuất từ handler.js.
Lưu ý rằng bạn không phải triển khai api gateway ở đây, vì khung công tác không máy chủ sẽ thực hiện nó.
Bây giờ, chúng tôi sẽ chạy sls deploy lệnh tạo hàm AWS Lambda với trình kích hoạt là api gateway.
sls deploy
Quan sát rằng các chi tiết triển khai được liệt kê ở trên. Nó mang lại choGeturl với điểm cuối là chi tiết đường dẫn. Sân khấu làprodvì vậy cũng được sử dụng trong url. Tên của hàm làaws-api-prod-hello.
Hãy để chúng tôi nhấn url và xem kết quả. Bạn có thể thấy như sau phản hồi mà chúng tôi nhận được từ url nhận api-gateway:
{"message":"Go Serverless v1.0! Your function executed
successfully!","input":{"resource":"/first-api","path":"/first-api","httpMethod":
"GET","headers":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,
image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate, br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto":
"https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":
"false","CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":
"false","CloudFront-Viewer-Country":"IN","Host":"nvbhfdojfg.execute-api.us-east-1.
amazonaws.com","upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0
(Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/66.0.3359.181 Safari/537.36","Via":"2.0 707912794802dbb4825c79b7d8626a5d.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"j70MMqkWFp6kmvuauzp_nvTbI-WwKIQmm2Jl5hzSoN6gkdvX11hh-g==",
"X-Amzn-Trace-Id":"Root=1-5b13f9ef-5b012e36b7f40b5013a326fc","X-Forwarded-For":"157.33.133.217, 54.182.242.73","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},
"queryStringParameters":null,"pathParameters":null,"stageVariables":null,
"requestContext":{"resourceId":"pes5sy","resourcePath":"/first-api","httpMethod":
"GET","extendedRequestId":"H6P9fE-MoAMFdIg=","requestTime":"03/Jun/2018:14:23:
43 +0000","path":"/prod/first-api","accountId":"625297745038","protocol":"HTTP/1.1",
"stage":"prod","requestTimeEpoch":1528035823928,"requestId":"b865dbd6-6739-11e8-b135
-a30269a8ec58","identity":{"cognitoIdentityPoolId":null,"accountId":null,
"cognitoIdentityId":null,"caller":null,"SourceIp":"157.33.133.217","accessKey":null,
"cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null,
"userAgent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/66.0.3359.181 Safari/537.36","user":null},"apiId":"nvbhfdojfg"},"body":null,
"isBase64Encoded":false}}
Chi tiết sự kiện cũng có sẵn trong đầu ra khi bạn nhấn vào url. HttpMethod là GET và queryStringParameters là rỗng vì không có gì được truyền vào chuỗi truy vấn. Các chi tiết sự kiện được cung cấp choinput mà chúng tôi đã chỉ định trong trình xử lý AWS Lambda -
Đầu ra chúng tôi nhận được từ api gateway chỉ là body chi tiết chẳng hạn như message và input. Phản hồi được kiểm soát hoàn toàn bởi api gateway và cách hiển thị nó dưới dạng đầu ra.
Bây giờ, chúng ta hãy chuyển đầu vào cho url GET trong chuỗi truy vấn và xem màn hình -
Sau đó, bạn có thể thấy đầu ra của chuỗi truy vấn như hình dưới đây:
{"message":"Go Serverless v1.0! Your function executed
successfully!","input":{"resource":"/first-api","path":"/first-api","httpMethod":
"GET","headers":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,
image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate,
br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto":"https",
"CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":"false",
"CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":"false",
"CloudFront-Viewer-Country":"IN","Host":"nvbhfdojfg.execute-api.us-east-1.amazonaws.com",
"upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36","Via":"2.0
8b1d3263c2fbd0a2c270b174d7aa3d61.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"JIBZw3I-blKbnpHP8LYXPVolCgdW5KmEukZS4at9mi4vrWBMI-UKNw==",
"X-Amzn-Trace-Id":"Root=1-5b13ff90-7d6e38d4c0e4a5d4e6184f30","X-Forwarded-For":
"157.33.133.217, 54.182.242.127","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"queryString
Parameters":{"displaymessage":"Hello"},"pathParameters":null,"stageVariables":null,
"requestContext":{"resourceId":"pes5sy","resourcePath":"/first-api","httpMethod":
"GET","extendedRequestId":"H6TeiG34oAMFguA=","requestTime":"03/Jun/2018:14:47:44 +0000","path":"/prod/first-api","accountId":"625297745038","protocol":"HTTP/1.1",
"stage":"prod","requestTimeEpoch":1528037264252,"requestId":"12e5dca3-
673d-11e8-8966-69fcf43bd4db","identity":{"cognitoIdentityPoolId":null,"accountId":null,
"cognitoIdentityId":null,"caller":null,"exmpleIp":"157.33.133.217","accessKey":null,
"cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null,
"userAgent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/66.0.3359.181 Safari/537.36","user":null},"apiId":"nvbhfdojfg"},"body":
null,"isBase64Encoded":false}}
Hãy để chúng tôi thay đổi hàm AWS Lambda để chỉ hiển thị chi tiết chuỗi truy vấn như được hiển thị bên dưới -
'use strict';
module.exports.hello = (event, context, callback) => {
const response = {
statusCode: 200,
body: JSON.stringify({
message:(event.queryStringParameters && event.queryStringParameters.displaymessage!="") ? event.queryStringParameters.displaymessage : 'Go Serverless v1.0! Your function executed successfully!'
}),
};
callback(null, response);
// Use this code if you don't use the http event with the LAMBDA-PROXY integration
// callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};
Quan sát rằng chúng tôi đã thay đổi thông báo dựa trên chuỗi truy vấn display message. Thao tác này sẽ triển khai lại chức năng và kiểm tra kết quả đầu ra. Nó hiển thị các chi tiết có trong thông báo hiển thị biến chuỗi truy vấn như hình dưới đây.
Bây giờ hãy để chúng tôi thêm post phương thức cho các sự kiện được tạo như hình dưới đây -
Bây giờ, hãy triển khai các thay đổi đã thực hiện và bạn có thể thấy kết quả sau từ lệnh triển khai:
Lưu ý rằng việc kiểm tra trực tiếp url của bài đăng trong trình duyệt sẽ không cung cấp thông tin chi tiết. Bạn nên kiểm tra url của bài đăng trongpostman.
Để đưa người đưa thư đi đến https://www.getpostman.com/apps. Tải xuống ứng dụng theo hệ điều hành của bạn. Sau khi cài đặt, bạn sẽ có thể kiểm tra url bài đăng của mình như hình dưới đây -
Điều này sẽ hiển thị thông báo chúng tôi đã thêm trong hàm Lambda.
Chương này sẽ giải thích chi tiết về quá trình thực thi và gọi hàm Lambda và các bước liên quan đến nó.
Mô hình thực thi AWS Lambda
Việc thực thi AWS phụ thuộc vào chi tiết cấu hình được thêm vào Hàm AWS Lambda. Khi hàm được tạo, có mộtmemory và time allotted, được sử dụng để thực thi hàm AWS Lambda.
Với sự trợ giúp của chi tiết cấu hình, AWS Lambda tạo bối cảnh thực thi. Bối cảnh thực thi là một môi trường thời gian chạy tạm thời được tạo sẵn sàng với mọi phụ thuộc bên ngoài như kết nối cơ sở dữ liệu, điểm cuối http, thư viện bên thứ ba, v.v., nếu có.
Khi hàm AWS Lambda được gọi lần đầu tiên hoặc nếu hàm lambda được cập nhật, sẽ có ít độ trễ được thêm vào do thiết lập ngữ cảnh thực thi. Tuy nhiên, các cuộc gọi tiếp theo nhanh hơn so với cuộc gọi đầu tiên. AWS Lambda cố gắng sử dụng lại ngữ cảnh thực thi một lần nữa nếu hàm Lambda được gọi mất ít thời gian hơn.
Việc sử dụng lại ngữ cảnh thực thi có những tác động sau:
Nếu có bất kỳ kết nối cơ sở dữ liệu nào được thực hiện để thực thi Lambda, kết nối sẽ được duy trì để sử dụng lại. Vì vậy, mã Lambda phải sao cho kết nối phải được kiểm tra trước - nếu tồn tại và sử dụng lại; nếu không, chúng tôi sẽ phải tạo kết nối mới.
Ngữ cảnh thực thi duy trì một không gian đĩa 500MB trong /tmpdanh mục. Dữ liệu cần thiết được lưu vào bộ nhớ đệm trong thư mục này. Bạn có thể kiểm tra thêm mã để xem dữ liệu có tồn tại hay không.
Nếu các lệnh gọi lại hoặc một số quy trình nền không hoàn tất khi hàm Lambda được gọi, thì quá trình thực thi sẽ bắt đầu khi hàm lambda được gọi lại. Trong trường hợp bạn không cần điều đó xảy ra, hãy đảm bảo rằng tất cả các quy trình của bạn được kết thúc đúng cách, khi việc thực thi chức năng hoàn tất.
Bạn nên sử dụng ngữ cảnh thực thi và dữ liệu được lưu trữ trong thư mục tmp. Bạn sẽ phải thêm các kiểm tra cần thiết trong mã để xem liệu dữ liệu bắt buộc có tồn tại hay không trước khi tạo dữ liệu mới. Điều này sẽ tiết kiệm thời gian trong quá trình thực hiện và làm cho nó nhanh hơn.
Gọi hàm AWS Lambda
Chúng tôi có thể gọi AWS theo cách thủ công bằng cách sử dụng aws cli. Chúng tôi đã biết cách tạo và triển khai AWS Lambda bằng cách sử dụngcli. Ở đây, trước tiên chúng ta sẽ tạo một hàm bằng cách sử dụngaws cli và gọi tương tự.
Tạo Hàm AWS Lambda bằng AWS CLI
Bạn có thể sử dụng các lệnh sau để tạo hàm AWS Lambda bằng aws cli -
Commands
create-function
--function-name <value>
--runtime <value>
--role <value>
--handler <value>
[--code <value>]
[--description <value>]
[--timeout <value>]
[--memory-size <value>]
[--environment <value>]
[--kms-key-arn <value>]
[--tags <value>]
[--zip-file <value>]
[--cli-input-json <value>]
Command with values
aws lambda create-function
--function-name "lambdainvoke"
--runtime "nodejs8.10"
--role "arn:aws:iam::625297745038:role/lambdaapipolicy"
--handler "index.handler"
--timeout 5
--memory-size 256
--zip-file "fileb://C:\nodeproject\index.zip"
Đầu ra như hình dưới đây -
Hàm được tạo trong bảng điều khiển AWS như được hiển thị bên dưới:
Bây giờ, bạn có thể gọi hàm bằng lệnh:invoke
--function-name <value>
[--invocation-type <value>]
[--log-type <value>]
[--client-context <value>]
[--payload <value>]
[--qualifier <value>]
outfile <value>
Options
--function-name − Chỉ định tên của hàm bạn muốn gọi.
--invocation-type(string) − theo mặc định, kiểu gọi là requestresponse. Các giá trị có sẵn để sử dụng với kiểu gọi làRequestResponse, Event và DryRun.
Kiểu gọi sự kiện sẽ được sử dụng cho phản hồi không đồng bộ.
DryRun sẽ được sử dụng khi bạn muốn xác minh hàm Lambda mà không cần thực thi nó.
--log-type − Nó sẽ là Tailnếu kiểu gọi là RequestResponse. Nó cung cấp dữ liệu nhật ký được mã hóa 4KB base64 cuối cùng. Giá trị có thể làTail và None.
--client-context −Bạn có thể chuyển các chi tiết cụ thể của ứng dụng khách cho hàm Lambda. Clientcontext phải ở định dạng json và được mã hóa base64. Kích thước tệp tối đa là 3583 byte.
--payload − đầu vào định dạng json cho bạn hàm lambda.
--qualifier −Bạn có thể chỉ định phiên bản hàm Lambda hoặc tên bí danh. Nếu bạn chuyển phiên bản hàm hơn api sẽ sử dụng hàm arn đủ điều kiện để gọi hàm Lambda. Nếu bạn chỉ định tên bí danh, api sử dụng bí danh ARN để gọi hàm Lambda.
outfile − Đây là tên tệp nơi nội dung sẽ được lưu.
Command with values
aws lambda invoke --function-name "lambdainvoke" --log-type
Tail C:\nodeproject\outputfile.txt
Bạn có thể sử dụng tùy chọn payload để gửi sự kiện giả đến hàm lambda ở định dạng json như hình dưới đây.
Mã AWS Lambda liên quan như sau:
exports.handler = async (event, callback) => {
console.log("Hello => "+ event.name);
console.log("Address =>"+ event.addr);
callback(null, 'Hello '+event.name +" and address is "+ event.addr);
};
Quan sát rằng trong mã, chúng ta có bảng điều khiển event.name và event.addr. Bây giờ, chúng ta hãy sử dụng tùy chọn tải trọng trong aws cli để gửi sự kiện với tên và địa chỉ như sau:
aws lambda invoke --function-name "lambdainvoke" --log-type
Tail --payload file://C:\clioutput\input.txt C:\clioutput\outputfile.txt
Thenpayload nhận đầu vào là một đường dẫn tệp có đầu vào json như được hiển thị -
{"name":"Roy Singh", "addr":"Mumbai"}
Đầu ra tương ứng như hình dưới đây -
Đầu ra được lưu trữ trong tệp C:\clioutput\outputfile.txt như sau -
"Hello Roy Singh and address is Mumbai"
Sự kiện mẫu
Bạn có thể kiểm tra chức năng AWS Lambda bằng cách chuyển một sự kiện mẫu. Phần này cung cấp một số sự kiện mẫu cho Dịch vụ AWS. Bạn có thể dùnginvokelệnh để kiểm tra đầu ra khi được kích hoạt với bất kỳ dịch vụ nào. Quan sát các mã được cung cấp cho các sự kiện mẫu tương ứng bên dưới:
Sự kiện mẫu đặt trên Amazon S3
{
"Records": [{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"SourceIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg",
"size": 1024
},
"bucket": {
"arn": bucketarn,
"name": "Sourcebucket",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "EXAMPLE"
},
"eventSource": "aws:s3"
}]
}
Để có được details of the file from the s3 put event, bạn có thể sử dụng lệnh sau:
event.Records[0].s3.object.key //will display the name of the file
Đến get the bucket name, bạn có thể sử dụng lệnh sau:
event.Records[0].s3.bucket.name //will give the name of the bucket.
Đến see the EventName, bạn có thể sử dụng lệnh sau:
event.Records[0].eventName // will display the eventname
Sự kiện mẫu xóa trên Amazon S3
{
"Records": [{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"SourceIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg"
},
"bucket": {
"arn": bucketarn,
"name": "Sourcebucket",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectRemoved:Delete",
"userIdentity": {
"principalId": "EXAMPLE"
},
"eventSource": "aws:s3"
}]
}
Amazon DynamoDB
Amazon DynamoDB có thể là một sự kiện trên AWS Lambda khi các thay đổi được thực hiện trên bảng DynamoDB. Chúng tôi có thể thực hiện thao tác như thêm mục nhập, cập nhật và xóa các bản ghi khỏi bảng DynamodDB.
Một sự kiện mẫu cho sự kiện thêm, chèn và xóa DynamoDB được hiển thị ở đây -
{
"Records": [{
"eventID": "1",
"eventVersion": "1.0",
"dynamodb": {
"Keys": {
"Id": {
"N": "101"
}
},
"NewImage": {
"Message": {
"S": "New item!"
},
"Id": {
"N": "101"
}
},
"StreamViewType": "NEW_AND_OLD_IMAGES",
"SequenceNumber": "111",
"SizeBytes": 26
},
"awsRegion": "us-west-2",
"eventName": "INSERT",
"eventSourceARN": eventSourcearn,
"eventSource": "aws:dynamodb"
},
{
"eventID": "2",
"eventVersion": "1.0",
"dynamodb": {
"OldImage": {
"Message": {
"S": "New item!"
},
"Id": {
"N": "101"
}
},
"SequenceNumber": "222",
"Keys": {
"Id": {
"N": "101"
}
},
"SizeBytes": 59,
"NewImage": {
"Message": {
"S": "This item has changed"
},
"Id": {
"N": "101"
}
},
"StreamViewType": "NEW_AND_OLD_IMAGES"
},
"awsRegion": "us-west-2",
"eventName": "MODIFY",
"eventSourceARN": Sourcearn,
"eventSource": "aws:dynamodb"
},
{
"eventID": "3",
"eventVersion": "1.0",
"dynamodb": {
"Keys": {
"Id": {
"N": "101"
}
},
"SizeBytes": 38,
"SequenceNumber": "333",
"OldImage": {
"Message": {
"S": "This item has changed"
},
"Id": {
"N": "101"
}
},
"StreamViewType": "NEW_AND_OLD_IMAGES"
}, "awsRegion": "us-west-2",
"eventName": "REMOVE",
"eventSourceARN": Sourcearn,
"eventSource": "aws:dynamodb"
}]
}
Dịch vụ thông báo đơn giản của Amazon
AWS Lambda có thể hữu ích để xử lý thông báo được tạo trong Simple Notification Service (SNS). Bất cứ khi nào có thông báo được xuất bản trong SNS, hàm Lambda có thể được kích hoạt với sự kiện SNS, có thông tin chi tiết về thông báo. Thông báo này có thể được xử lý bên trong hàm Lambda và có thể được gửi thêm tới các dịch vụ khác theo yêu cầu.
Sau khi thông báo được nhập, SNS sẽ kích hoạt chức năng Lambda. Nếu có bất kỳ lỗi nào cố gắng gọi hàm Lambda, SNS sẽ thử gọi lại hàm lambda tối đa ba lần.
Sự kiện mẫu SNS của Amazon
Một sự kiện mẫu có tất cả các chi tiết có sẵn trong hàm AWS Lambda để thực hiện quá trình tiếp theo được hiển thị bên dưới:
{
"Records": [{
"EventVersion": "1.0",
"EventSubscriptionArn": eventsubscriptionarn,
"EventSource": "aws:sns",
"Sns": {
"SignatureVersion": "1",
"Timestamp": "1970-01-01T00:00:00.000Z",
"Signature": "EXAMPLE",
"SigningCertUrl": "EXAMPLE",
"MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
"Message": "Hello from SNS!",
"MessageAttributes": {
"Test": {
"Type": "String",
"Value": "TestString"
},
"TestBinary": {
"Type": "Binary",
"Value": "TestBinary"
}
},
"Type": "Notification",
"UnsubscribeUrl": "EXAMPLE",
"TopicArn": topicarn,
"Subject": "TestInvoke"
}
}]
}
Dịch vụ thư đơn giản của Amazon
Amazon Simple Mail Service có thể được sử dụng để gửi tin nhắn và cả để nhận tin nhắn. Chức năng AWS Lambda có thể được gọi trên Dịch vụ Thư đơn giản khi nhận được thư.
Sự kiện mẫu nhận email của Amazon SES
Chi tiết về sự kiện SES khi được sử dụng bên trong AWS Lambda được hiển thị bên dưới:
{
"Records": [{
"eventVersion": "1.0",
"ses": {
"mail": {
"commonHeaders": {
"from": [
"Jane Doe <[email protected]>"
],
"to": [
"[email protected]"
],
"returnPath": "[email protected]",
"messageId": "<0123456789Source.com>",
"date": "Wed, 7 Oct 2015 12:34:56 -0700",
"subject": "Test Subject"
},
"example": "[email protected]",
"timestamp": "1970-01-01T00:00:00.000Z",
"destination": [
"[email protected]"
],
"headers": [{
"name": "Return-Path",
"value": "<[email protected]>"
},
{
"name": "Received",
"value": "from mailer.example.com (mailer.example.com [203.0.113.1]) by inbound-smtp.us-west-2.amazonaws.com with SMTP id o3vrnil0e2ic for [email protected]; Wed, 07 Oct 2015 12:34:56 +0000 (UTC)"
},
{
"name": "DKIM-Signature",
"value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=example; h=mime-version:from:date:message-id:subject:to:content-type; bh=jX3F0bCAI7sIbkHyy3mLYO28ieDQz2R0P8HwQkklFj4=; b=sQwJ+LMe9RjkesGu+vqU56asvMhrLRRYrWCbV"
},
{
"name": "MIME-Version",
"value": "1.0"
},
{
"name": "From",
"value": "Jane Doe <[email protected]>"
},
{
"name": "Date",
"value": "Wed, 7 Oct 2015 12:34:56 -0700"
},
{
"name": "Message-ID",
"value": "<0123456789example.com>"
},
{
"name": "Subject",
"value": "Test Subject"
},
{
"name": "To",
"value": "[email protected]"
},
{
"name": "Content-Type",
"value": "text/plain; charset=UTF-8"
}],
"headersTruncated": false,
"messageId": "o3vrnil0e2ic28tr"
},
"receipt": {
"recipients": [
"[email protected]"
],
"timestamp": "1970-01-01T00:00:00.000Z",
"spamVerdict": {
"status": "PASS"
},
"dkimVerdict": {
"status": "PASS"
},
"processingTimeMillis": 574,
"action": {
"type": "Lambda",
"invocationType": "Event",
"functionArn": "arn:aws:lambda:us-west-2:012345678912:function:example"
},
"spfVerdict": {
"status": "PASS"
},
"virusVerdict": {
"status": "PASS"
}
}
},
"eventexample": "aws:ses"
}]
}
Amazon Cloudwatch Logs
AWS Lambda có thể được kích hoạt từ Amazon CloudWatch Logs bằng cách sử dụng CloudWatch Logs Subscriptions. Đăng ký CloudWatch Logs có dữ liệu dữ liệu thời gian thực về các nhật ký có thể được xử lý và phân tích bên trong AWS Lambda hoặc có thể được sử dụng để tải lên các hệ thống khác.
Sự kiện mẫu nhật ký Amazon CloudWatch
{
"awslogs": {
"data": "H4sIAAAAAAAAAHWPwQqCQBCGX0Xm7EFtK+smZBEUgXoLCdMhFtKV3akI8d0bLYmibvPPN3wz00CJxmQnTO41whwW
QRIctmEcB6sQbFC3CjW3XW8kxpOpP+OC22d1Wml1qZkQGtoMsScxaczKN3plG8zlaHIta5KqWsozoTYw3/djzwhpL
wivWFGHGpAFe7DL68JlBUk+l7KSN7tCOEJ4M3/qOI49vMHj+zCKdlFqLaU2ZHV2a4Ct/an0/ivdX8oYc1UVX860fQ
DQiMdxRQEAAA=="
}
}
Cổng API Amazon
Hàm AWS Lambda có thể được gọi trên httpsurl. CNTT có thể được thực hiện trênGET, POST, PUT. Khi url https được gọi, hàm AWS Lambda cũng được kích hoạt và dữ liệu được chuyển đến https bằng get / post có thể được cung cấp bên trong AWS Lambda để được sử dụng để chèn trong DynamoDB hoặc để gửi thư, v.v.
Sự kiện yêu cầu proxy cổng API
{
"path": "/test/hello",
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, lzma, sdch, br",
"Accept-Language": "en-US,en;q=0.8",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-Country": "US",
"Host": "wt6mne2s9k.execute-api.us-west-2.amazonaws.com",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
"Via": "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)",
"X-Amz-Cf-Id": "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==",
"X-Forwarded-For": "192.168.100.1, 192.168.1.1",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
},
"pathParameters": {
"proxy": "hello"
},
"requestContext": {
"accountId": "123456789012",
"reexampleId": "us4z18",
"stage": "test",
"requestId": "41b45ea3-70b5-11e6-b7bd-69b5aaebc7d9",
"identity": {
"cognitoIdentityPoolId": "",
"accountId": "",
"cognitoIdentityId": "",
"caller": "",
"apiKey": "",
"exampleIp": "192.168.100.1",
"cognitoAuthenticationType": "",
"cognitoAuthenticationProvider": "",
"userArn": "",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
"user": ""
},
"reexamplePath": "/{proxy+}",
"httpMethod": "GET",
"apiId": "wt6mne2s9k"
},
"reexample": "/{proxy+}",
"httpMethod": "GET",
"queryStringParameters": {
"name": "me"
},
"stageVariables": {
"stageVarName": "stageVarValue"
}
}
Sự kiện phản hồi proxy cổng API
{
"statusCode": 200,
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, lzma, sdch, br",
"Accept-Language": "en-US,en;q=0.8",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-Country": "US",
"Host": "wt6mne2s9k.execute-api.us-west-2.amazonaws.com",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
"Via": "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)",
"X-Amz-Cf-Id": "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==",
"X-Forwarded-For": "192.168.100.1, 192.168.1.1",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
},
"body": "Hello World"
}
Xóa chức năng AWS Lambda sẽ xóa AWS Lambda khỏi bảng điều khiển AWS. Có 2 cách để xóa chức năng AWS Lambda.
- Sử dụng bảng điều khiển AWS.
- Sử dụng lệnh AWS CLI
Chương này thảo luận chi tiết về hai cách này.
Sử dụng Bảng điều khiển AWS
Để xóa một hàm Lambda bằng bảng điều khiển AWS, hãy làm theo các bước dưới đây:
Bước 1
Đăng nhập vào bảng điều khiển AWS và truy cập dịch vụ AWS Lambda. Bạn có thể thấy rằng các hàm AWS lambda được tạo cho đến nay được liệt kê trong bảng điều khiển AWS như hình dưới đây:
Danh sách cho thấy có 23 hàm AWS Lambda được tạo cho đến nay. Bạn có thể xem chúng bằng cách sử dụng phân trang được cung cấp ở trên cùng hoặc tìm kiếm AWS Lambda bằng cách sử dụng hộp tìm kiếm.
Bước 2
Quan sát rằng có một nút radio trên mỗi chức năng AWS Lambda. Chọn chức năng bạn muốn xóa. Quan sát ảnh chụp màn hình được hiển thị bên dưới -
Bước 3
Sau khi bạn chọn hàm AWS Lambda, Actionmenu thả xuống trước đó bị tô xám hiện được đánh dấu. Bây giờ, hãy mở hộp tổ hợp và nó sẽ hiển thị các tùy chọn như được hiển thị -
Bước 4
Chọn Deleteđể xóa chức năng AWS Lambda. Khi bạn nhấp vàoDelete, nó hiển thị thông báo như sau:
Bước 5
Đọc kỹ thông báo và sau đó nhấp vào Delete để xóa vĩnh viễn hàm lambda AWS.
Note- Xóa aws lambda sẽ không xóa vai trò được liên kết. Để loại bỏ vai trò, bạn cần phải vào IAM và loại bỏ vai trò.
Bước 6
Danh sách các vai trò được tạo cho đến nay được hiển thị bên dưới. Quan sát rằng có mộtCreate role nút và Delete role cái nút.
Nhấp vào hộp kiểm trên vai trò bạn muốn xóa. Bạn cũng có thể chọn nhiều vai trò để xóa cùng một lúc.
Bước 7
Bạn sẽ thấy một thông báo xác nhận như được hiển thị bên dưới khi bạn nhấp vào nút Xóa -
Bây giờ, hãy đọc các chi tiết được đề cập cẩn thận và sau đó nhấp vào Yes, delete cái nút.
Sử dụng lệnh AWS CLI
Đầu tiên chúng ta hãy tạo một hàm Lambda bằng cách sử dụng aws cli và xóa cùng một lệnh bằng cách sử dụng cùng một lệnh. Thực hiện theo các Bước dưới đây cho mục đích này -
Bước 1
Lệnh có các giá trị cho hàm tạo như sau:aws lambda create-function
--function-name "lambdatestcli"
--runtime "nodejs8.10"
--role "arn:aws:iam::625297745038:role/lambdaapipolicy"
--handler "index.handler"
--timeout 5
--memory-size 256
--zip-file "fileb://C:\demotest\index.zip"
Đầu ra tương ứng được hiển thị ở đây -
Bước 2
Hàm AWS Lambda được tạo là lambdatestcli. Chúng ta đã sử dụng role arn hiện có để tạo hàm lambda.
Sau đó, bạn có thể tìm thấy chức năng này được hiển thị trong bảng điều khiển AWS như hình dưới đây -
Bước 3
Bây giờ, chúng ta hãy gọi hàm để kiểm tra đầu ra bằng lệnh được hiển thị:aws lambda invoke --function-name "lambdatestcli" --log-type Tail
C:\demotest\outputfile.txt
Lệnh này sẽ cung cấp cho bạn kết quả như hình:
Bước 4
Bạn có thể quan sát nhật ký từ cloudwatch cho chức năng lambda lambdatestcliBước 5
Bây giờ, chúng ta hãy đến với phần thực tế của việc xóa hàm AWS. Delete aws cli apisẽ xóa chức năng đã cho. Chi tiết về lệnh được sử dụng cho mục đích này được đưa ra dưới đây:Command
delete-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Options
--function-name(string) - Điều này sẽ lấy tên hàm Lambda hoặc arn của hàm AWS Lambda.
--qualifier (string)- Đây là tùy chọn. Tại đây bạn có thể chỉ định phiên bản AWS Lambda cần được xóa.
-- cli-input-json(string)- Thực hiện hoạt động dịch vụ dựa trên chuỗi JSON được cung cấp. Chuỗi JSON tuân theo định dạng được cung cấpby --generate-cli-skeleton. Nếu các đối số khác được cung cấp trên dòng lệnh, các giá trị CLI sẽ ghi đè các giá trị do JSON cung cấp.
--generate-cli-skeleton(string) - nó in khung xương json ra đầu ra tiêu chuẩn mà không cần gửi yêu cầu API.
Command with values
aws lambda delete-function --function-name "lambdatestcli"
Đầu ra tương ứng được hiển thị bên dưới:
Bước 6
Nếu bạn kiểm tra ngay bây giờ, bạn có thể thấy rằng hàm sẽ không được nhìn thấy trong danh sách hàm AWS Lambda như được hiển thị trong ảnh chụp màn hình bên dưới:Làm việc với Amazon API Gateway
Hàm AWS Lambda có thể được gọi trên HTTPSurl. Nó có thể được thực hiện trên GET, POST, PUT. Khi url HTTPS được gọi, hàm AWS Lambda cũng có thể được kích hoạt và dữ liệu được chuyển tới HTTPS bằng cách sử dụngget/post có thể được tạo sẵn bên trong AWS Lambda để được sử dụng để chèn vào DynamoDB hoặc để gửi thư, v.v.
Chương này thảo luận chi tiết về các quy trình khác nhau liên quan đến hoạt động với AWS lambda và API Gateway.
Các quy trình liên quan
Sau đây là các quy trình liên quan đến việc làm việc với AWS lambda và API Gateway:
- Tạo vai trò IAM để được cấp quyền
- Tạo hàm lambda AWS
- Tạo cổng API
- Liên kết hàm lambda với cổng api
- Truyền dữ liệu đến cổng api
Sơ đồ cơ bản giải thích hoạt động của cổng API và AWS Lambda được đưa ra ở đây:
Các quy trình này được giải thích chi tiết hơn trong chương này với ảnh chụp màn hình có liên quan.
Tạo vai trò IAM để được cấp quyền
Từ các dịch vụ của Amazon như được hiển thị bên dưới, chọn IAM để tạo các vai trò được sử dụng bởi hàm Lambda.
Đi tới IAM và chọn Roles từ phần bên trái như hình dưới đây -
Nhấp chuột Create role cho hàm Lambda.
Chọn Lambda và nhấp vào Permissionsở dưới cùng. Chọn quyền cần thiết cho API Gateway và Lambda.
Tìm kiếm cổng API trong tìm kiếm và nó sẽ liệt kê cho bạn tất cả các quyền liên quan. Ở đây chúng tôi đã chọn toàn quyền truy cập vào cổng API như hình dưới đây -
Bây giờ, hãy tìm kiếm cổng API và nó sẽ liệt kê cho bạn tất cả các quyền liên quan. Ở đây chúng tôi đã chọn toàn quyền truy cập vào cổng API như hình dưới đây -
Bạn cũng phải lặp lại quy trình tương tự đối với Chính sách.
Sau khi bạn chọn xong các chính sách cần thiết, hãy nhấp vào Reviewcho bước tiếp theo. Nhập tên của vai trò theo lựa chọn của bạn như hình dưới đây -
Nó hiển thị các chính sách kèm theo vai trò. Nhấp chuộtCreate role và chúng ta đã hoàn thành việc tạo vai trò và có thể tiếp tục với hàm lambda.
Tạo hàm AWS Lambda
Đi tới các dịch vụ AWS và nhấp vào dịch vụ lambda để tạo một chức năng để kết nối nó với api gateway.
Màn hình giao diện người dùng cho chức năng Lambda được hiển thị bên dưới. Nhấp chuộtCreate function để tiến hành tạo hàm Lambda.
Nhập tên của chức năng và chọn vai trò hiện có mà chúng tôi đã tạo ở trên.
Nó nhấp nháy một thông báo rằng chức năng với tên lambdawithapigateway được tạo thành công.
Lưu ý rằng ở đây chúng tôi sẽ sử dụng nodejsthời gian chạy để viết mã. Mã AWS vớihelloworld thông báo như hình dưới đây -
Mã AWS Lambda có trong index.jstập tin. Hàm được gọi là trình xử lý có các tham số cụ thể làevents, context và callback.
Chức năng gọi lại về cơ bản có lỗi và thông báo thành công. Lưu ý rằng ở đây chúng tôi không có bất kỳ mã nào liên quan đến lỗi, vì vậy null được chuyển và thông báo thành công làHelloWorld from lambda.
Cuối cùng, lưu các thay đổi đã thêm và để chúng tôi tiến hành thêm hàm Lambda vào cổng API.
Tạo cổng API
Đăng nhập vào tài khoản AWS của bạn và mở API Gateway như hình dưới đây -
Nhấp vào API Gateway và nó sẽ dẫn bạn đến màn hình nơi có thể tạo cổng API mới.
Nhấp chuột Create API và thêm chi tiết như hình dưới đây -
Nhấn vào Create APIở bên phải màn hình. Thao tác này sẽ hiển thị API mới được tạo ở bên trái màn hình.
Nhấn vào Actions thả xuống để tạo tài nguyên mới cho API.
Bây giờ, hãy tạo một tài nguyên mới như hình dưới đây -
Nhập Resource Namenhư hình bên dưới. Bạn sẽ thấy tên của tài nguyên được nhập trong url được tạo ở cuối. Nhấp chuộtCreate Resource và bạn sẽ thấy nó trên màn hình như sau:
Thêm vào GET/POSTphương thức cho tài nguyên được tạo như hình dưới đây. Chọn phương pháp từActions thả xuống.
Nhấn vào GET để thêm phương thức vào API.
Bước tiếp theo là tích hợp sẽ tích hợp nó với chức năng Lambda. Bây giờ thêm hàm Lambda vào nó như hình dưới đây:
Liên kết hàm Lambda với API Gateway
Chọn hàm lambda đã tạo trước đó.
Lưu các thay đổi và bạn có thể thấy hộp thoại yêu cầu quyền như hình dưới đây -
Nhấp chuột OKcho sự cho phép. Đây là chi tiết thực thi giữa yêu cầu HTTP cổng API và hàm Lambda -
Bây giờ, hãy để chúng tôi triển khai các thay đổi cổng API. Với mục đích này, chúng ta cần chọnDeploy API từ Actions thả xuống như hình dưới đây -
Lựa chọn Deploy API. Nó sẽ yêu cầu trạng thái triển khai. Lựa chọnNew Stage từ trình đơn thả xuống Giai đoạn triển khai và thêm nghệ danh là Production.
Nhấp chuột Deploy và nó sẽ chuyển hướng bạn đến url như hình dưới đây -
Chọn GETtừ phía bên trái để lấy url. Mở url trong tab mới để xem thông báo từ hàm Lambda.
Đây là một ví dụ cơ bản về cách làm việc với AWS Lambda và AWS API Gateway. Trong ví dụ trên, chúng tôi đã mã hóa thông báo trong hàm Lambda.
Bây giờ, chúng ta hãy lấy thông tin chi tiết từ API Gateway. Trong trường hợp nếu lệnh gọi HTTPS phải được gọi từ một miền khác, ví dụ: lệnh gọi AJAX tới API, chúng tôi cần bật CORS cho cổng API đã tạo.
Chọn Nguồn lại được tạo cho API và nhấp vào Actions thả xuống -
Hiện nay, Enable CORS sẽ mở ra màn hình sau -
Bạn có thể sử dụng một số phương pháp để BẬT CORS. Access-Control-Allow-Origin được đánh dấu là * có nghĩa là nó sẽ cho phép lấy nội dung từ cổng API từ bất kỳ miền nào.
Bạn cũng có thể chỉ định tên miền bạn muốn làm việc với API. Nhấp chuộtEnable CORS and replace existing CORS headers và nó sẽ hiển thị thông báo xác nhận như hình dưới đây -
Nhấp chuột Yes, replace existing valuesđể kích hoạt nó. CácEnable CORS màn hình trông như hình dưới đây -
Truyền dữ liệu đến API Gateway
Mở API được tạo trong API Gateway displayhelloworld như hình dưới đây -
Nhấp chuột Integration Request để gửi dữ liệu như hình dưới đây -
Chọn Body Mapping Templates và thêm Content-Type ví dụ này là application/json. Nhấp vào loại nội dung đã thêm, thêm các chi tiết như sau:
Bây giờ, hãy thêm mẫu ở định dạng JSON như hình dưới đây -
Quan sát rằng chúng tôi đã lấy thông báo làm tham số để lấy dữ liệu từ API Gateway và chia sẻ nó với AWS Lambda. Cú pháp lấy thông tin chi tiết như hình trên.
Bây giờ, hãy triển khai API để thực hiện các thay đổi có sẵn trên URL API Gateway. Đối với điều này, chúng ta cần thay đổi hàm Lambda để hiển thị dữ liệu dựa trên URL API Gateway. Mã cho hàm Lambda là givn bên dưới. Lưu ý rằng chúng tôi đang lấy thông báo từ sự kiện và chuyển đến cuộc gọi lại.
exports.handler = (event, context, callback) => {
let message = event.message;
callback(null, message);
};
Bây giờ, hãy lưu các thay đổi trong Lambda và nhấn vào URL để xem các thay đổi. Quan sát ảnh chụp màn hình dưới đây -
Nhấp vào URL như hình dưới đây -
https://rw2ek1xung.execute-api.us-east-
1.amazonaws.com/prod/hello?message=hello%20from%20api%20gateway
Hãy quan sát rằng ở đây chúng ta đang chuyển thông báo dưới dạng chuỗi truy vấn tới url GET. Sau đó, bạn có thể quan sát đầu ra như hình dưới đây:
Nó đọc các chi tiết được gửi đến tin nhắn từ URL và hiển thị giống như vậy trong trình duyệt.
Sử dụng Hàm Lambda với Amazon S3
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 tệp. Chúng tôi 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 nhóm S3. AWS Lambda có một hàm xử lý hoạt động như một điểm bắt đầu cho hàm AWS Lambda. Trình xử lý có các chi tiết của các sự kiện. Trong chương này, chúng ta hãy xem cách sử dụng AWS S3 để kích hoạt chức năng AWS Lambda khi chúng tôi tải lên tệp trong nhóm S3.
Các bước sử dụng Hàm AWS Lambda với Amazon S3
Để bắt đầu sử dụng AWS Lambda với Amazon S3, chúng tôi cần những điều sau:
- Tạo nhóm S3
- Tạo vai trò có quyền hoạt động với s3 và lambda
- Tạo hàm lambda và thêm s3 làm trình kích hoạt.
Thí dụ
Hãy để chúng tôi xem các bước này với sự trợ giúp của một ví dụ cho thấy sự tương tác cơ bản giữa Amazon S3 và AWS Lambda.
Người dùng sẽ tải lên một tệp trong nhóm Amazon S3
Sau khi tệp được tải lên, nó sẽ kích hoạt chức năng AWS Lambda trong nền, chức năng này sẽ hiển thị đầu ra dưới dạng thông báo trên bảng điều khiển cho biết tệp đã được tải lên.
Người dùng sẽ có thể thấy thông báo trong nhật ký Cloudwatch sau khi tệp được tải lên.
Sơ đồ khối giải thích quy trình của ví dụ được hiển thị ở đây:
Tạo nhóm S3
Trước tiên, chúng ta hãy bắt đầu bằng cách tạo nhóm s3 trong bảng điều khiển AWS bằng cách sử dụng các bước dưới đây:
Bước 1
Đi tới các dịch vụ của Amazon và nhấp vào S3 trong phần lưu trữ như được đánh dấu trong hình dưới đây -
Bước 2
Nhấp vào bộ nhớ S3 và Create bucket sẽ lưu trữ các tệp đã tải lên.
Bước 3
Khi bạn nhấp vào Create bucket , bạn có thể thấy một màn hình như sau:
Bước 4
Nhập chi tiết Bucket name, Select the Region và bấm vào Createở dưới cùng bên trái. Do đó, chúng tôi đã tạo nhóm với tên:workingwithlambdaands3.
Bước 5
Bây giờ, hãy nhấp vào tên nhóm và nó sẽ yêu cầu bạn tải lên các tệp như hình dưới đây -
Như vậy, chúng ta đã hoàn thành việc tạo nhóm trong S3.
Tạo vai trò hoạt động với S3 và Lambda
Để tạo vai trò hoạt động với S3 và Lambda, vui lòng làm theo các Bước dưới đây -
Bước 1
Chuyển đến các dịch vụ AWS và chọn IAM như hình dưới đây -
Bước 2
Bây giờ, hãy nhấp vào IAM -> Roles như hình dưới đây -
Bước 3
Bây giờ, hãy nhấp vào Create rolevà chọn các dịch vụ sẽ sử dụng vai trò này. Chọn Lambda và nhấp vàoPermission cái nút.
Bước 4
Thêm quyền từ bên dưới và nhấp vào Review.
Bước 5
Quan sát rằng chúng tôi đã chọn các quyền sau:
Lưu ý rằng các Chính sách mà chúng tôi đã chọn là AmazonS3FullAccess, AWSLambdaFullAccess và CloudWatchFullAccess.
Bước 6
Bây giờ, hãy nhập Tên vai trò, Mô tả vai trò và nhấp vào Create Role ở dưới cùng.
Vì vậy, vai trò của chúng tôi có tên lambdawiths3service được tạo ra.
Tạo hàm Lambda và thêm trình kích hoạt S3
Trong phần này, chúng ta hãy xem cách tạo một hàm Lambda và thêm một trình kích hoạt S3 vào nó. Vì mục đích này, bạn sẽ phải làm theo các Bước dưới đây -
Bước 1
Đi tới Dịch vụ AWS và chọn Lambda như hình dưới đây -
Bước 2
Nhấp chuột Lambda và làm theo quy trình để thêm Name. ChọnRuntime, Rolevv và tạo chức năng. Hàm Lambda mà chúng tôi đã tạo được hiển thị trong ảnh chụp màn hình bên dưới -
Bước 3
Bây giờ chúng ta hãy thêm trình kích hoạt S3.
Bước 4
Chọn trình kích hoạt từ phía trên và thêm các chi tiết như được hiển thị bên dưới -
Bước 5
Chọn nhóm được tạo từ trình đơn thả xuống của nhóm. Loại sự kiện có các chi tiết sau:
Lựa chọn Object Created (All), vì chúng tôi cần trình kích hoạt AWS Lambda khi tệp được tải lên, bị xóa, v.v.
Bước 6
Bạn có thể thêm Tiền tố và Mẫu tệp được sử dụng để lọc các tệp được thêm vào. Ví dụ, để kích hoạt lambda chỉ cho hình ảnh .jpg. Bây giờ hãy để trống vì chúng tôi cần kích hoạt Lambda cho tất cả các tệp được tải lên. Nhấp chuộtAdd để thêm trình kích hoạt.
Bước 7
Bạn có thể tìm thấy màn hình kích hoạt cho hàm Lambda như hình dưới đây:
Hãy thêm các chi tiết cho hàm aws lambda. Ở đây, chúng tôi sẽ sử dụng trình chỉnh sửa trực tuyến để thêm mã của chúng tôi và sử dụng nodejs làm môi trường thời gian chạy.
Bước 8
Để kích hoạt S3 với AWS Lambda, chúng ta sẽ phải sử dụng sự kiện S3 trong đoạn mã như bên dưới:
exports.handler = function(event, context, callback) {
console.log("Incoming Event: ", event);
const bucket = event.Records[0].s3.bucket.name;
const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, message);
};
Lưu ý rằng tham số sự kiện có các chi tiết của S3event. Chúng tôi đã an ủi rằng tên thùng và tên tệp sẽ được ghi lại khi bạn tải lên hình ảnh trong S3bucket.
Bước 9
Bây giờ, chúng ta hãy lưu các thay đổi và kiểm tra hàm lambda với S3upload. Sau đây là chi tiết mã được thêm vào AWS Lambda:
Bước 10
Bây giờ, chúng ta hãy thêm vai trò, bộ nhớ và thời gian chờ.
Bước 11
Bây giờ, hãy lưu hàm Lambda. Mở S3 từ các dịch vụ của Amazon và mở nhóm mà chúng tôi đã tạo trước đó, cụ thể làworkingwithlambdaands3.
Tải lên hình ảnh trong đó như hình dưới đây -
Bước 12
Nhấp chuột Upload để thêm tệp như được hiển thị -
Bước 13
Nhấp chuột Add filesđể thêm tệp. Bạn cũng có thể kéo và thả các tệp. Bây giờ, hãy nhấp vàoUpload cái nút.
Do đó, chúng tôi đã tải lên một hình ảnh trong nhóm S3 của mình.
Bước 14
Để xem chi tiết kích hoạt, hãy chuyển đến dịch vụ AWS và chọn CloudWatch. Mở nhật ký cho hàm Lambda và sử dụng mã sau:
exports.handler = function(event, context, callback) {
console.log("Incoming Event: ", event);
const bucket = event.Records[0].s3.bucket.name;
const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, message);
};
Đầu ra bạn có thể quan sát trong Cloudwatch như được hiển thị:
Chức năng AWS Lambda được kích hoạt khi tệp được tải lên trong nhóm S3 và thông tin chi tiết được đăng nhập vào Cloudwatch như hình dưới đây -
Sử dụng hàm Lambda với Amazon DynamoDB
DynamoDB có thể kích hoạt AWS Lambda khi dữ liệu được thêm vào bảng, được cập nhật hoặc bị xóa. Trong chương này, chúng ta sẽ làm việc trên một ví dụ đơn giản sẽ thêm các mục vào bảng DynamoDB và AWS Lambda sẽ đọc dữ liệu và gửi thư với dữ liệu được thêm vào.
Yêu cầu
Để sử dụng Amazon DB và AWS Lambda, chúng ta cần làm theo các bước như hình dưới đây:
Tạo bảng trong DynamoDB bằng khóa chính
Tạo một vai trò sẽ có quyền hoạt động với DynamoDBand AWS Lambda.
Tạo hàm trong AWS Lambda
AWS Lambda Trigger để gửi thư
Thêm dữ liệu trong DynamoDB
Hãy để chúng tôi thảo luận chi tiết từng bước này.
Thí dụ
Chúng tôi sẽ giải quyết ví dụ sau đây cho thấy sự tương tác cơ bản giữa DynamoDB và AWS Lambda. Ví dụ này sẽ giúp bạn hiểu các thao tác sau:
Tạo bảng được gọi là khách hàng trong bảng Dynamodb và cách nhập dữ liệu vào bảng đó.
Kích hoạt chức năng AWS Lambda sau khi nhập dữ liệu và gửi thư bằng dịch vụ Amazon SES.
Sơ đồ khối cơ bản giải thích quy trình của ví dụ như hình dưới đây:
Tạo bảng trong DynamoDB bằng khóa chính
Đăng nhập vào bảng điều khiển AWS. Vào Dịch vụ AWS và chọn DynamoDB như hình dưới đây. Chọn DynamoDB.
DynamoDB hiển thị các tùy chọn như hình dưới đây -
Bây giờ, hãy nhấp vào Create tableđể tạo bảng như hình. Chúng tôi đã đặt tên bảng làcustomer với khóa chính cho bảng đó là cust_id. Bấm vàoCreate để thêm bảng vào dynamicodb.
Bảng được tạo như hình dưới đây -
Chúng ta có thể thêm các mục vào bảng đã tạo như sau:
Nhấp chuột Items và bấm vào Create item nút như hình -
Tạo vai trò với quyền làm việc với DynamoDB và AWS Lambda
Để tạo vai trò, hãy chuyển đến Dịch vụ AWS và nhấp vào IAM.
Hãy để chúng tôi tạo một chính sách chỉ được sử dụng cho bảng DynamoDB đã tạo trước đó -
Bây giờ, hãy chọn một Service. Quan sát rằng dịch vụ chúng tôi đã chọn làDynamoDB. Đối vớiActions chúng tôi đã lấy tất cả Dynamodbcác hành động tức là truy cập vào danh sách, đọc và ghi. Đối vớiresources, chúng tôi sẽ chọn các hành động loại tài nguyên bảng. Khi bạn nhấp vào nó, bạn có thể thấy một màn hình như sau:
Bây giờ, hãy chọn table và Add ARNvào nó như được hiển thị. Chúng ta sẽ lấyARN chi tiết từ customer table được tạo như hình bên dưới -
Đi vào arn chi tiết tại đây -
Nhấp chuột Addđể lưu các thay đổi. Sau khi hoàn thànhClick on Review policy. Nhập tên của chính sách, mô tả, v.v. như hình dưới đây -
Bấm vào create policyđể lưu nó. Thêm chính sách vào vai trò sẽ được tạo. Lựa chọnRole từ phía bên trái và nhập các chi tiết.
Lưu ý rằng các chính sách được thêm vào là newpolicyfordynamdb, awslambdafullaccess, cloudwatchfullaccess và amazonsesfullaccess. Thêm vai trò và sẽ sử dụng nó trong khi tạo hàm AWS Lambda.
Tạo hàm trong AWS Lambda
Do đó, chúng ta đã tạo hàm Lambda có tên là newlambdafordynamodb như hình.
Bây giờ, chúng ta hãy thêm trình kích hoạt DynamodDB vào AWS Lambda đã tạo. Thời gian chạy mà chúng tôi sẽ sử dụng là Node.js.
Bạn có thể tìm thấy các chi tiết sau trong trình kích hoạt Dynamodb sẽ được định cấu hình cho AWS Lambda:
Bây giờ, chỉ cần nhấp vào Add để thêm trình kích hoạt vào AWS Lambda.
AWS Lambda Trigger để gửi thư
AWS Lambda sẽ được kích hoạt khi dữ liệu được chèn vàoAWS Lambda. Tham số sự kiện sẽ có dữ liệu động được chèn vào. Thao tác này sẽ đọc dữ liệu từ sự kiện và gửi email.
Gửi một e-mail
Để gửi email, bạn cần làm theo các bước dưới đây -
Bước 1
Đi tới dịch vụ AWS và chọn SES (dịch vụ email đơn giản). Xác thực email mà chúng tôi cần gửi email như hình minh họa -
Bước 2
Nhấn vào nút Verify a New Email Address để thêm địa chỉ email.
Bước 3
Nhập một địa chỉ email để xác minh nó. Địa chỉ email sẽ nhận và kích hoạt thư từ Amazon cần được nhấp vào. Sau khi kích hoạt xong, id email sẽ được xác minh và có thể được sử dụng với các dịch vụ AWS.
Bước 4
Mã AWS Lambda đọc dữ liệu từ sự kiện và gửi email được cung cấp bên dưới:
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log(event);
let tabledetails = JSON.parse(JSON.stringify(event.Records[0].dynamodb));
console.log(tabledetails.NewImage.address.S);
let customerid = tabledetails.NewImage.cust_id.S;
let name = tabledetails.NewImage.name.S;
let address = tabledetails.NewImage.address.S;
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "The data added is as follows:\n CustomerId:"+customerid+"\n Name:"+name+"\nAddress:"+address
}
},
Subject: {
Data: "Data Inserted in Dynamodb table customer"
}
},
Source: "[email protected]"
};
console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
}
Bây giờ, lưu hàm Lambda và dữ liệu trong bảng DynamoDB.
Thêm dữ liệu trong DynamoDB
Sử dụng trình tự sau để thêm dữ liệu trong DynamoDB.
Bước 1
Đi đến bàn customer được tạo trong Dynamodb.
Bước 2
Nhấp chuột Create item.
Bước 3
Nhấp chuột Save và kiểm tra id email được cung cấp trong AWS Lambda để xem liệu thư đã được AWS Lambda gửi hay chưa.
Sử dụng hàm Lambda với các sự kiện đã lên lịch
Các sự kiện đã lên lịch được giả sử diễn ra trong khoảng thời gian đều đặn dựa trên một bộ quy tắc. Các sự kiện đã lên lịch được sử dụng để thực thi hàm Lambda sau một khoảng thời gian được xác định trong các dịch vụ đồng hồ đám mây. Chúng được sử dụng tốt nhất để làm các công việc cron cùng với AWS Lambda. Chương này sẽ giải thích bằng ví dụ đơn giản về cách gửi thư sau mỗi 5 phút bằng cách sử dụng các sự kiện đã lên lịch và AWS Lambda.
Yêu cầu
Các yêu cầu để sử dụng hàm Lambda với các sự kiện đã lên lịch như sau:
- Xác minh id email bằng AWS SES
- Tạo vai trò để sử dụng AWS SES, Cloudwatch và AWS Lambda
- Tạo hàm Lambda để gửi email
- Thêm quy tắc cho các sự kiện đã lên lịch từ AWS CloudWatch
Thí dụ
Ví dụ mà chúng ta sẽ xem xét sẽ thêm sự kiện CloudWatch vào hàm AWS Lambda. Cloudwatch sẽ kích hoạt AWS Lambda dựa trên mẫu thời gian được đính kèm với nó. Ví dụ, trong ví dụ dưới đây, chúng tôi đã sử dụng 5 phút làm kích hoạt. Có nghĩa là cứ sau 5 phút, AWS Lambda sẽ được kích hoạt và AWS Lambda sẽ gửi thư bất cứ khi nào được kích hoạt.
Sơ đồ khối cơ bản cho tương tự được hiển thị bên dưới:
Xác minh ID email bằng AWS SES
Đăng nhập AWS và vào dịch vụ AWS SES như hình bên dưới -
Bây giờ, hãy nhấp vào Simple Email Dịch vụ như hình -
Nhấp chuột Email Addresses ở bên trái như hình -
Nó hiển thị một nút Verify a New Email Address. Nhấp vào nó.
Đi vào Email Addressbạn muốn xác minh. Nhấp chuộtVerify This Email Addresscái nút. Bạn sẽ nhận được thư từ AWS trên id email đó với tiêu đề email: Amazon Web Services - Yêu cầu xác minh địa chỉ email ở khu vực US East (N. Virginia)
Nhấp vào liên kết được cung cấp trong thư để xác minh địa chỉ email. Sau khi được xác minh, nó sẽ hiển thị id email như sau:
Tạo vai trò để sử dụng AWS SES, Cloudwatch và AWS Lambda
Bạn cũng có thể tạo một vai trò cho phép sử dụng các dịch vụ. Đối với điều này, hãy chuyển đến IAM và chọn Vai trò. Thêm các chính sách bắt buộc và tạo vai trò. Quan sát rằng vai trò được tạo ở đây làevents with lambda.
Tạo hàm Lambda để gửi email
Bạn sẽ phải làm theo các bước để tạo hàm Lambda bằng cách sử dụng thời gian chạy dưới dạng nodejs.
Bây giờ, thêm trình kích hoạt vào Lambda như được hiển thị -
Thêm chi tiết vào CloudWatch Events Trigger như hình dưới đây -
Lưu ý rằng sự kiện sẽ được kích hoạt sau mỗi 5 phút theo trình kích hoạt quy tắc được tạo.
Mã Lambda để gửi email được cung cấp bên dưới:
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "this mail comes from aws lambda event scheduling"
}
},
Subject: {
Data: "Event scheduling from aws lambda"
}
},
Source: "[email protected]"
};
console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
Bây giờ, chúng tôi cần dịch vụ AWS SES. Bạn có thể thêm điều này bằng cách sử dụng mã hiển thị như sau:
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
Để gửi thư từ nodejs, Chúng tôi đã tạo eParams đối tượng có các chi tiết như example mail, to mail id và the body with message như sau -
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "this mail comes from aws lambda event scheduling"
}
},
Subject: {
Data: "Event scheduling from aws lambda"
}
},
Source: "[email protected]"
};
Mã Lambda để gửi email như sau:
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
Bây giờ, chúng ta hãy lưu hàm Lambda này và kiểm tra id email cho các thư. Ảnh chụp màn hình hiển thị bên dưới cho thấy rằng thư được gửi từ AWS Lambda sau mỗi 5 phút.
Sử dụng Hàm Lambda với Amazon SNS
Amazon SNS là một dịch vụ được sử dụng để thông báo đẩy. Trong chương này, chúng tôi sẽ giải thích hoạt động của AWS Lambda và Amazon SNS với sự trợ giúp của một ví dụ nơi sẽ thực hiện các hành động sau:
Tạo chủ đề trong Dịch vụ SNS và sử dụng AWS Lambda Thêm chủ đề vào CloudWatch
Gửi tin nhắn văn bản SNS trên số điện thoại đã cho.
Yêu cầu
Để tạo Chủ đề trong Dịch vụ SNS và sử dụng AWS Lambda Thêm Chủ đề vào CloudWatch, chúng tôi không cần thực hiện theo các bước được cung cấp bên dưới -
- Tạo chủ đề trong SNS
- Tạo vai trò để có quyền trong IAM
- Tạo hàm AWS Lambda
- Xuất bản lên chủ đề để kích hoạt trình kích hoạt
- Kiểm tra chi tiết tin nhắn trong dịch vụ CloudWatch.
Để gửi tin nhắn văn bản SNS theo số điện thoại đã cho, chúng ta cần thực hiện như sau:
- Thêm mã trong AWS Lambda để gửi tin nhắn đến điện thoại của bạn.
Thí dụ
Trong ví dụ này, chúng tôi sẽ tạo một chủ đề trong SNS. Khi thông tin chi tiết được nhập vào chủ đề để xuất bản, AWS Lambda sẽ được kích hoạt. Các chi tiết về chủ đề được đăng nhập trong CloudWatch và một tin nhắn được gửi trên điện thoại bởi AWS Lambda.
Đây là một sơ đồ khối cơ bản giải thích tương tự -
Tạo chủ đề trong SNS
Bạn sẽ phải làm theo các bước dưới đây để tạo chủ đề trong SNS -
Bước 1
Đăng nhập vào Bảng điều khiển AWS và truy cập dịch vụ SNS trong Amazon như hình dưới đây -
Bước 2
Nhấp chuột Simple Notification Dịch vụ và Create topic trong đó.
Bước 3
Sau đó, bạn phải nhấp vào Create new topic nút như hình -
Bước 4
Nhập Topic name và Display name và nhấp vào Create topic. Bạn sẽ thấy tên chủ đề trong màn hình như sau:
Tạo vai trò cho quyền trong IAM
Để tạo Vai trò hoạt động với AWS Lambda và dịch vụ SNS, chúng ta cần đăng nhập vào bảng điều khiển AWS. Sau đó, chọn IAM từ các dịch vụ của Amazon và nhấp vào role từ phía bên trái như hình dưới đây.
Hãy quan sát rằng chúng tôi đã thêm các chính sách cho SNS, Lambda và CloudWatch. Thêm tên vai trò và nhấp vào nút Tạo vai trò để hoàn tất quá trình tạo vai trò.
Tạo hàm AWS Lambda
Trong phần này, chúng ta hãy hiểu cách tạo hàm AWS Lambda bằng cách sử dụng nodejs làm thời gian chạy.
Với mục đích này, hãy đăng nhập vào bảng điều khiển AWS và chọn AWS Lambda từ các dịch vụ AWS. Thêm tên hàm, chi tiết vai trò, v.v. và tạo hàm AWS Lambda như hình minh họa.
Thêm trình kích hoạt SNS
Để thêm trình kích hoạt SNS, hãy nhập chi tiết cấu hình SNS như minh họa -
Sau đó, chọn SNS topic và Add trình kích hoạt cho chức năng AWS Lambda như được hiển thị -
Sau đó, thêm mã AWS lambda được cung cấp bên dưới -
exports.handler = function(event, context, callback) {
console.log("AWS lambda and SNS trigger ");
console.log(event);
const sns = event.Records[0].Sns.Message;
console.log(sns)
callback(null, sns);
};
Trong đoạn mã trên, event.Records[0].Sns.Messagecung cấp thông tin chi tiết được thêm vào. Chúng tôi đã thêm nhật ký bảng điều khiển để xem chúng trong CloudWatch. Bây giờ, hãy lưu hàm Lambda với bộ nhớ và thời gian cần thiết.
Xuất bản lên chủ đề để kích hoạt trình kích hoạt
Nhớ lại rằng chúng tôi đã tạo chủ đề trong SNS ở Bước 1. Bây giờ chúng tôi sẽ xuất bản chủ đề này và xem chi tiết trong CloudWatch sẽ được kích hoạt bởi AWS Lambda -
Xuất bản lên chủ đề
Đầu tiên Chọn tên của chủ đề bạn muốn xuất bản. Bấm vàoPublish to topic nút -
Nhập Subject và Message chi tiết như hình bên dưới -
Bạn cũng có thể chọn JSON định dạng tin nhắn để gửi JSONPhong cách. Nhấp chuộtPublish the message ở cuối màn hình.
Kiểm tra chi tiết tin nhắn trong Dịch vụ CloudWatch
Đăng nhập vào bảng điều khiểnAWS và mở dịch vụ CloudWatch. Nhấp vào nhật ký ở bên trái và chọn nhật ký cho chức năng AWS Lambda được tạo. Bạn có thể tìm thấy màn hình hiển thị sau cho các bản ghi với các thông báo được tạo như hình trên -
Thêm mã trong AWS Lambda để gửi tin nhắn đến điện thoại của bạn
Tại đây sẽ sử dụng tính năng nhắn tin SNS Text để gửi tin nhắn trên điện thoại bằng AWS Lambda. Bạn có thể sử dụng mã sau để cập nhật mã AWS Lambda như sau:
const aws = require("aws-sdk");
const sns = new aws.SNS({
region:'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log("AWS lambda and SNS trigger ");
console.log(event);
const snsmessage = event.Records[0].Sns.Message;
console.log(snsmessage);
sns.publish({
Message: snsmessage,
PhoneNumber: '+911212121212'
}, function (err, data) {
if (err) {
console.log(err);
callback(err, null);
} else {
console.log(data);
callback(null, data);
}
});
};
Chúng tôi đã thêm AWS SDK và dịch vụ SNS để sử dụng để gửi tin nhắn. Tin nhắn từ sự kiện đến từ SNS được gửi dưới dạng tin nhắn văn bản trên số điện thoại đã cho.
Hãy quan sát đoạn mã sau để làm ví dụ:
sns.publish({
Message: snsmessage,
PhoneNumber: '+911212121212'
}, function (err, data) {
if (err) {
console.log(err);
callback(err, null);
} else {
console.log(data);
callback(null, data);
}
});
Nhập chủ đề ngay bây giờ để xem tin nhắn trong đồng hồ điện toán đám mây và số điện thoại đã cho ở trên.
Nhấp chuột Publish messageđể xuất bản tin nhắn. Bạn thấy một thông báo trên số điện thoại được đưa ra như sau:
Sử dụng hàm Lambda với CloudTrail
AWS CloudTraillà một dịch vụ có sẵn với Amazon, giúp ghi lại tất cả các hoạt động được thực hiện bên trong bảng điều khiển AWS. Nó ghi lại tất cả các lệnh gọi API và lưu trữ lịch sử, có thể được sử dụng sau này cho mục đích gỡ lỗi. Lưu ý rằng chúng tôi không thể kích hoạt Lambda từ CloudTrail. Thay vào đó, CloudTrail lưu trữ tất cả lịch sử dưới dạng nhật ký trong nhóm S3 và chúng tôi có thể kích hoạt AWS Lambda từ S3. Khi bất kỳ nhật ký nào được xử lý, AWS Lambda sẽ được kích hoạt bất cứ khi nào bất kỳ nhật ký nào được thêm vào nhóm S3.
Yêu cầu
Trước khi bắt đầu làm việc với AWS CloudTrail, S3 và AWS Lambda, bạn cần thực hiện những việc sau:
- Tạo nhóm S3 để lưu trữ nhật ký CloudTrail
- Tạo dịch vụ SNS
- Tạo đường dẫn trong CloudTrail và chỉ định nhóm S3 và dịch vụ SNS
- Tạo vai trò IAM với quyền.
- Tạo hàm lambda aws
- Cấu hình AWS Lambda
Thí dụ
Hãy xem xét một ví dụ cho thấy hoạt động của AWS CloudTrail, S3 và AWS Lambda. Tại đây, chúng tôi sẽ tạo một nhóm trong S3 để lưu trữ tất cả nhật ký cho bất kỳ tương tác nào được thực hiện trong bảng điều khiển AWS. Hãy để chúng tôi tạo chủ đề SNS và xuất bản nó. Đối với hành động này, nhật ký sẽ được nhập dưới dạng tệp trong S3. AWS lambda sẽ được kích hoạt sẽ gửi thư bằng dịch vụ Amazon SES.
Sơ đồ khối để giải thích quá trình này như hình dưới đây:
Tạo Nhóm S3 để lưu trữ nhật ký CloudTrail
Đi tới bảng điều khiển AWS và nhấp vào dịch vụ S3. Nhấp chuộtCreate bucket và nhập tên của nhóm mà bạn muốn lưu trữ nhật ký cloudtrail như hình minh họa -
Hãy quan sát rằng ở đây chúng tôi đã tạo một nhóm S3 cloudtraillogsaws để lưu trữ các bản ghi.
Tạo dịch vụ SNS
Đi tới bảng điều khiển AWS và nhấp vào Simple notification Service. Chọn chủ đề từ phía bên trái và nhấp vào nút Tạo chủ đề mới.
Chúng tôi đã tạo chủ đề có tên displaytrailđể xuất bản một chủ đề. Thông tin chi tiết của nó sẽ được lưu trữ trong S3bucket được tạo ở trên.
Tạo một con đường trong Cloudtrail và chỉ định nhóm S3 và dịch vụ SNS
Đi tới bảng điều khiển AWS và nhấp vào CloudTrail dịch vụ từ các công cụ Quản lý như minh họa -
Nhấp chuột Trails từ phía bên trái như hình dưới đây -
Nhấp chuột Create Trailcái nút. NhậpTrail name, Apply trail to all regions và lựa chọn Yes. Sau đó Vì vậy, các bản ghi sẽ được áp dụng cho tất cả các khu vực.
Đối với Read/Write events, chọn All. ThêmS3 bucket và SNS topicchi tiết như hình bên dưới. Bạn có thể tạo một cái mới tại đây hoặc thêm một cái hiện có.
Lưu ý rằng có các tùy chọn có sẵn để encrypt log files, enable log file validation, send sns notification for every log file deliveryvv Tôi đã sử dụng các giá trị mặc định ở đây. Bạn có thể cho phép mã hóa tệp và nó sẽ yêu cầu khóa mã hóa. Nhấp vào nút Tạo đường nhỏ khi các chi tiết được thêm vào.
Tạo vai trò IAM với quyền
Đi tới bảng điều khiển AWS và chọn IAM. Tạo một vai trò với quyền cho S3, Lambda, CloudTrail và SES để gửi email. Vai trò được tạo như hình dưới đây -
Tạo hàm AWS Lambda
Đi tới dịch vụ AWS và nhấp vào Lambdadịch vụ. Thêm tên hàm, chọn thời gian chạy làmnodejsvà chọn vai trò được tạo cho hàm lambda. Sau đây là hàm lambda được tạo.
Cấu hình AWS Lambda
Tiếp theo, chúng ta cần thêm S3 làm trình kích hoạt cho AWS lambda đã tạo.
Thêm chi tiết nhóm S3 để thêm trình kích hoạt và thêm mã AWS Lambda sau:
const aws = require("aws-sdk");
const sns = new aws.SNS({
region:'us-east-1'
});
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log("AWS lambda and SNS trigger ");
console.log(event);
const s3message = "Bucket Name:"+event.Records[0].s3.bucket.name+"\nLog details:"+event.Records[0].s3.object.key;
console.log(s3message);
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data:s3message
}
},
Subject: {
Data: "cloudtrail logs"
}
},
Source: "[email protected]"
};
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
Lưu ý rằng chúng tôi đang lấy chi tiết nhật ký và thùng S3 từ sự kiện và gửi thư bằng dịch vụ SES như hình trên.
Bất cứ khi nào bất kỳ hoạt động nào diễn ra trong bảng điều khiển AWS, nhật ký sẽ được gửi đến nhóm S3 và đồng thời, AWS lambda sẽ được kích hoạt và thư sẽ được gửi đến id email được đề cập trong mã.
Lưu ý rằng bạn có thể xử lý nhật ký theo nhu cầu của mình trong AWS Lambda.
Sử dụng Hàm Lambda với Amazon Kinesis
AWS Kinesisdịch vụ được sử dụng để thu thập / lưu trữ dữ liệu theo dõi thời gian thực đến từ các lần nhấp vào trang web, nhật ký, nguồn cấp dữ liệu mạng xã hội. Chúng tôi có thể kích hoạt AWS Lambda để thực hiện xử lý bổ sung trên nhật ký này.
Yêu cầu
Các yêu cầu cơ bản để bắt đầu với Kinesis và AWS Lambda như sau:
- Tạo vai trò với các quyền cần thiết
- Tạo luồng dữ liệu trong Kinesis
- Tạo hàm AWS Lambda.
- Thêm mã vào AWS Lambda
- Thêm dữ liệu vào luồng dữ liệu Kinesis
Thí dụ
Hãy để chúng tôi làm việc trên một ví dụ, trong đó chúng tôi sẽ kích hoạt AWS Lambda để xử lý luồng dữ liệu từ Kinesis và gửi thư với dữ liệu nhận được.
Dưới đây là một sơ đồ khối đơn giản để giải thích quy trình:
Tạo vai trò với các quyền bắt buộc
Đi tới bảng điều khiển AWS và tạo một vai trò.
Tạo luồng dữ liệu trong Kinesis
Đi tới bảng điều khiển AWS và tạo luồng dữ liệu trong kinesis.
Có 4 lựa chọn như hình. Chúng tôi sẽ làm việc về Tạo luồng dữ liệu trong ví dụ này.
Nhấp chuột Create data stream. Nhập tên trong tên luồng Kinesis được cung cấp bên dưới.
Nhập số phân đoạn cho luồng dữ liệu.
Các chi tiết của Shards như được hiển thị bên dưới -
Nhập tên và nhấp vào Create Kinesis stream ở dưới cùng.
Lưu ý rằng phải mất thời gian nhất định để luồng hoạt động.
Tạo hàm AWS Lambda
Đi tới bảng điều khiển AWS và nhấp vào Lambda. Tạo hàm AWS Lambda như hình -
Nhấp chuột Create functionở cuối màn hình. Thêm Kinesis làm trình kích hoạt cho AWS Lambda.
Thêm chi tiết cấu hình vào trình kích hoạt Kinesis -
Thêm trình kích hoạt và bây giờ thêm mã vào AWS Lambda.
Thêm mã vào AWS Lambda
Với mục đích này, chúng tôi sẽ sử dụng nodejs làm thời gian chạy. Chúng tôi sẽ gửi thư sau khi AWS Lambda được kích hoạt với luồng dữ liệu kinesis.
const aws = require("aws-sdk");
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
let payload = "";
event.Records.forEach(function(record) {
// Kinesis data is base64 encoded so decode here
payload = new Buffer(record.kinesis.data, 'base64').toString('ascii');
console.log('Decoded payload:', payload);
});
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data:payload
}
},
Subject: {
Data: "Kinesis data stream"
}
},
Source: "[email protected]"
};
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
Tham số sự kiện có dữ liệu được nhập vào luồng dữ liệu kinesis. Mã aws lambda ở trên sẽ được kích hoạt khi dữ liệu được nhập vào luồng dữ liệu kinesis.
Thêm dữ liệu vào luồng dữ liệu Kinesis
Ở đây chúng ta sẽ sử dụng AWS CLI để thêm luồng dữ liệu data kinesis như hình dưới đây. Với mục đích này, chúng ta có thể sử dụng lệnh sau:
aws kinesis put-record --stream-name kinesisdemo --data "hello world" --
partition-key "789675"
Sau đó, AWS Lambda được kích hoạt và thư được gửi đi.
Sử dụng hàm Lambda với các ứng dụng người dùng tùy chỉnh
Chúng tôi có thể sử dụng hàm AWS lambda để xử lý bằng cách sử dụng các sự kiện được tạo bởi ứng dụng người dùng theo hai cách sau:
- Sử dụng Bảng điều khiển AWS
- Sử dụng AWS CLI
Sử dụng Bảng điều khiển AWS
Từ bảng điều khiển AWS, chúng tôi sẽ làm việc với các sự kiện và AWS Lambda. Với mục đích này, hãy truy cập bảng điều khiển AWS và tạo một hàm lambda.
Tiếp theo, hãy để chúng tôi thêm mã cho AWS Lambda -
exports.handler = (event, context, callback) => {
// TODO implement
console.log("Hello => "+ event.name);
console.log("Address =>"+ event.addr);
callback(null, 'Hello '+event.name +" and address is "+ event.addr);
};
Lưu ý rằng trong đoạn mã trên, chúng tôi đang in tên và địa chỉ bằng sự kiện.
Chi tiết về sự kiện sẽ được cung cấp bằng cách sử dụng sự kiện thử nghiệm được tạo như sau:
Bây giờ, hãy lưu sự kiện và kiểm tra nó.
Đầu ra nhật ký tương ứng như được hiển thị ở đây -
Sử dụng AWS CLI
Chúng ta có thể gọi hàm trên bằng AWS CLI như sau:
aws lambda invoke --function-name "lambdauserevent" --log-type Tail --
payload file://C:\clioutput\input.txt C:\clioutput\outputfile.txt
Chi tiết sự kiện được cung cấp cho tải trọng và đầu ra được lưu trữ tại C:\clioutput\outputfile.txt. như sau -
input.txt
{"name":"Roy Singh", "addr":"Mumbai"}
Khi gọi Lambda bằng AWS CLI, bạn có thể thấy kết quả như sau:
Tương tự, trong trường hợp bạn muốn kiểm tra AWS Lambda cho bất kỳ dịch vụ AWS nào khác, bạn có thể thực hiện việc này bằng cách sử dụng sự kiện kiểm tra trong bảng điều khiển AWS và AWS CLI. Dưới đây là một sự kiện mẫu cho dịch vụ SNS:
{
"Records": [{
"EventVersion": "1.0",
"EventSubscriptionArn": "arnid",
"EventSource": "aws:sns",
"Sns": {
"SignatureVersion": "1",
"Timestamp": "1970-01-01T00:00:00.000Z",
"Signature": "EXAMPLE",
"SigningCertUrl": "EXAMPLE",
"MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
"Message": "Hello from SNS!",
"MessageAttributes": {
"Test": {
"Type": "String",
"Value": "TestString"
},
"TestBinary": {
"Type": "Binary",
"Value": "TestBinary"
}
},
"Type": "Notification",
"UnsubscribeUrl": "EXAMPLE",
"TopicArn": "topicarn",
"Subject": "TestInvoke"
}
}]
}
Hãy để chúng tôi thêm sự kiện mẫu được hiển thị ở trên và kiểm tra nó như được hiển thị -
Trong AWS Lambda, mã sẽ in thông báo SNS như thể hiện trong ví dụ dưới đây -
exports.handler = (event, context, callback) => {
// TODO implement
console.log(event.Records[0].Sns.Message);
callback(null, event.Records[0].Sns.Message);};
Hãy để chúng tôi gọi tương tự bằng AWS CLI. Hãy để chúng tôi lưu sự kiện trong một tệp và sử dụng nó cho tải trọng bằng cách sử dụng lệnh được hiển thị:
aws lambda invoke --function-name "lambdauserevent" --log-type Tail --
payload file://C:\clioutput\sns.txt C:\clioutput\snsoutput.txt
Sử dụng AWS Lambda @ Edge với CloudFront
Lambda @ Edge là phần bổ sung cho dịch vụ tính toán AWS Lambda được sử dụng để tùy chỉnh nội dung mà mặt tiền đám mây cung cấp.
Sơ đồ khối cho thấy hoạt động của AWS Lambda với mặt tiền đám mây từ AWS được hiển thị bên dưới:
Có bốn cách mà AWS Lambda có thể được sử dụng:
Viewer Request − Người dùng cuối đưa ra yêu cầu được gọi là Yêu cầu của người xem tới CloudFront
Origin Request − CloudFront chuyển tiếp yêu cầu đến nguồn gốc
Origin Response − CloudFront nhận phản hồi từ nguồn gốc
Viewer Response − CloudFront gửi phản hồi đến người xem
Chúng tôi có thể sử dụng Lambda @ Edge cho các mục đích sau:
Để thay đổi tiêu đề theo yêu cầu và thời gian phản hồi.
Thêm chi tiết cookie vào tiêu đề. Thực hiện kiểm tra AB dựa trên yêu cầu và phản hồi.
Chuyển hướng URL đến một trang web khác, dựa trên chi tiết tiêu đề.
Chúng tôi có thể tìm nạp tác nhân người dùng từ các tiêu đề và tìm hiểu chi tiết của trình duyệt, hệ điều hành, v.v.
Yêu cầu
Để bắt đầu làm việc trên CloudFront và Lambda @ Edge, chúng ta cần những điều sau:
Tạo bộ lưu trữ S3 với chi tiết tệp
Tạo vai trò sẽ cho phép quyền hoạt động với CloudFront và Lambda @ Edge
Tạo bản phân phối CloudFront
Tạo hàm lambda
Thêm chi tiết hàm lambda vào mặt tiền đám mây
Kiểm tra url mặt tiền đám mây trong trình duyệt
Chúng tôi sẽ làm việc trên một ví dụ với CloudFront và Lambda @ Egde, trong đó chúng tôi sẽ lưu trữ trang và thay đổi phản hồi khi được phát hiện là máy tính để bàn và thiết bị.
Tạo nhóm lưu trữ S3 với chi tiết tệp
Đăng nhập vào bảng điều khiển AWS và tạo một nhóm trong S3 và thêm . html tệp mà bạn muốn hiển thị.
Bấm vào S3 và Create bucket như hình dưới đây -
Bây giờ, hãy nhấp vào Create bucket và thêm các chi tiết của thùng như hình dưới đây -
Bấm vào Create và tải lên .html trong đó.
Tạo vai trò
Đi tới bảng điều khiển AWS và nhấp vào IAM.
Bây giờ, hãy nhấp vào Roles -> Create role nút như hình -
Chọn quyền cho S3, Lambda và Cloudfront. Một thực tiễn tốt là tạo chính sách chỉ cấp quyền cho chức năng được yêu cầu, lưu trữ bằng cách sử dụng các chi tiết ARN.
Trong ví dụ được thảo luận dưới đây, chúng tôi đang hiển thị Full Accesssự cho phép. Các chính sách cho tên vai tròrole for cloudfrontđược thêm vào như hình trên. Nhấp vào Tạo vai trò.
Tất cả các chính sách bắt buộc đối với lambda @ edge và cloudfront như được hiển thị ở trên. Có một bước bổ sung cần được thực hiện ở đây vì url sẽ có sẵn trong khu vực và nó cần mối quan hệ tin cậy giữa các dịch vụ mà chúng tôi đang sử dụng.
Bây giờ, đối với vai trò đã tạo, hãy nhấp vào Trust relationships tab như hình -
Bấm vào Edit Trust Relationship như hình dưới đây -
Nó hiển thị một tài liệu chính sách. Chúng tôi cần thêm các dịch vụ khác trongPrincipal -> Servicemà chúng tôi đang dự định sử dụng. Tài liệu chính sách về mối quan hệ tin cậy cuối cùng như được hiển thị bên dưới:
Nhấp chuột Update Trust Policy để lưu các thay đổi.
Tạo phân phối CloudFront
Vào dịch vụ CloudFront như hình dưới đây -
Nhấp vào dịch vụ CloudFront và nhấp vào Create Distribution -
Cài đặt gốc, cài đặt hành vi và cài đặt phân phối
Hãy để chúng tôi xem xét từng cài đặt này -
Origin Settings
Các thông số khác nhau của cài đặt Nguồn gốc được giải thích như sau:
Origin Domain Name −Đây là tên của nhóm S3 nơi chúng tôi đã lưu trữ các tệp html. Chúng tôi cũng có thể lưu trữ hình ảnh, nếu có, trong thùng S3 bằng cách tạo các thư mục theo lựa chọn của chúng tôi.
Origin Path −Tại đây bạn cần nhập tên của thư mục chứa các tập tin. Hiện tại, chúng tôi không có thư mục này, vì vậy chúng tôi sẽ giữ nó trống.
Origin ID −Nó được điền khi tên miền gốc được chọn. Bạn có thể thay đổi id theo sự lựa chọn của mình.
Restrict Bucket Access − Trong này, chúng tôi sẽ chọn tùy chọn yes. Ở đây chúng ta cần bảo mật cho nhóm S3 để không ai có quyền truy cập vào nhóm S3. Đối với tùy chọn này, có một số tùy chọn khác được điền nhưOrigin Access Identity, Comment and Grant Read Permission on Bucket.
Origin Access Identity −Chúng tôi đã sử dụng tạo một tùy chọn nhận dạng mới. Bạn cũng có thể chọn danh tính hiện có. Điều này tạo ra một danh tính mới được CloudFront sử dụng để đọc chi tiết từ nhóm S3.
Grand Read Permission on Bucket − Đối với điều này, hãy chọn tùy chọn Yes.
Origin Custom Headers − Chúng tôi sẽ để trống tiêu đề ở đây, vì chúng tôi không cần chi tiết ngay bây giờ.
Tiếp theo, chúng ta hãy thảo luận và điền vào Behaviour Settings cho phân phối Cloudront -
Bây giờ, hãy chọn giao thức - https hoặc http và tùy chọn bộ nhớ đệm. Lưu ý rằng bộ nhớ đệm mặc định là 86400 hoặc 24 giờ. Bạn có thể thay đổi giá trị này theo yêu cầu.
Nhấp chuột Object Caching(tùy chọn tùy chỉnh) để thay đổi bộ nhớ đệm. Bạn có thể dùngsmooth streamingtrong trường hợp nếu có bất kỳ video nào trên trang của bạn. Ở đây, chúng tôi đang giữ tùy chọn mặc định có sẵn. Khi hàm lambda được tạo, các chi tiết của nó sẽ được thêm vào.
Chi tiết về cài đặt phân phối được hiển thị bên dưới -
Các thông số khác nhau của cài đặt phân phối được giải thích bên dưới:
Price class −Nó có các chi tiết như nguồn gốc của lưu lượng người dùng. Lưu ý rằng ở đây chúng tôi đã chọn cái mặc định -Use All Edge Locations.
AWS WAF Web ACL −Đây là lựa chọn tường lửa ứng dụng web. Ở đây, nó có tùy chọn nhưNone. Đầu tiên, chúng ta cần tạo tường lửa trong AWS. Nó cung cấp bảo mật cho trang web.
Alternate Domain Names − Ở đây bạn có thể chỉ định tên miền nếu bạn có.
SSL Certificate −Điều này có tất cả các chi tiết được chọn cho chứng chỉ SSL. Chúng tôi sẽ giữ những cái mặc định.
Default Root Object −Ở đây chúng tôi sẽ chỉ định tên tệp mà chúng tôi đã tải lên trong S3. Đối với điều này, chúng tôi cần nội dung từ .html được hiển thị theo mặc định.
Phần còn lại, chúng tôi sẽ giữ nguyên cài đặt mặc định.
Nhấp chuột Create Distribution để thêm bản phân phối.
Lưu ý rằng bản phân phối sẽ mất một khoảng thời gian để hiển thị trạng thái như đã triển khai.
Tạo hàm AWS Lambda
Đi tới bảng điều khiển AWS và tạo hàm Lambda.
Trong mã AWS Lambda, chúng tôi sẽ lấy các tiêu đề yêu cầu và kiểm tra tác nhân người dùng. Nếu tác nhân người dùng từ máy tính để bàn, chúng tôi sẽ thay đổi phản hồi để hiển thị thông báo dưới dạng“DESKTOP : Welcome to AWS Lambda with Cloudfront!” và nếu thiết bị, thông báo sẽ là“MOBILE DEVICES : Hello from Lambda@Edge!”
Mã AWS Lambda tương ứng như hình dưới đây -
let content = `
<\!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Simple Lambda@Edge Static Content Response</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h1>MOBILE DEVICES : Hello from Lambda@Edge!</h1>
</body>
</html>
`;
let content1 = `
<\!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Simple Lambda@Edge Static Content Response</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h1>DESKTOP : Welcome to AWS Lambda with Cloudfront!</h1>
</body>
</html>
`;
exports.handler = (event, context, callback) => {
let request = event.Records[0].cf.request;
let finalrequest = JSON.stringify(request);
let headers = request.headers;
let useragent = JSON.stringify(headers["user-agent"][0].value);
let str = "";
if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|mobile|CriOS/i.test(useragent)) {
str = content;
} else {
str = content1;
}
const response = {
status: '200',
statusDescription: 'OK',
body: str+useragent,
};
callback(null, response);
};
Bây giờ, hãy lưu hàm Lambda. Lưu ý rằng chúng ta cần xuất bản hàm Lambda để nó có thể được sử dụng với tất cả các vùng. Để xuất bản, chúng ta cần làm như sau:
Từ trình đơn thả xuống Tác vụ, hãy chọn Publish new version như hình dưới đây -
Nếu bạn, hãy nhấp vào Publish new version, nó hiển thị màn hình sau -
Bây giờ, nhập mô tả Phiên bản và nhấp vào Publish. ARN sẽ hiển thị phiên bản của hàm AWS Lambda được tạo như hình dưới đây -
Thêm trình kích hoạt CloudFront vào phiên bản mới được tạo như hình dưới đây -
Bây giờ, hãy thêm chi tiết cấu hình cho CloudFront. Sự kiện CloudFront có tùy chọn choViewer request, Origin request, Origin responsevà Viewer response.
Tiếp theo, chọn bản phân phối CloudFront đã tạo trước đó. Từevents, chúng tôi sẽ chọn Viewer request. Dựa trên yêu cầu của người xem, máy tính để bàn / thiết bị từ tác nhân người dùng sẽ được quyết định và phản hồi sẽ được thay đổi. Tiếp theo, thêm chi tiết kích hoạt.
Khi trình kích hoạt được thêm vào, chúng ta cần đợi triển khai phân phối từ CloudFront.
Sau khi trạng thái được thay đổi thành Deployed, chúng tôi có thể kiểm tra url CloudFront và kiểm tra tên miền trong trình duyệt.
Màn hình hiển thị trong trình duyệt máy tính để bàn như hình dưới đây. Ở đây chúng tôi đã in tác nhân người dùng từ sự kiện người xem yêu cầu.
Đây là màn hình trong thiết bị di động.
Vì vậy, trong ví dụ trên, chúng tôi đã sử dụng Lambda @ Edge để thay đổi phản hồi trên máy tính để bàn và thiết bị di động.
Giám sát và Khắc phục sự cố bằng Cloudwatch
Các chức năng được tạo trong AWS Lambda được giám sát bởi Amazon CloudWatch. Nó giúp ghi lại tất cả các yêu cầu được thực hiện cho hàm Lambda khi nó được kích hoạt.
Hãy xem xét rằng mã sau được tải lên trong AWS Lambda với tên hàm là lambda and cloudwatch.
exports.handler = (event, context, callback) => {
// TODO implement
console.log("Lambda monitoring using amazon cloudwatch");
callback(null, 'Hello from Lambda');
};
Khi chức năng được kiểm tra hoặc được kích hoạt, bạn sẽ thấy một mục trong Cloudwatch. Với mục đích này, hãy truy cập dịch vụ AWS và nhấp vào CloudWatch.
Chọn nhật ký từ phía bên trái.
Khi bạn nhấp vào Logs, nó có Log Groupscủa hàm AWS Lambda được tạo trong tài khoản của bạn. Chọn bất kỳ chức năng nào củaAWS Lambda và kiểm tra chi tiết. Ở đây, chúng tôi đang đề cập đến hàm Lambda với tên:lambdaandcloudwatch. Các bản ghi được thêm vào hàm Lambda được hiển thị ở đây như hình dưới đây -
Bây giờ, chúng ta hãy thêm trình kích hoạt S3 vào chức năng Lambda và xem chi tiết nhật ký trong CloudWatch như hình dưới đây:
Hãy để chúng tôi cập nhật mã AWS Lambda để hiển thị tệp đã tải lên và tên nhóm như được hiển thị trong mã được cung cấp bên dưới -
exports.handler = (event, context, callback) => {
// TODO implement
console.log("Lambda monitoring using amazon cloudwatch");
const bucket = event.Records[0].s3.bucket.name;
const filename = event.Records[0].s3.object.key;
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, 'Hello from Lambda');
};
Bây giờ, hãy thêm tệp vào s3storetestlambdaEventbucket như hình -
Khi tệp được tải lên, các chức năng AWS Lambda sẽ được kích hoạt và thông báo nhật ký bảng điều khiển từ mã Lambda được hiển thị trong CloudWatch như hình dưới đây -
Nếu có bất kỳ lỗi nào, CloudWatch đưa ra thông tin chi tiết về lỗi như hình bên dưới -
Lưu ý rằng chúng tôi đã gọi sai tên nhóm trong mã AWS Lambda như được hiển thị:
exports.handler = (event, context, callback) => {
// TODO implement
console.log("Lambda monitoring using amazon cloudwatch");
const bucket = event.Records[0].bucket.name;
const filename = event.Records[0].s3.object.key;
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, 'Hello from Lambda');
};
Tham chiếu tên nhóm từ sự kiện bị sai. Do đó, chúng ta sẽ thấy một lỗi hiển thị trong CloudWatch như hình dưới đây -
Số liệu CloudWatch
Bạn có thể xem chi tiết về việc thực thi hàm Lambda trong các chỉ số. Nhấp chuộtMetrics hiển thị ở phía bên trái.
Chi tiết đồ thị cho hàm lambda lambdaandcloudwatch như hình dưới đây -
Nó cung cấp thông tin chi tiết như khoảng thời gian hàm Lambda được thực thi, số lần nó được gọi và các lỗi từ hàm Lambda.
AWS Lambda - Ví dụ bổ sung
Cho đến bây giờ, chúng ta đã thấy AWS Lambda hoạt động với các dịch vụ AWS. Dựa trên kiến thức đó, chúng ta hãy tạo một biểu mẫu đăng ký người dùng đơn giản và đăng dữ liệu bằng cổng API lên AWS Lambda. AWS Lambda sẽ lấy dữ liệu từ sự kiện hoặc trình kích hoạt cổngAPI và sẽ thêm các chi tiết đó vào bảng DynamoDB.
Thí dụ
Chúng ta hãy xem xét một ví dụ và thực hiện các chức năng sau trên nó:
Tạo bảng DynamoDB
Tạo biểu mẫu để đăng ký người dùng
Tạo AWS Lambda và cổng API để gửi tin nhắn tới Điện thoại bằng dịch vụ AWS SNS
Tạo AWS Lambda và cổng API để POST dữ liệu biểu mẫu và chèn vào bảng DynamoDb
Tạo AWS Lambda và cổng API để đọc dữ liệu từ bảng Dynamodb
Công việc cuối cùng của Biểu mẫu đăng ký người dùng
Tạo bảng DynamoDB
Dữ liệu đã nhập sẽ được lưu trữ trong bảng DynamodDB. Chúng tôi sẽ sử dụng cổng API để chia sẻ dữ liệu đã nhập với AWS Lambda và AWS Lambda sau này sẽ thêm các chi tiết trong DynamoDB.
Bạn có thể sử dụng các chi tiết sau để tạo bảng DynamodDB trong bảng điều khiển AWS. Đầu tiên, hãy chuyển đến Dịch vụ AWS và nhấp vàoDynamoDB. Nhấp chuộtTable to create the table as shown below −
You can use the ARN to create policy for the DynamoDB to be used with AWS Lambda.
Go to IAM and select Policies. Click Create policy, choose service as DynamodDB as shown below −
Click All DynamoDB actions as shown above. Choose resource and enter the ARN for table as shown below −
Now, click Add as shown below.
If you click Review policy button at the end of the screen, you can see the following window −
Enter name of the policy and click Create policy button at the end of the page. Now, we need to create role to be used with Lambda. We need permissionsforDynamoDB, APIGateway and Lambda.
Go to AWS services and select IAM. Select Roles from left side and add the required roles.
Enter the role name and click Create role. The role created is roleforlambdaexample.
Create Form for User Registration
Here is the display of the user registration form to enter and to read the data from the dynamodb table.
Create AWS Lambda and API Gateway to Send OTP Message to Phone using SNS service
If you see the user registration form, there is a button validate phone. User is suppose to enter phone number and click on validate phone button to validate the phone number.
For this purpose −
When a user clicks this button, the API gateway post method which contains the phone details is called and internally AWS Lambda is triggered.
Then, AWS Lambda sendsOTP to the phone number entered using AWS SNS service.
The user receives the OTP and has to enter thisOTP number.
The textbox to enter OTP will appear when the phone number is entered and validate phone button is clicked.
The OTP received from AWS Lambda and the OTP entered by the user has to match, to allow the user to submit the user registration form.
A simple block diagram that explains the working of phone validation is shown here −
The AWS Lambda function created is as shown here −
The corresponding AWS Lambda code is as given below −
const aws = require("aws-sdk");
const sns = new aws.SNS({
region:'us-east-1'
});
exports.handler = function(event, context, callback) {
let phoneno = event.mphone;
let otp = Math.floor(100000 + Math.random() * 900000);
let snsmessage = "Your otp is : "+otp;
sns.publish({
Message: snsmessage,
PhoneNumber: "+91"+phoneno
}, function (err, data) {
if (err) {
console.log(err);
callback(err, null);
} else {
console.log(data);
callback(null, otp);
}
});
};
Note that we are using SNS service to send the OTP code. This code is used to validate the mobile number entered by the user in the user registration form. The API gateway created for above phone validation is as follows −
The Lambda function given is phonevalidationexample. We are taking the mobile phone details here to be used inside AWS Lambda. Then, AWS Lambda will send the OTP code to the given mobile number.
Create AWS Lambda and API Gateway to POST Form Data and Insert in DynamoDB Table
For user registration form, all the fields are mandatory. There is anAJAX call made wherein the data entered in the form is posted to the API Gateway URL.
A simple block diagram which explains the working of the submit button is shown here −
Once the form is filled, the submit button will call the API gateway which will trigger AWS Lambda. AWS Lambda will get the details of the form from event or theAPI Gateway and the data will be inserted in the DynamodDB table.
Let us understand the creation of API Gateway and AWS Lambda.
First, go to AWS services and click Lambda. The Lambda function created is as shown here −
Now, to create an API gateway, go to AWS service and select API Gateway. Click on Create API button shown below.
Enter the API name and click on Create API button to add the API.
Now, an API is created called as registeruser. Select the API and click Actions dropdown to create Resource.
Click Create Resource. Now, let us add the POST method. For this, click on resources created on left side and from Actions dropdown select create method. This will display dropdown as shown below −
Select the POST method and add the Lambda function that we created above.
Click Save button to add the method. To send the form details to Lambda function lambdaexample we need to add the Integration Request as shown below −
To post the form details, you will have to click Integration Request. It will display below details.
Click Body Mapping Templates to add the form fields to be posted.
Next, click Add mapping template and enter the content type. Here, we have added application/json as the content type. Click it and here you need to enter the field in json format as shown below −
Now, click the Save button and deploy the API as shown below −
Here is the API created for POST which will use inside our .html file. Please note we need to Enable CORS for the resource created. Will use the api gateway url to make ajax call so the CORS has to enabled.
Select the Methods on which you want to enable the CORS. Click on Enable CORS and replace existing CORS headers.
It displays the confirmation screen as follows −
Click Yes, replace existing values to enable CORS.
The AWS Lambda code forPOST API Gateway is as shown here −
const aws = require("aws-sdk");
const docClient = new aws.DynamoDB.DocumentClient({
region:'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log(event);
console.log("Entering Data");
var data = {
TableName : "registeruser",
Item : {
first_name:event.fname,
last_name:event.lname,
emailid:event.emailid,
mobile_no : event.mphone,
otp:event.otp,
username:event.uname,
password:event.passwd,
confirm_password:event.cpasswd
}
}
docClient.put(data, function(err, value) {
if (err) {
console.log("Error");
callback(err, null);
} else {
console.log("data added successfully");
callback(null, value);
}
});
}
The event parameter in AWS Lambda handler will have all the details which are added earlier in POST integration request. The details from event are added to the DynamodDB table as shown in the code.
Now, we need to get the service details from AWS-SDK as shown below −
const aws = require("aws-sdk");
const docClient = new aws.DynamoDB.DocumentClient({
region:'us-east-1'
});
var data = {
TableName : "registeruser",
Item : {
first_name:event.fname,
last_name:event.lname,
emailid:event.emailid,
mobile_no : event.mphone,
otp:event.otp,
username:event.uname,
password:event.passwd,
confirm_password:event.cpasswd
}
}
docClient.put(data, function(err, value) {
if (err) {
console.log("Error");
callback(err, null);
} else {
console.log("data added successfully");
callback(null, value);
}
});
Create AWS Lambda and API Gateway to Read Data from DynamodDB Table
Now, we will create AWS Lambda function to read data from DynamoDB table. We will trigger APIGateway to the AWS Lambda function which will send data to the html form.
The AWS Lambda function created is as shown below −
The corresponding AWS Lambda code is as follows −
const aws = require("aws-sdk");
const docClient = new aws.DynamoDB.DocumentClient({
region:'us-east-1'
});
exports.handler = function(event, context, callback) {
var readdata = {
TableName : "registeruser",
Limit : 10
}
docClient.scan(readdata, function(err, data) {
if (err) {
console.log("Error");
callback(err, null);
} else {
console.log("Data is " + data);
callback(null, data);
}
});
}
Here the data is read from the DynamoDB table and given to the callback. Now, we will create APIGateway and add AWS Lambda function as the trigger.
We will add get method to the API created earlier.
Lambda function added is lambdareaddataexample. Click Save to save the method and deploy the api.
Final Working of the User Registration Form
The final display of the form is as shown below −
Now, enter the details as shown above. Note that the submit button is disabled. It will be enabled only when all the details are entered as shown −
Now, enter the mobile number and click validate phone button. It will display the alert message saying “OTP is send to the mobile, please enter the OTP to continue”. OTP sent to the mobile number is as follows −
Enter the OTP and remaining details and submit the form.
The data in DynamoDB registeruser table after submit is as shown here −
The code details are as given below −
Example1.html
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" src="formdet.js"></script>
<style>
input[type=text], input[type=password],button {
width: 100%;
padding: 5px 5px;
margin: 5px 0;
box-sizing: border-box;
}
#maincontainer {
width: 80%;
margin: auto;
padding: 10px;
}
div#userregistration {
width: 60%;
float: left;
}
div#userdisplay {
margin-left: 60%;
}
</style>
</head>
<body>
<div id="maincontainer">
<div id="userregistration">
<h1>User Registration Form</h1>
<table border="0">
<tr>
<td><b>First Name<span style="color:red;">*</span> : </b></td>
<td><input type="text" value="" name="fname" id="fname" /></td>
<td id="tdfname" style="display:none;"><span style="color:red;">Enter First Name</span></td>
</tr>
<tr>
<td><b>Last Name<span style="color:red;">*</span> : </b></td>
<td><input type="text" value="" name="lname" id="lname" /></td>
<td id="tdlname" style="display:none;"><span style="color:red;">Enter Last Name</span></td>
</tr>
<tr>
<td><b>Email Id<span style="color:red;">*</span> : </b></td>
<td><input type="text" value="" name="emailid" id="emailid" /></td>
<td id="tdemailid" style="display:none;"><span style="color:red;">Enter Email</span></td>
</tr>
<tr>
<td><b>Mobile No<span style="color:red;">*</span> : </b></td>
<td><input type="text" name="mphone" id="mphone"/></td>
<td id="tdmphone" style="display:none;"><span style="color:red;">Enter Mobile Number</span></td>
</tr>
<tr>
<td></td>
<td><button id="validatephone">validate phone</button></td>
<td></td>
</tr>
<tr id="otpdiv" style="display:none;">
<td><b>Enter OTP<span style="color:red;">*</span>:</b></td>
<td><input type="text" value="" name="otp" id="otp" /></td>
<td id="tdotp" style="display:none;"><span style="color:red;">Enter OTP</span></td>
</tr>
<tr>
<td><b>Username<span style="color:red;">*</span>: </b></td>
<td><input type="text" value="" name="uname" id="uname"/></td>
<td id="tduname" style="display:none;"><span style="color:red;">Enter Username</span></td>
</tr>
<tr><td><b>Password<span style="color:red;">*</span> :</b></td>
<td><input type="password" value="" name="passwd" id="passwd"/></td>
<td id="tdpasswd" style="display:none;"><span style="color:red;">Enter Password</span></td>
</tr>
<tr><td><b>Confirm Password<span style="color:red;">*</span> :</b></td>
<td><input type="password" value="" name="cpasswd" id="cpasswd"/></td>
<td id="tdcpasswd" style="display:none;"><span style="color:red;">Enter Confirm Password</span></td>
</tr>
<tr>
<td></td>
<td><button name="submit" id="submit" style="display:;" disabled="true">Submit</button></td>
<td></td>
</tr>
</table>
</div>
<div id="userdisplay">
<h1>User Display</h1>
<table id="displaydetails" style="display:block;width:80%;padding:5px;margin:5px; border: 1px solid black;">
<tr>
<td></td>
<td>FirstName</td>
<td>LastName</td>
<td>Mobile No</td>
<td>EmailID</td>
</tr>
</table>
</div>
</div>
</body>
</html>
formdet.js
function validateform() {
var sError="";
if ($("#fname").val() === "") { $("#tdfname").css("display","");
sError++;
}
if ($("#lname").val() === "") { $("#tdlname").css("display","");
sError++;
}
if ($("#emailid").val() === "") { $("#tdemailid").css("display","");
sError++;
}
if ($("#mphone").val() === "") { $("#tdmphone").css("display","");
sError++;
}
if ($("#otp").val() === "") { $("#tdotp").css("display","");
sError++;
}
if ($("#uname").val() === "") { $("#tduname").css("display","");
sError++;
}
if ($("#passwd").val() === "") { $("#tdpasswd").css("display","");
sError++;
}
if ($("#cpasswd").val() === "") { $("#tdcpasswd").css("display","");
sError++;
}
if (sError === "") {
return true;
} else {
return false;
}
}
$("#fname").change(function() { if ($("#fname").val() !== "") {
$("#tdfname").css("display","none"); } else { $("#tdfname").css("display","");
}
});
$("#lname").change(function() { if ($("#lname").val() !== "") {
$("#tdlname").css("display","none"); } else { $("#tdlname").css("display","");
}
});
$("#emailid").change(function() { if ($("#emailid").val() !== "") {
$("#tdemailid").css("display","none"); } else { $("#tdemailid").css("display","");
}
});
$("#mphone").change(function() { if ($("#mphone").val() !== "") {
$("#tdmphone").css("display","none"); } else { $("#tdmphone").css("display","");
}
});
$("#otp").change(function() { if ($("#otp").val() !== "") {
$("#tdotp").css("display","none"); } else { $("#tdotp").css("display","");
}
});
$("#uname").change(function() { if ($("#uname").val() !== "") {
$("#tduname").css("display","none"); } else { $("#tduname").css("display","");
}
});
$("#passwd").change(function() { if ($("#passwd").val() !== "") {
$("#tdpasswd").css("display","none"); } else { $("#tdpasswd").css("display","");
}
});
$("#cpasswd").change(function() { if ($("#cpasswd").val() !== "") {
$("#tdcpasswd").css("display","none"); } else { $("#tdcpasswd").css("display","");
}
});
var posturl = "https://4rvwimysc1.execute-api.us-east-1.amazonaws.com/prod/adduser";
var phonevalidationurl = "https://wnvt01y6nc.execute-api.us-east-1.amazonaws.com/prod/validate";
var otpsend = "";
function getdata() {
var a = 0;
$.ajax({ type:'GET', url:posturl, success: function(data) { $("#displaydetails").html('');
$("#displaydetails").css("display", ""); console.log(data); $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:gray;"><td>Name</td><td>Mobile No</td><td>EmailID</td></tr>');
data.Items.forEach(function(registeruser) {
var clr = (a%2 === 0) ? "#eee": "white";
a++;
$("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:'+clr+'"><td>'+registeruser.first_name+'-'+registeruser.last_name+'</td><td>'+registeruser.mobile_no+'</td><td>'+registeruser.emailid+'</td></tr>'); }); }, error: function(err) { console.log(err); } }); } $(document).ready(function() {
$("#otp").on("change", function() { var otpentered = $("#otp").val();
if (otpsend == otpentered) {
document.getElementById("submit").disabled = false;
} else {
alert("OTP is not valid.Please enter the valid one or validate phone again to continue!");
document.getElementById("submit").disabled = true;
}
});
$("#validatephone").on("click", function() { $.ajax({
type:'POST',
url:phonevalidationurl,
data:JSON.stringify({
"mphone":$("#mphone").val() }), success: function(data) { $("#otpdiv").css("display", "");
alert("OTP is send to the mobile, please enter to continue");
console.log(data);
otpsend = data;
},
error : function(err) {
$("#otpdiv").css("display", "none"); alert("Invalid mobile no."); } }); }); $("#submit").on("click", function() {
if (validateform()) {
$.ajax({ type:'POST', url:posturl, data:JSON.stringify({ "fname": $("#fname").val(),
"lname": $("#lname").val(), "emailid":$("#emailid").val(),
"mphone":$("#mphone").val(), "otp":$("#otp").val(),
"uname":$("#uname").val(), "passwd":$("#passwd").val(),
"cpasswd":$("#cpasswd").val()
}),
success: function(data) {
alert("Data added successfully");
console.log(data);
getdata();
}
});
}
});
getdata();
});
Till now, we have done AJAX call to the API created and posted the data as shown above.
The AJAX call to add the data to the table is as follows −
var posturl = "https://4rvwimysc1.execute-api.us-east-1.amazonaws.com/prod/adduser";
$(document).ready(function() {
$("#submit").on("click", function() { if (validateform()) { $.ajax({
type:'POST',
url:posturl,
data:JSON.stringify({
"fname": $("#fname").val(), "lname": $("#lname").val(),
"emailid":$("#emailid").val(), "mphone":$("#mphone").val(),
"otp":$("#otp").val(), "uname":$("#uname").val(),
"passwd":$("#passwd").val(), "cpasswd":$("#cpasswd").val()
}),
success: function(data) {
alert("Data added successfully");
console.log(data);
getdata();
}
});
}
});
});
Note that to read the data, a function is called, whose code is given below −
function getdata() {
var a = 0;
$.ajax({ type:'GET', url:posturl, success: function(data) { $("#displaydetails").html('');
$("#displaydetails").css("display", ""); console.log(data); $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:gray;"><td>Name</td><td>Mobile No</td><td>EmailID</td></tr>');
data.Items.forEach(function(registeruser) {
var clr = (a%2 === 0) ? "#eee": "white";
a++;
$("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:'+clr+'"><td>'+registeruser.first_name+'-'+registeruser.last_name+'</td><td>'+registeruser.mobile_no+'</td><td>'+registeruser.emailid+'</td></tr>');
});
},
error: function(err) {
console.log(err);
}
});
}
When you click mobile number validate button, the following code is called and sends the mobile number −
var phonevalidationurl = "https://wnvt01y6nc.execute-api.us-east-1.amazonaws.com/prod/validate";
var otpsend = "";
$("#validatephone").on("click", function() {
$.ajax({ type:'POST', url:phonevalidationurl, data:JSON.stringify({ "mphone":$("#mphone").val()
}),
success: function(data) {
$("#otpdiv").css("display", ""); alert("OTP is send to the mobile, please enter the OTP to continue"); console.log(data); otpsend = data; }, error : function(err) { $("#otpdiv").css("display", "none");
alert("Invalid mobile no.");
}
});
});
// Validate otp
$("#otp").on("change", function() { var otpentered = $("#otp").val();
if (otpsend == otpentered) {
document.getElementById("submit").disabled = false;
} else {
alert("OTP is not valid.Please enter the valid one or validate phone again to continue!");
document.getElementById("submit").disabled = true;
}
}