AWS Lambda – 빠른 안내서
AWS Lambda서버없이 컴퓨팅을 포함하는 서버리스 컴퓨팅을 수행하는 서비스입니다. 코드는 S3 버킷에서 파일 추가 / 제거, Amazon dynamo dB 테이블 업데이트, Amazon API 게이트웨이의 HTTP 요청 등과 같은 AWS 서비스의 이벤트 응답을 기반으로 실행됩니다.
작업하려면 AWS Lambda, AWS Lambda 서비스에서 코드를 푸시하기 만하면됩니다. 인프라, 운영 체제, 서버 유지 관리, 코드 모니터링, 로그 및 보안과 같은 기타 모든 작업 및 리소스는 AWS에서 처리합니다.
AWS LambdaJava, NodeJS, Python, C # 및 Go와 같은 언어를 지원합니다. AWS Lambda는 AWS 서비스에서만 작동합니다.
AWS Lambda 란 무엇입니까?
공식 문서에서 제공하는 AWS Lambda의 정의는 다음과 같습니다.
AWS Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수있는 컴퓨팅 서비스입니다. AWS Lambda는 필요할 때만 코드를 실행하고 하루에 몇 번의 요청에서 초당 수천으로 자동 확장됩니다. 사용한 컴퓨팅 시간에 대해서만 비용을 지불합니다. 코드가 실행되지 않을 때는 비용이 부과되지 않습니다.
AWS Lambda는 어떻게 작동합니까?
간단한 5 단계로 AWS Lambda의 작동을 설명하는 블록 다이어그램은 다음과 같습니다.
Step 1 − AWS Lambda가 지원하는 모든 언어 (NodeJS, Java, Python, C # 및 Go)로 AWS Lambda 코드를 업로드합니다.
Step 2 − AWS Lambda를 트리거 할 수있는 몇 가지 AWS 서비스입니다.
Step 3 −트리거가 발생한 업로드 코드 및 이벤트 세부 정보가있는 AWS Lambda. 예를 들어 Amazon S3, Amazon API Gateway, Dynamo dB, Amazon SNS, Amazon Kinesis, CloudFront, Amazon SES, CloudTrail, 모바일 앱 등의 이벤트입니다.
Step 4 − 다음과 같은 시나리오에서 AWS 서비스에 의해 트리거 될 때만 AWS Lambda 코드를 실행합니다.
- 사용자가 S3 버킷에 파일 업로드
- http get / post 엔드 포인트 URL이 적중되었습니다.
- 데이터가 dynamo dB 테이블에서 추가 / 업데이트 / 삭제됩니다.
- 푸시 알림
- 데이터 스트림 수집
- 웹 사이트 호스팅
- 이메일 보내기
- 모바일 앱 등
Step 5 − AWS는 AWS 람다 코드가 실행될 때만 요금이 부과되며 그렇지 않은 경우에는 요금이 부과되지 않습니다.
AWS Lambda 사용의 이점
AWS Lambda는 작업 할 때 여러 가지 이점을 제공합니다. 이 섹션에서는 이에 대해 자세히 설명합니다.
코드 작업의 용이성
AWS Lambda는 코드를 업로드 할 수있는 인프라를 제공합니다. 코드를 유지 관리하고 필요한 이벤트가 발생할 때마다 코드를 트리거합니다. 코드에 필요한 메모리와 타임 아웃을 선택할 수 있습니다.
AWS Lambda는 이벤트 트리거에 따라 병렬 요청을 실행할 수도 있습니다.
로그 제공
AWS Lambda는 코드 실행 횟수, 실행에 걸린 시간, 소비 된 메모리 등에 대한 세부 정보를 제공합니다. AWS CloudWatch는 모든 로그를 수집하므로 실행 흐름을 이해하고 코드를 디버깅하는 데 도움이됩니다.
사용량에 따른 청구
AWS Lambda 청구는 메모리 사용량, 요청 및 실행에 대해 이루어지며 최소 100ms 단위로 청구됩니다. 따라서 500ms 실행의 경우 100ms마다 요금이 청구됩니다. AWS 람다 코드를 500ms 내에 실행하도록 지정하고 실행하는 데 걸리는 시간이 200ms에 불과하면 AWS는 500ms가 아닌 200ms의 실행 시간에 대해서만 청구합니다. AWS는 항상 사용한 실행 시간에 대해 요금을 부과합니다. 함수가 실행되지 않으면 지불 할 필요가 없습니다.
다국어 지원
AWS Lambda는 Node.js와 같이 널리 사용되는 언어를 지원합니다. Node.js, Python, Java, C # 및 Go. 이들은 널리 사용되는 언어이며 모든 개발자는 AWS Lambda 용 코드를 쉽게 작성할 수 있습니다.
손쉬운 코드 작성 및 배포
코드 작성 및 배포를 위해 Lambda에서 사용할 수있는 많은 옵션이 있습니다. 코드 작성을 위해 AWS 온라인 편집기, Visual Studio IDE 또는 Eclipse IDE를 사용할 수 있습니다. 또한 AWS Lambda 코드를 쉽게 작성하고 배포 할 수있는 서버리스 프레임 워크를 지원합니다. AWS 콘솔 외에도 코드를 생성하고 배포 할 수있는 AWS-cli가 있습니다.
다른 기능들
AWS 프리 티어에 로그인하여 AWS Lambda를 무료로 사용할 수 있습니다. 1 년 동안 무료로 서비스를 제공합니다. AWS 프리 티어에서 제공하는 무료 서비스를 살펴보십시오.
AWS Lambda 사용의 단점
많은 장점에도 불구하고 AWS Lambda에는 다음과 같은 단점이 있습니다.
소규모 프로젝트에는 적합하지 않습니다.
코드를주의 깊게 분석하고 메모리와 시간 제한을 결정해야합니다. 함수에 할당 된 시간보다 더 많은 시간이 필요한 경우 지정된 시간 제한에 따라 함수가 종료되고 코드가 완전히 실행되지 않습니다.
AWS Lambda는 인프라를 AWS에 전적으로 의존하므로 코드에서 요구하는 경우 추가 소프트웨어를 설치할 수 없습니다.
AWS Lambda를 트리거하는 이벤트
AWS Lambda를 트리거 할 수있는 이벤트는 다음과 같습니다.
- S3 객체에 진입
- Dynamo DB 테이블에 데이터 삽입, 업데이트 및 삭제
- SNS에서 푸시 알림
- API Gateway에 대한 GET / POST 호출
- 뷰어 또는 CloudFront의 오리진 요청 / 응답에서 헤더 수정
- AWS Kinesis 데이터 스트림의 로그 항목
- CloudTrail의 로그 기록
AWS Lambda의 사용 사례
AWS Lambda는 주로 백그라운드 프로세스를 실행하는 데 사용되는 컴퓨팅 서비스입니다. 다른 AWS 서비스와 함께 사용할 때 트리거 할 수 있습니다. AWS Lambda를 사용할 수있는 AWS 서비스 목록은 다음과 같습니다.
S3 객체 및 AWS Lambda
Amazon S3는 S3에 파일 업로드가있을 때 이벤트 세부 정보를 AWS Lambda에 전달합니다. 파일 업로드, 파일 삭제 또는 파일 이동에 대한 세부 정보가 AWS Lambda에 전달됩니다. AWS Lambda의 코드는 이벤트 세부 정보를 수신 할 때 필요한 단계를 수행 할 수 있습니다. 예를 들어 S3에 삽입 된 이미지의 썸네일을 생성합니다.
DynamoDB 및 AWS Lambda
DynamoDB는 테이블에 추가, 업데이트 및 삭제 된 데이터가있을 때 AWS Lambda를 트리거 할 수 있습니다. AWS Lambda 이벤트에는 삽입 / 업데이트 또는 삭제에 대한 AWS DynamoDB 테이블의 모든 세부 정보가 있습니다.
API Gateway 및 AWS Lambda
API Gateway는 GET / POST 메서드에서 AWS Lambda를 트리거 할 수 있습니다. 양식을 생성하고 API Gateway 엔드 포인트와 세부 정보를 공유하고 추가 처리 (예 : DynamoDB 테이블에 데이터 입력)를 위해 AWS Lambda와 함께 사용할 수 있습니다.
SNS 및 AWS Lambda
SNS는 푸시 알림, SMS 전송 등에 사용됩니다. SNS에서 푸시 알림이 발생하면 AWS lambda를 트리거 할 수 있습니다. 트리거를 수신하면 AWS Lambda에서 전화 번호로 SMS를 보낼 수도 있습니다.
예약 된 이벤트 및 AWS Lambda
예약 된 이벤트는 크론 작업에 사용할 수 있습니다. AWS Lambda를 트리거하여 규칙적인 시간 패턴으로 작업을 수행 할 수 있습니다.
CloudTrail 및 AWS Lambda
CloudTrail은 계정의 로그를 모니터링하는 데 도움이 될 수 있습니다. AWS Lambda를 사용하여 CloudTrail 로그를 추가로 처리 할 수 있습니다.
Kinesis 및 AWS Lambda
Kinesis는 웹 사이트 클릭, 로그, 소셜 미디어 피드에서 발생하는 실시간 추적 데이터를 캡처 / 저장하는 데 사용되며 AWS Lambda에 대한 트리거는이 로그에 대한 추가 처리를 수행 할 수 있습니다.
CloudFront 및 Lambda @ Edge
CloudFront는 웹 사이트를 호스팅 할 수있는 콘텐츠 전송 네트워크이며 Lambda @ Edge를 사용하여 뷰어 요청, 오리진 요청, 오리진 응답 및 뷰어 응답에서 오는 헤더를 처리 할 수 있습니다. 헤더 수정에는 쿠키 데이터 수정, URL 재 작성, AB 테스트에 사용되어 사용자에게 다시 전송되는 응답, 보안 목적으로 추가 헤더 정보 추가 등과 같은 작업이 포함됩니다.
AWS Lambda 작업을 시작하기 전에 Amazon 콘솔에 로그인해야합니다. AWS Lambda는 두 가지 IDE를 지원합니다.Visual studio 과 Eclipse. 이 장에서는 AWS Lambda 설치에 대해 단계별로 자세히 설명합니다.
AWS 콘솔에서 로그인 생성
Amazon 프리 티어를 사용하여 AWS 콘솔에서 무료로 로그인을 생성 할 수 있습니다. 다음 단계에 따라 Amazon 서비스를 사용하기 위해 Amazon에 로그인을 생성 할 수 있습니다.
1 단계
이동 https://aws.amazon.com/free/무료 계정 만들기를 클릭하십시오. 아래 주어진 스크린 샷을 볼 수 있습니다-
2 단계
클릭 Create a Free Account 버튼을 누르면 아래와 같은 화면으로 리디렉션됩니다.
이제 위에 표시된이 양식에 원하는대로 이메일 주소, 암호 및 AWS 계정 이름의 세부 정보를 입력하고 Continue.
3 단계
이제 아래와 같은 화면을 찾을 수 있습니다.
이 양식에 필요한 모든 세부 정보를 입력하십시오.
선택한 국가에 따라 지불해야 할 최소 요금이 있습니다. 입력 한 정보가 확인되면 동일한 금액이 환불됩니다. 무료 계정을 만들려면 신용 카드 또는 직불 카드 정보가 필요합니다. 인도 사용자 용Rs 2/- 공제되고 미국 $1 사용자가 확인되면 각 카드 사용자에게 동일한 금액이 환불됩니다.
계정은 무료이며 서비스 사용에 제한이 있습니다. 사용량이 한도를 초과하면 사용자에게 요금이 부과됩니다.
위에 표시된 양식에 세부 정보를 입력하면 Create Account and Continue.
아래와 같이 다음 화면으로 이동합니다.
4 단계
신용 카드 또는 직불 카드 인 결제 세부 정보와 만료일 및 카드 소지자의 이름을 아래와 같이 입력해야합니다.
5 단계
모든 세부 정보를 입력했으면 Secure Submit 은행에서 카드를 확인하고 OTP카드와 연결된 모바일에서. 아래와 같이 창을 찾을 수 있습니다-
이제 OTP 세부 사항 및 클릭 Make Payment. 선택한 국가에 따라 요금이 부과됩니다.
6 단계
결제가 완료되면 다음 단계는 전화 인증입니다. 아래와 같이 휴대폰 번호를 입력해야합니다-
세부 정보가 입력되면 클릭 Call Me Now. AWS는 자동화 된 시스템을 사용하여 즉시 호출합니다. 전화 메시지가 표시되면 전화 키패드를 사용하여 AWS 사이트에 표시 될 4 자리 숫자를 전화에 입력합니다. 이것은 귀하의 번호를 확인하고 로그인을 만드는 동안 처음에 지정된 메일 ID로 메일 활성화를 받게됩니다.
7 단계
메일 링크를 클릭하고 계정 이름 또는 이메일 ID와 암호를 입력하고 아래와 같이 AWS 서비스에 로그인합니다.
계정 이름은 위와 같이 오른쪽 상단에 표시됩니다. 이제 AWS Lambda 서비스 사용을 시작할 수 있습니다. AWS Lambda 서비스의 경우 지원되는 언어는 NodeJS, Python, Java, C # 및 Go입니다.
Visual Studio 2017 설치
AWS와 호환되는 2 개의 IDE가 있습니다. Visual Studio 과 Eclipse. 이 섹션에서는 Windows, Linux Mac에 Visual Studio 2017을 설치하는 방법에 대해 설명합니다. Visual Studio의 공식 사이트로 이동합니다.https://www.visualstudio.com/downloads/. 다음과 같이 시작 화면을 찾을 수 있습니다.
커뮤니티 버전 다운로드 ie Visual Studio Community 2017지금은 무료로 연습 할 수 있습니다. 설치되면 나중에 사용할 패키지를 선택해야하는 설치 단계를 통해 실행됩니다. 선택할 수 있습니다 nodejs, python, c# 나중에 작업 할 수있는 패키지입니다.
Visual Studio 2017에 대한 AWS Toolkit 지원
Visual Studio 2017이 설치되면 Visual Studio 2017 용 AWS Toolkit 지원을 설치하기 위해 주어진 단계를 따라야합니다.
1 단계
이동 https://aws.amazon.com/visualstudio/ Visual Studio 용 AWS 도구 키트를 다운로드합니다. 화면은 다음과 같습니다.
Visual Studio 2017 용으로 다운로드 된 패키지는 vsix꾸러미. Visual Studio 버전이 2013-2015 사이 인 경우msi인스톨러. 클릭Download 버튼을 누릅니다.
2 단계
이제 다운로드 한 vsix 패키지를 두 번 클릭하면 아래와 같이 설치 단계가 실행됩니다.
Visual Studio가 성공적으로 설치되면 아래와 같은 창이 표시됩니다.
3 단계
이제 Visual Studio 2017을 열면 아래와 같이 AWS의 시작 페이지가 표시됩니다.
Visual Studio에서 AWS 서비스를 시작하고 사용하려면 액세스 키, 보안 키, 계정 번호를 추가해야합니다.
NodeJS 용 AWS Lambda BoilerPlate
함께 사용할 수 있습니다 visual studio code 아래 그림과 같이.
1 단계
다운로드 할 수 있습니다. Visual studio code 공식 웹 사이트에서 무료로 :https://www.visualstudio.com/downloads/. Visual Studio 다운로드의 홈 페이지는 다음과 같습니다.
2 단계
이제 아래와 같이 Visual Studio 코드를 엽니 다.
3 단계
AWS에 대한 지원을 설치하려면 support for nodejs옵션은 확장 내에서 사용할 수 있습니다. AWS를 검색하면 다음과 같은 옵션이 표시됩니다.
4 단계
이제 AWS Lambda 용 상용구를 nodejs 그림과 같이-
5 단계
리포지토리를 클릭하고 Visual Studio에서 복제하여 Visual Studio에서 Lambda 함수 작성을 시작합니다. Visual Studio에서 복제 할 수있는이 리포지토리로 리디렉션됩니다.https://github.com/loganarnett/vscode-lambda-snippets. 이제 다음에서 명령 팔레트를 엽니 다.View Visual Studio의 옵션.
6 단계
그것을 클릭하고 아래와 같이 git clone을 선택하십시오-
7 단계
저장소 URL을 입력하고 선택한대로 로컬에 저장합니다. 창조하다index.js 람다 함수로 작업하려면 아래에 표시된 파일-
Eclipse IDE 설치
이제 최신 Eclipse Java EE IDE를 설치해야합니다. Eclipse 공식 사이트에서 다운로드 할 수 있습니다.https://www.eclipse.org/downloads/
Eclipse IDE 용 AWS Toolkit 지원
Eclipse가 설치되면 다음 단계를 수행하십시오.
1 단계
메뉴에서 도움말로 이동하여 Install New Software.
2 단계
시작하다 https://aws.amazon.com/eclipse 레이블이 지정된 텍스트 상자에 Work with 대화 상자 상단에 있습니다.
3 단계
이제 필요한 AWS Core Management Tools 및 아래 표시된 목록의 기타 선택 항목.
4 단계
이제 Next. Eclipse는 아래에 제공된 추가 단계에서 제공되는 나머지 설치 단계를 안내합니다.
5 단계
AWS 핵심 모듈은 아래 스크린 샷과 같이 아래 그리드에 표시됩니다.
6 단계
AWS 도구를 설치하면 아래와 같이 Eclipse에서 사용할 수 있습니다.
7 단계
Amazon 서비스를 클릭하면 다음 화면을 볼 수 있습니다.
이제 AWS Explorer를 클릭하여 사용 가능한 서비스를 확인하십시오. 다음 장에서 설치된 IDE로 작업하는 방법에 대해 설명합니다.
AWS Lambda는 서버없이 코드 컴퓨팅을 처리하는 서비스입니다. 서버리스 컴퓨팅이라고합니다. 코드는 S3 버킷에서 파일 추가 / 제거, Amazon DynamoDBtables 업데이트, Amazon Api 게이트웨이의 HTTP 요청 등과 같은 AWS 서비스의 이벤트 응답을 기반으로 실행됩니다.
AWS Lambda 코드는 NodeJS, Java, C #, Python 및 Go로 작성할 수 있습니다. 이 장에서는 AWS 콘솔에서 AWS Lambda 함수를 생성하는 방법에 대해 자세히 설명합니다.
AWS 콘솔
링크에서 AWS 콘솔에 로그인 https://aws.amazon.com/console. 로그인하면 AWS 서비스가 표시되는 화면으로 리디렉션됩니다.
예 : 함수 생성
예제를 통해 AWS 콘솔의 기능을 이해하겠습니다. Lambda (위에 표시됨)를 클릭하면 아래와 같이 함수를 생성하도록 리디렉션됩니다.
딸깍 하는 소리 Create function 버튼과 화면에 다음 세부 정보가 표시됩니다.
기본적으로 옵션은 다음과 같습니다. Author from scratch. 이 옵션을 사용하면 Lambda 코드를 처음부터 작성할 수 있습니다. 다음과 같은 간단한 기능이 있습니다.hello world 메시지.
두 번째 옵션 Blue prints 다음과 같은 세부 사항이 있습니다.
AWS Lambda에서 사용할 수있는 언어로 일부 aws 서비스에 대해 이미 작성된 코드의 세부 정보를 제공합니다. 체크인 할 수있는 서비스에 대해 AWS Lambda 코드를 작성해야하는 경우blue prints 시작하십시오.
세 번째 옵션 Serverless Application Repository AWS Lambda 코드를 배포하는 데 도움이되는 서버리스 애플리케이션 설정이 있습니다.
추가 논의에서는 다음을 사용하여 AWS lambda 함수를 생성하는 첫 번째 옵션에 대해 작업 할 것입니다. Author from scratch.
Lambda 함수를 생성하기 전에 역할, 즉 AWS 서비스 및 AWS Lambda 작업을위한 권한이 필요합니다. 나중에 역할을 aws lambda 함수에 할당해야합니다.
AWS 콘솔에서 역할 생성
AWS 콘솔에서 역할을 생성하려면 AWS 콘솔 서비스로 이동하여 아래와 같이 IAM을 클릭합니다.
이제 클릭하면 IAM, 다음과 같은 화면이 나타납니다-
선택하면 Roles, 화면에서 다음 버튼을 볼 수 있습니다-
이제 Create role. 생성 된 역할을 사용해야하는 서비스를 선택하라는 메시지가 표시됩니다.
이 역할을 AWS Lambda와 함께 사용해야하므로 Lambda 클릭 Next:Permissions위와 같이 버튼을 누릅니다. 다음 화면에는 AWS 서비스별로 사용 가능한 정책 이름이 표시됩니다. 여기에서 정책을 선택할 수 있습니다-
예를 들어 AWS Lambda가 S3 및 DynamoDB와 함께 작동 할 수있는 권한을 원하는 경우 정책을 선택해야합니다. 검색 상자에 AWS 서비스를 입력하고 확인란을 클릭합니다. 여러 정책을 선택하고 나중에Next:Review.
자신 만의 정책을 만드는 것도 가능합니다. 예를 들어, dynamodb 테이블이 있고 해당 테이블에만 권한을 부여해야합니다. 이러한 경우 정책을 생성 할 수 있습니다.
클릭 Create policy위 화면과 같이 버튼을 누릅니다. 다음은 화면에 표시되는 세부 정보입니다.
선택 Service정책을 생성하고 있습니다. 나중에 Actions에 대한 데이터를 표시합니다.resources 과 Request conditions.
이제 서비스를 선택해야합니다. 선택하자AWS Dynamodb 검색에서. Actions 다음과 같은 세부 사항이 있습니다-
이제 Access levelDynamoDB에 제공하고 싶습니다. 그때,resources 다음 세부 정보가 표시됩니다-
이제 테이블 리소스 유형을 선택합니다. 다음 출력을 볼 수 있습니다-
테이블에 대한 권한을 얻으려면 Add ARN. ARN은 AWS DynamoDB에서 생성 된 테이블에 고유 한 세부 정보입니다. dynamodb에서 테이블이 생성되면 세부 정보를 얻을 수 있습니다.
클릭하면 Add ARN 다음 세부 정보가 표시됩니다.
이제 입력하면 ARN 그리고 Region, Account 과 Table이름이 채워집니다. 클릭해야합니다Add버튼을 눌러 정책을 추가하십시오. 마찬가지로 다른 서비스에 대한 정책을 생성 할 수 있습니다.
여기에서는 두 가지 정책을 선택했습니다. AmazonS3FullAccess 과 AmazonDynamoDBFullACcess. 해당 역할에서 S3 및 DynamoDB에 대한 전체 액세스 권한을 부여했습니다. 그러나 필요한 버킷과 테이블에만 권한을 부여하는 것이 좋습니다.
앞에서 설명한 단계에 따라 다음을 사용하여 정책을 만들 수 있습니다. ARN.
1 단계
딸깍 하는 소리 Create role버튼을 눌러 역할을 만듭니다. 생성 된 모든 역할이 다음과 같이 표시됩니다.
2 단계
생성 된 역할을 수정해야하는 경우 필요한 역할을 선택할 수 있습니다. 우리가 선택하면Author from scratch option, 당신은 입력해야 Name, Runtime and Role.
3 단계
다음 세부 정보를 볼 수 있습니다. Runtime 드롭 다운-
4 단계
원하는 런타임을 선택하고 표시된대로 진행할 수 있습니다.
Role 드롭 다운에는 다음과 같은 옵션이 있습니다.
Choose an existing role − 그러면 IAM 역할에서 생성 된 모든 역할이 표시됩니다.
Create new role from template(s) −이렇게하면 역할을 만들 수 있으며 해당 역할에 대해 선택할 수있는 권한이 표시됩니다. 더 나은 이해를 위해 스크린 샷을 관찰하십시오.
Create a custom role − 이를 통해 사용자는 앞에서 설명한대로 정책을 만들 수 있습니다.
5 단계
선택 runtime, role기능을 추가하십시오. 클릭Create function버튼을 눌러 람다 함수를 만듭니다. 표시되는 다음 화면은 다음과 같습니다.
AWS Lambda 함수의 일부
AWS Lambda 함수에는 두 부분이 있습니다.Configuration 과 Monitoring. 각각에 대해 자세히 논의하겠습니다.
구성
구성에는 다음 기능이 포함됩니다.
Add Triggers
AWS Lambda 함수에 추가하는 데 필요한 트리거는 다음과 같이 표시됩니다.
트리거를 선택할 때 해당 트리거에 대한 구성 세부 정보를 추가해야합니다. 예제 S3 트리거의 경우 버킷 이름을 선택해야합니다. Dynamodb 트리거의 경우 테이블 이름을 선택해야합니다.
예
S3 트리거에 대한 구성 세부 정보의 예를 살펴 보겠습니다.
이제 추가 된 S3 트리거에 대한 구성 세부 정보를 추가합니다.
여기에서 bucket name, event type Lambda, 접두사 및 필터 패턴 (있는 경우)을 트리거하려는 Add 방아쇠.
Lambda에 코드 추가
이제 작성할 Lambda 코드에 집중해야합니다. AWS Lambda에 코드를 추가하려면 세 가지 옵션이 있습니다.
- 인라인 편집기 사용
- .zip 파일 사용
- Amazon S3에서 파일 업로드
아래 스크린 샷에 나와 있습니다.
각각에 대해 자세히 논의하겠습니다.
Using the inline editor
코드를 작성할 수있는 인라인 코드 편집기는 다음과 같습니다.
원하는 언어를 선택하여 코드를 작성할 수 있습니다. 여기서 런타임을 다시 선택할 수 있습니다.
더 나은 이해를 위해 다음 스크린 샷을 참조하십시오.
코드를 작성해야합니다. index.js.Handler. 세부 사항은 런타임에 따라 다릅니다. 에 대한nodejs, 그것은 filename.export function 바로 지금 index.lambda handler.
Upload a .ZIP file
먼저 코드를 작성하고 압축 한 다음 선택하여 zip 파일을 업로드 할 수 있습니다. Upload a .ZIP file.
Upload a file from Amazon S3
S3 버킷에 파일을 업로드하고 옵션을 선택할 수 있습니다. Upload a file from Amazon S3.
참고 .ZIP 과 S3 런타임을 변경할 수 없습니다.
환경 변수
키 값 쌍을 가져와 AWS Lambda 코드와 공유합니다. AWS Lambda의 환경 변수를 사용하여 데이터베이스 연결 세부 정보, 출력 저장과 관련된 파일 세부 정보, 로그 파일 세부 정보 등을 저장할 수 있습니다.
태그
여러 지역에서 사용할 때 함수를 더 잘 구성하기 위해 AWS Lambda에 추가 된 키-값 쌍입니다. 간단한 사용 사례의 경우 필요하지 않습니다. 생성 된 Lambda 함수가 많은 경우 태그 지정은 Lambda 함수를 필터링하고 관리하는 데 도움이됩니다.
실행 역할
Lambda 함수 생성을 시작할 때 제대로 수행하지 않은 경우 여기에서 역할을 다시 변경할 수 있습니다. 여기에서 새 역할을 업데이트하거나 만들 수 있습니다. Lambda 함수 생성을 시작할 때 표시되었던 것과 동일한 옵션을 제공합니다.
기본 설정
여기에 Lambda 함수가 수행하는 작업에 대한 간단한 설명을 입력해야합니다. Lambda 함수에 필요한 메모리와 제한 시간을 선택합니다.
회로망
이를 통해 VPC에서 Lambda 함수에 액세스 할 수있는 VPC를 선택할 수 있습니다. 기본적으로 VPC는 선택되지 않습니다.
디버깅 및 오류 처리
디버깅 및 오류 처리를 위해 세부 정보를 보낼 AWS 서비스를 선택할 수 있습니다. 사용 가능한 옵션은 다음과 같습니다.None, SNS 과 SQS.
동시성
이를 통해이 함수에 허용되는 동시 실행의 특정 제한을 할당 할 수 있습니다.
감사 및 규정 준수
여기에는 AWS CloudTrail의 도움으로 관리되는 로그가 포함됩니다.
완료되면 여기에 표시된대로 저장 버튼을 사용하여 변경 사항을 저장해야합니다.
이제 클릭하면 Test버튼을 누르면 테스트 이벤트를 요청합니다. 다음과 같이 샘플 테스트 이벤트를 전달할 수 있습니다.
생성 된 테스트 이벤트는 다음과 같습니다.
이제 테스트 이벤트를 저장하고 테스트 버튼을 클릭하여 AWS Lambda 함수의 실행을 확인합니다.
코드 index.js 다음과 같습니다-
exports.lambdahandler = (event, context, callback) => {
// TODO implement
console.log(event.key1);
console.log(event.key2);
console.log(event.key3);
callback(null, 'Lambda test');
};
콜백 함수는 오류 또는 성공이있을 때 호출됩니다. 성공하면 볼 수 있습니다Lambda test 표시됩니다.
모니터링
Lambda 함수의 실행 세부 정보를 보려면 모니터링 탭을 선택합니다. 그래프는 실행 시간, 발생한 오류 등에 대한 세부 정보를 보여줍니다.
Cloudwatch에서 로그를 볼 수도 있습니다. 이를 위해 AWS 서비스로 이동하여 다음과 같이 cloudwatch를 선택하십시오.
이제 왼쪽에서 로그를 선택하고 필터에 함수 이름을 입력하십시오.
AWS Lambda 함수는 호출 될 때 코드를 실행합니다. 이 장에서는 AWS Lambda 함수의 수명주기와 관련된 이러한 모든 단계에 대해 자세히 설명합니다.
Lambda 함수 빌드 단계
Lambda 함수의 수명주기에는 4 가지 필수 단계가 포함됩니다.
- Authoring
- Deploying
- Monitoring
- Troubleshooting
Lambda 코드 작성
AWS Lambda 함수 코드는 다음 언어로 작성할 수 있습니다.
- NodeJS
- Java,
- Python
- C#
- Go.
AWS 콘솔, AWS CLI, Eclipse IDE, Visual Studio IDE, 서버리스 프레임 워크 등을 사용하여 AWS Lambda 용 코드를 작성할 수 있습니다.
다음 표에는 Lambda 함수를 작성하는 데 사용할 수있는 언어 목록과 다양한 도구 및 IDE가 나와 있습니다.
언어 | Lambda 코드 작성을위한 IDE |
---|---|
NodeJS | AWS Lambda 콘솔 Visual Studio IDE |
자바 | 이클립스 IDE |
파이썬 | AWS Lambda 콘솔 |
씨# | Visual Studio IDE .NET 코어 |
가다 | AWS Lambda 콘솔 |
Lambda 코드 배포
Lambda 함수를 작성하려는 언어를 결정하면 코드를 배포하는 두 가지 방법이 있습니다.
- AWS 콘솔에서 직접 코드 작성
- 모든 파일 및 종속성이있는 파일을 압축하거나 jar로 만듭니다.
그러나 zip 파일에 적절한 권한을 부여해야합니다.
Lambda 코드 테스트
Lambda 코드는 AWS Lambda 콘솔 내에서 이벤트에 대해 테스트 할 수 있습니다. AWS CLI 및 서버리스 CLI에서 Lambda 함수를 테스트 할 수도 있습니다. AWS 콘솔에는 AWS Lambda 함수를 테스트하는 동안 샘플 이벤트로 사용할 수있는 이벤트 데이터도 있습니다.
Lambda 함수 모니터링
Lambda 함수 모니터링은 AWS CloudWatch를 사용하여 수행 할 수 있습니다. 선택한 언어로 필요한 로그 메시지를 추가하고 AWS CloudWatch에서 동일한 내용을 볼 수 있습니다.
Lambda 함수 작성을 시작하려면 따라야 할 패턴이 있습니다. 다음은 Lambda 함수를 작성하기 위해 따라야 할 주요 핵심 개념입니다.
매니저
핸들러는 실행이 시작되는 AWS 람다 함수의 이름입니다. 아래와 같이 AWS 콘솔에 나타납니다.
여기서 우리는 기본 핸들러를 다른 이름으로 변경하고 핸들러에서 동일하게 업데이트했습니다.
핸들러가 호출되는 방식은 런타임으로 선택한 언어와 다릅니다.
핸들러에 전달 된 매개 변수
핸들러 함수를 관찰하면 전달 된 매개 변수는 다음과 같습니다. event, context 과 call back function 아래와 같이-
Event 매개 변수에는 사용 된 트리거에 대한 모든 세부 사항이 있습니다.
Context매개 변수는 기본적으로 Lambda 함수가 실행할 런타임 세부 정보를 처리합니다. 다음을 사용하여 Lambda 함수와 상호 작용할 수 있습니다.contextparam. AWS Lambda가 함수를 종료하기 전까지 남은 시간, 즉 Lambda 함수를 생성하는 동안 지정된 시간 초과, Lambda 함수 이름, cloudwatch 그룹 이름, arn 세부 정보 등과 같은 세부 정보가 있습니다.
예
예제를 통해 AWS Lambda 컨텍스트 객체에서 얻은 세부 정보를 이해하겠습니다.
exports.lambdahandler = (event, context, callback) => {
// TODO implement
console.log("context object details");
console.log(JSON.stringify(context));
callback(null, 'Lambda test');
};
위에 표시된 Lambda 함수를 실행하면 다음 출력을 볼 수 있습니다.
산출
그만큼 context 세부 사항은 다음과 같습니다-
{
"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"
}
functionName, memorylimit, requestId 등과 같은 세부 정보가 있는지 확인하십시오.
벌채 반출
Lambda 함수 내부에 추가 된 로그는 AWS 함수가 실행될 때 AWS CloudWatch에 표시됩니다. 로그 구문은 선택한 언어에 따라 다릅니다. 예를 들어nodejs, console.log입니다.
이것은 AWSCloudWatch에서 볼 수있는 출력입니다.
오류 처리
AWS Lambda 함수는 Lambda 함수에 오류 또는 성공이 발생했음을 알리는 데 사용되는 콜백 함수를 제공합니다. 여기서는 nodejs를 런타임으로 사용했습니다. 오류 처리는 선택한 언어에 따라 다릅니다.
더 나은 이해를 위해 여기에 제공된 예를 참조하십시오.
exports.lambdahandler = (event, context, callback) => {
// TODO implement
var error = new Error("There is error in code");
callback(error);
};
산출
Lambda 코드를 테스트 할 때 아래와 같이 출력을 찾을 수 있습니다.
다음과 같이 로그 세부 정보-
Nodejs는 AWS Lambda 함수가 지원하는 언어 중 하나입니다. nodejs에서 지원되는 버전은 v6.10 및 v8.10입니다. 이 장에서는 NODEJS에서 AWS Lambda 함수의 다양한 기능에 대해 자세히 알아 봅니다.
NodeJS의 핸들러
nodejs에서 AWS Lambda 함수를 작성하려면 먼저 핸들러를 선언해야합니다. nodejs의 핸들러는 파일 이름과 내보내기 기능의 이름입니다. 예를 들어 파일 이름은 다음과 같습니다.index.js 내보내기 기능 이름은 lambda handler이므로 해당 핸들러는 index.lambdahandler
여기에 표시된 샘플 처리기를 관찰하십시오.
exports.lambdahandler = function(event, context, callback) { //code goes here}
핸들러에 대한 매개 변수
핸들러는 Lambda 함수를 구축하기위한 주요 핵심입니다. 핸들러는 세 개의 매개 변수를 사용합니다.event, context 과 callback.
이벤트 매개 변수
트리거 된 이벤트의 모든 세부 사항이 있습니다. 예를 들어 Lambda 함수를 사용하여 S3에서 트리거하는 경우 이벤트에는 S3 객체의 세부 정보가 포함됩니다.
컨텍스트 매개 변수
Lambda 함수의 속성 및 구성 세부 정보와 같은 컨텍스트 세부 정보가 있습니다.
콜백 기능
발신자에게 세부 정보를 제공하는 데 도움이됩니다. 콜백 구조는 다음과 같습니다.
callback(error, result);
콜백 함수의 매개 변수는 아래에 설명되어 있습니다.
Error −Lambda 함수 실행 중에 오류가 발생한 경우 세부 정보가 포함됩니다. Lambda 함수가 성공하면null 콜백 함수의 첫 번째 매개 변수로 전달할 수 있습니다.
Result −이것은 람다 함수의 성공적인 실행에 대한 세부 정보를 제공합니다. 오류가 발생하면 결과 매개 변수가 무시됩니다.
Note −AWS Lambda에서 콜백 함수를 사용할 필요는 없습니다. 콜백 함수가없는 경우 핸들러는이를 null로 반환합니다.
유효한 콜백 서명은 다음과 같습니다.
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
AWS Lambda가 실행될 때마다 오류 또는 성공과 같은 콜백 세부 정보가 콘솔 메시지 (있는 경우)와 함께 AWS CloudWatch에 기록됩니다.
Nodejs8.10에서 AWS Lambda 작업
nodejs8.10에서 AWS Lambda로 작업하고 동기화 및 비동기 방식으로 함수를 호출하는 방법을 이해하겠습니다.
동기화 방식으로 Lambda 함수 호출
다음 예제는 동기화 방식으로 Lambda 함수를 호출하는 방법에 대한 아이디어를 제공합니다.
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);
};
AWS 콘솔에서이 코드를 테스트 한 후 다음 출력을 관찰 할 수 있습니다.
위 코드의 출력은 promise 객체입니다. 개수는 setTimeout 내에서 증가하고 함수 호출은 setTimeout 내에서 실행을 기다리지 않고 promise 객체를 반환하므로 개수를 제공하지 않습니다.
만약 우리가 async/await 핸들러 함수에서 람다 함수의 정확한 출력을 얻습니다.
비동기 방식으로 처리기 호출
다음 예제는 비동기 방식으로 Lambda 함수를 호출하는 방법에 대한 아이디어를 제공합니다.
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);
};
우리는 추가했습니다 async 과 await위의 코드에서. 우리가 사용할 때await함수 호출 외에 함수 내부의 약속이 해결 될 때까지 실행이 일시 중지됩니다. 참고await 유효하다 async 기능.
AWS 콘솔에서이 코드를 테스트 한 후 다음 출력을 관찰 할 수 있습니다.
NodeJS의 ContextDetails
Context 객체는 Lambda 함수의 이름, 남은 시간 (밀리 초), 요청 ID, Cloudwatch 그룹 이름, 시간 초과 세부 정보 등과 같은 세부 정보를 제공합니다.
다음 표는 컨텍스트 객체와 함께 사용할 수있는 메소드 및 속성 목록을 보여줍니다.
컨텍스트 개체에 사용할 수있는 메서드
Sr. 아니요 | 방법 이름 및 설명 |
---|---|
1 | getRemainingTimeInMillis() 이 메서드는 Lambda 함수가 함수를 종료 할 때까지 남은 시간을 밀리 초 단위로 제공합니다. |
컨텍스트 객체에 사용할 수있는 속성
Sr. 아니요 | 속성 이름 및 설명 |
---|---|
1 | functionName 이렇게하면 AWS Lambda 함수 이름이 제공됩니다. |
2 | functionVersion 그러면 실행되는 AWS Lambda 함수 버전이 제공됩니다. |
삼 | nvokedFunctionArn 그러면 ARN 세부 정보가 제공됩니다. |
4 | memoryLimitInMB Lambda 함수를 생성하는 동안 추가 된 메모리 제한을 보여줍니다. |
5 | awsRequestId 이것은 AWS 요청 ID를 제공합니다. |
6 | logGroupName 이것은 cloudwatch 그룹 이름의 이름을 제공합니다 |
7 | logStreamName 그러면 로그가 기록되는 Cloudwatch 로그 스트림 이름의 이름이 제공됩니다. |
8 | identity AWS Mobile SDK와 함께 사용할 때 Amazon cognito 자격 증명 공급자에 대한 세부 정보를 제공합니다. 주어진 세부 사항은 다음과 같습니다-
|
9 | clientContext 이는 aws mobile sdk와 함께 사용할 때 클라이언트 애플리케이션에 대한 세부 정보입니다. 주어진 세부 사항은 다음과 같습니다-
|
컨텍스트 객체에 대한 더 나은 아이디어를 얻으려면 다음 예제를보십시오.
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);
};
AWS 콘솔에서이 코드를 테스트 한 후 다음 출력을 관찰 할 수 있습니다.
AWS 콘솔에서이 코드를 테스트 한 후 다음 로그 출력을 관찰 할 수 있습니다.
NodeJS에 로그인
Console.log를 사용하여 NodeJS에 로그인 할 수 있습니다. 로그 세부 정보는 Lambda 함수에 대해 CloudWatch 서비스에서 가져올 수 있습니다.
더 나은 이해를 위해 다음 예를 참조하십시오.
exports.handler = (event, context, callback) => {
// TODO implement
console.log('Logging for AWS Lamnda in NodeJS');
callback(null, 'Name of aws Lambda is=>'+context.functionName);
};
AWS 콘솔에서이 코드를 테스트 한 후 다음 출력을 관찰 할 수 있습니다.
CloudWatch에서 다음 스크린 샷을 볼 수 있습니다.
NodeJS에서 오류 처리
NodeJS에서 오류 알림이 어떻게 수행되는지 이해합시다. 다음 코드를 관찰하십시오-
exports.handler = function(event, context, callback) {
// This Source code only throws error.
var error = new Error("something is wrong");
callback(error);
};
로그 출력에서 다음을 관찰 할 수 있습니다.
오류 세부 사항은 다음과 같이 콜백에 제공됩니다.
{
"errorMessage": "something is wrong",
"errorType": "Error",
"stackTrace": [ "exports.handler (/var/task/index.js:2:17)" ]
}
이 장에서는 Java로 간단한 AWS Lambda 함수를 생성하는 방법을 자세히 이해하겠습니다.
Eclipse에서 JAR 파일 생성
AWS에서 람다 함수 생성 작업을 진행하기 전에 Eclipse에 대한 AWS 도구 키트 지원이 필요합니다. 동일한 설치에 대한 지침은 다음을 참조하십시오.Environment Setup 이 튜토리얼의 장.
설치가 완료되면 여기에 제공된 단계를 따르십시오.
1 단계
Eclipse IDE를 열고 다음을 사용하여 새 프로젝트를 만듭니다. AWS Lambda Java Project. 더 나은 이해를 위해 아래 주어진 스크린 샷을 관찰하십시오-
2 단계
선택하면 Next, 아래 표시된 화면으로 리디렉션됩니다.
3 단계
이제 입력 유형에 대한 기본 코드가 생성됩니다. Custom. 클릭하면Finish 버튼을 누르면 아래와 같이 프로젝트가 생성됩니다.
4 단계
이제 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 내보내십시오. 고르다Java / JAR 파일에서 Export 마법사와 클릭 Next.
5 단계
이제 클릭하면 Next, 다음을 클릭 할 때 묻는 대상 폴더에 파일을 저장하라는 메시지가 표시됩니다.
파일이 저장되면 AWS 콘솔로 돌아가 Java 용 AWS Lambda 함수를 생성합니다.
6 단계
이제 .jar 우리가 사용하여 만든 파일 Upload 아래 스크린 샷과 같이 버튼-
Java 용 핸들러 세부 사항
Handler 이다 package name 과 class name. 핸들러를 자세히 이해하려면 다음 예제를 참조하십시오.
예
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler
위의 코드에서 핸들러는 com.amazonaws.lambda.demo.LambdaFunctionHandler
이제 변경 사항을 테스트하고 출력을 살펴 보겠습니다.
자바의 컨텍스트 객체
AWS Lambda 실행과의 상호 작용은 컨텍스트를 사용하여 수행됩니다. 그것은 자바 내에서 사용하기 위해 다음과 같은 방법을 제공합니다-
Sr. 아니요 | 컨텍스트 방법 및 설명 |
---|---|
1 | getMemoryLimitInMB() 이것은 람다 함수를 만드는 동안 지정한 메모리 제한을 제공합니다. |
2 | getFunctionName() 이것은 람다 함수의 이름을 제공합니다. |
삼 | getFunctionVersion() 이것은 실행중인 람다 함수의 버전을 제공합니다. |
4 | getInvokedFunctionArn() 그러면 함수를 호출하는 데 사용되는 ARN이 제공됩니다. |
5 | getAwsRequestId() 그러면 aws 요청 ID가 제공됩니다. 이 ID는 람다 함수에 대해 생성되며 고유합니다. 문제에 직면 한 경우 aws support incase에서 ID를 사용할 수 있습니다. |
6 | getLogGroupName() 그러면 생성 된 aws lambda 함수와 연결된 aws cloudwatch 그룹 이름이 제공됩니다. iam 사용자에게 cloudwatch 로깅에 대한 권한이 없으면 null이됩니다. |
7 | getClientContext() 그러면 aws mobile sdk와 함께 사용할 때 앱 및 장치에 대한 세부 정보가 제공됩니다. 버전 이름 및 코드, 클라이언트 ID, 제목, 앱 패키지 이름과 같은 세부 정보를 제공합니다. null 일 수 있습니다. |
8 | getIdentity() 그러면 aws mobile sdk와 함께 사용할 때 Amazon cognito ID에 대한 세부 정보가 제공됩니다. null 일 수 있습니다. |
9 | getRemainingTimeInMillis() 지정된 시간 초과 후 함수가 종료 될 때 남은 시간 실행을 밀리 초 단위로 제공합니다. |
10 | getLogger() 이것은 컨텍스트 객체와 연결된 람다 로거를 제공합니다. |
이제 위에 제공된 코드를 업데이트하고 위에 나열된 일부 메서드의 출력을 관찰하겠습니다. 더 나은 이해를 위해 아래 주어진 예제 코드를 관찰하십시오-
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!";
}
}
위에 주어진 코드를 실행하면 아래와 같이 출력을 찾을 수 있습니다.
컨텍스트에 대한 로그
로그 출력을 볼 때 다음 출력을 관찰 할 수 있습니다.
Lambda 함수에 할당 된 메모리는 512MB입니다. 할당 된 시간은 25 초입니다. 위에 표시된대로 남은 시간은 밀리 초 단위 인 24961입니다. 따라서 Lambda 함수 실행에는 39 밀리 초에 해당하는 25000-24961이 사용됩니다. Cloudwatch 그룹 이름과 요청 ID도 위와 같이 표시됩니다.
Java에서 로그를 인쇄하기 위해 다음 명령을 사용했습니다.
System.out.println (“log message”)
CloudWatch에서도 동일합니다. 이를 위해 AWS 서비스로 이동하여CloudWatchservices 클릭 Logs.
이제 Lambda 함수를 선택하면 아래와 같이 로그 날짜가 표시됩니다.
Java에 로그인
Java에서 Lambdalogger를 사용하여 데이터를 로깅 할 수도 있습니다. 동일한 것을 보여주는 다음 예제를 관찰하십시오-
예
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!";
}
}
위에 표시된 코드는 다음과 같은 출력을 제공합니다.
CloudWatch의 출력은 다음과 같습니다.
Lambda 함수용 Java에서 오류 처리
이 섹션에서는 Lambda 함수용 Java에서 오류를 처리하는 방법을 설명합니다. 동일한 것을 보여주는 다음 코드를 관찰하십시오-
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");
}
}
오류 세부 정보는 json errorMessage로 형식 지정 Error from AWS Lambda. 또한ErrorType 과 stackTrace 오류에 대한 자세한 내용을 제공합니다.
위에 주어진 코드의 출력과 해당 로그 출력은 다음 스크린 샷과 같습니다.
이 장에서는 Python으로 간단한 AWS Lambda 함수를 생성하고 세부 사항을 따르는 작동 개념을 이해합니다.
AWS에서 Lambda 함수 생성 작업을 진행하기 전에 Python에 대한 AWS 도구 키트 지원이 필요합니다. 이를 위해 아래 단계를 따르고 첨부 된 해당 스크린 샷을 관찰하십시오.
1 단계
AWS 콘솔에 로그인하고 Lambda 함수를 생성하고 언어를 Python으로 선택합니다.
2 단계
이제 Create function버튼을 클릭하고 Python으로 간단한 AWS Lambda를 생성하기위한 세부 정보를 입력합니다. 이 코드는 메시지를 반환합니다.Hello from Lambda using Python 여기에 표시된 것처럼 보입니다-
3 단계
이제 변경 사항을 저장하고 코드를 테스트하여 출력을 확인합니다. UI의 테스트 버튼을 사용하여 AWS 콘솔에서 테스트 할 때 다음 출력 및 로그가 표시되어야합니다.
4 단계
이제 모든 편집기 또는 Python 용 IDE에서 코드를 작성할 수 있습니다. 여기서는 코드를 작성하기 위해 Visual Studio 코드를 사용합니다. 나중에 파일을 압축하고 AWS 콘솔에 업로드해야합니다.
여기에서는 코드를 압축하고 AWS 콘솔을 사용했습니다.
5 단계
이제 선택 Upload a .ZIP file 아래 표시된 옵션-
Python 용 처리기 세부 정보
핸들러는 파일 이름 뒤에 함수 이름이 와야합니다. 위의 경우 파일 이름은hellopython.py 함수의 이름은 my_handler; 그래서 핸들러는 hellopython.my_handler.
업로드가 완료되고 변경 사항이 저장되면 실제로 AWS Lambda 콘솔의 온라인 편집기에 zip 파일의 세부 정보가 표시됩니다. 이제 출력과 로그를보기 위해 코드를 테스트 해 보겠습니다.
이제 다음 샘플 코드를 사용하여 Lambda 함수의 세부 사항을 이해하겠습니다.
def my_handler(event, context):
return "aws lambda in python using zip file"
위 코드에서 함수 이름 my_handler에는 2 개의 매개 변수, 이벤트 및 컨텍스트가 있습니다.
Python의 컨텍스트 객체
컨텍스트 객체는 Lambda 함수의 이름, 남은 시간 (밀리 초), 요청 ID, 클라우드 감시 그룹 이름, 시간 초과 세부 정보 등과 같은 세부 정보를 제공합니다.
컨텍스트 객체에서 사용할 수있는 메서드와 속성은 아래 표에 나와 있습니다.
Sr. 아니요 | 방법 이름 및 설명 |
---|---|
1 | get_remaining_time_in_millis() 이 메서드는 람다 함수가 함수를 종료 할 때까지 남은 시간을 밀리 초 단위로 제공합니다. |
Sr. 아니요 | 속성 및 설명 |
---|---|
1 | function_name 이것은 aws lambda 함수 이름을 제공합니다. |
2 | function_version 그러면 실행중인 aws lambda 함수 버전이 제공됩니다. |
삼 | invoked_function_arn 그러면 ARN 세부 정보가 제공됩니다. |
4 | memory_limit_in_mb 이것은 람다 함수를 생성하는 동안 추가 된 메모리 제한을 보여줍니다. |
5 | aws_request_id 이것은 aws 요청 ID를 제공합니다. |
6 | og_group_name 이것은 cloudwatch 그룹 이름의 이름을 제공합니다 |
7 | log_stream_name 그러면 로그가 기록되는 Cloudwatch 로그 스트림 이름의 이름이 제공됩니다. |
8 | identity AWS Mobile SDK와 함께 사용할 때 Amazon cognito 자격 증명 공급자에 대한 세부 정보를 제공합니다. 주어진 세부 사항은 다음과 같습니다-
|
9 | client_context 이는 aws mobile sdk와 함께 사용할 때 클라이언트 애플리케이션에 대한 세부 정보입니다. 주어진 세부 사항은 다음과 같습니다-
|
컨텍스트 세부 정보를 출력하는 Python의 작업 예제를 살펴 보겠습니다. 아래 주어진 코드를 관찰하십시오-
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"
위에 표시된 코드의 해당 출력은 다음과 같습니다.
Python을 사용하여 로깅
Python을 사용하여 정보를 기록하려면 사용 가능한 인쇄 또는 로거 기능을 사용할 수 있습니다. 위의 컨텍스트 예제를 사용하고 CloudWatch에서 로그가 인쇄되는지 확인합니다. 다음 코드를 관찰하십시오-
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"
CloudWatch에서이 코드의 출력은 다음과 같습니다.
로거를 사용하여 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"
이에 대한 출력은 아래 스크린 샷과 같습니다.
Python for Lambda 함수의 오류 처리
이 섹션에서는 Python에서 오류를 처리하는 방법을 보여주는 작업 예제를 살펴 보겠습니다. 여기에 주어진 코드를 관찰하십시오-
def error_handler(event, context):
raise Exception('Error Occured!')
로그 표시는 여기 이미지와 같습니다.
Go Language 지원은 최근 AWS에 추가되었습니다. Go를 사용하려면 AWS Lambda 함수를 생성하는 동안 AWS 콘솔에서 언어를 선택해야합니다. 이 장에서는 Go 언어로 된 AWS Lambda 함수에 대해 자세히 알아 보겠습니다.
Go 설치
시작하려면 Go 언어 지원이 필요합니다. 이 섹션에서는 Go에서 AWS Lambda 작업을 시작하기 위해 다음 세부 정보를 살펴 봅니다. 다음은 Go 다운로드를위한 공식 사이트입니다.https://golang.org/dl/
이제 운영 체제에 따라 패키지를 다운로드하십시오. 여기에 제공된 절차에 따라 각 운영 체제에 Go를 설치합니다.
Windows에 설치
Windows의 경우 32 비트 및 64 비트 다운로드를 사용할 수 있습니다. zip 파일을 다운로드하고 내용을 추출하여 선택한 디렉토리에 저장하십시오.
사용 가능한 환경 변수를 추가하십시오. ControlPanel ---> System ---> Advanced system settings.
이제 Environment Variables 버튼을 클릭하고 여기에 표시된대로 디렉토리 경로를 추가합니다.
여기에 표시된대로 시스템 변수를 편집 할 수도 있습니다.
이 단계가 완료되면 Go 작업을 시작할 수 있습니다. 명령 프롬프트를 열고 Go 명령에서 버전을 확인하십시오. 동일하게 다음 스크린 샷을 관찰하십시오.
Linux 및 Mac OS 용 설치
Linux 및 Mac OS에 패키지를 설치하려면 아래 표시된 지침을 따르십시오.
패키지의 포장을 풀고 위치에 보관하십시오. /usr/local/go. 이제 추가/usr/local/go/binPATH 환경 변수에. 다음을 사용하여 수행 할 수 있습니다./etc/profile 또는 $HOME/.profile.
이를 위해 다음 명령을 사용할 수 있습니다.
export PATH=$PATH:/usr/local/go/bin
Windows, Linux 및 Mac에 대한 AWS 지원을 추가하려면 git 명령 줄에서 다음을 사용하십시오.
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
Windows / Linux / Mac 코드를 컴파일하려면 다음 명령을 사용하십시오.
GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main
GO를 사용하는 AWS Lambda 함수
빌드가 실행 파일을 제공 할 때 Go에서 반환되는 프로그램입니다. 다음은 AWS Lambda를 지원하는 Go의 간단한 프로그램입니다. 우리는github.com/aws/aws-lambda-go/lambda, Lambda 프로그래밍 기능이 있기 때문에 AWS Lambda에 대한 또 다른 중요한 요구 사항은 핸들러입니다.
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)
}
참고로 Go프로그램은 람다에서 시작됩니다. start는 핸들러 함수로 호출됩니다. 아래 표시된 코드를 관찰하십시오.
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
이제 Go 명령을 사용하여 위 파일을 실행 한 다음 실행 파일을 압축 해 보겠습니다.
우리가 사용한 파일의 구조는 다음과 같습니다.
와 go build, main.exe라는 실행 파일을 생성합니다. 파일을 압축하고 AWS Lambda에 업로드하려면 다음 절차를 사용할 수 있습니다.
Windows / Linux / Mac 코드를 컴파일하려면 다음 명령을 사용하십시오.
GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main
그런 다음 AWS 콘솔에 로그인하고 다음을 사용하여 Lambda 함수를 생성합니다. Go 런타임으로-
함수가 생성되면 위에서 생성 한 실행 가능한 zip 파일을 업로드합니다.
Go를 사용한 Lambda 함수 핸들러
핸들러는 Go 프로그램의 실행이 시작되는 곳입니다. 주요 통화에서lambda.start, 실행은 핸들러 함수로 호출됩니다. 추가 할 핸들러는main.
이해를 위해 여기 코드를 관찰하십시오.
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
아래 주어진 스크린 샷에 따라-
이제 함수를 저장하고 테스트하십시오. 다음과 같이 실행 결과를 볼 수 있습니다.
해당 로그 출력은 다음과 같습니다.
Go를 사용한 컨텍스트 개체
Go의 AWS Lambda는 컨텍스트에 대해 다음과 같은 전역 변수 및 속성을 제공합니다.
MemoryLimitInMB − aws lambda에 구성된 메모리 제한 (MB).
FunctionName − aws lambda 함수의 이름.
FunctionVersion − 실행중인 aws lambda 함수의 버전.
LogStreamName − cloudwatch 로그 스트림 이름.
LogGroupName − cloudwatch 그룹 이름.
컨텍스트에서 사용할 수있는 속성은 다음과 같이 제공됩니다.
AwsRequestID
이것은 AWS Lambda 함수가 호출 될 때 얻는 AWS 요청 ID입니다.
ClientContext
여기에는 AWS Mobile SDK를 통해 호출 될 때 클라이언트 애플리케이션 및 디바이스에 대한 세부 정보가 포함됩니다. null 일 수 있습니다. 클라이언트 컨텍스트는 클라이언트 ID, 애플리케이션 제목, 버전 이름, 버전 코드 및 애플리케이션 패키지 이름과 같은 세부 정보를 제공합니다.
InvokedFunctionArn
호출 된 함수의 ARN입니다. 정규화되지 않은 ARN은 $ LATEST 버전을 실행하고 별칭은 가리키는 함수 버전을 실행합니다.
정체
AWS 모바일 SDK와 함께 사용할 때 Amazon Cognito 자격 증명 공급자에 대한 세부 정보를 제공합니다.
추가 된 변경 사항 main.go 컨텍스트 세부 정보를 인쇄하려면-
// 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)
}
우리는 log 과 lambda contextGo와 함께 사용합니다. 컨텍스트 세부 정보는 다음과 같습니다.
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
}
위 코드를 테스트 할 때 다음 출력을 관찰 할 수 있습니다.
데이터 로깅
와 Go 아래와 같이 log 또는 fmt 모듈을 사용하여 데이터를 기록 할 수 있습니다.
// 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)
}
동일한 출력은 다음과 같습니다.
CloudWatch에서 로그 확인
CloudWatch에서도 로그를 볼 수 있습니다. 이를 위해 AWS 서비스로 이동하여 cloudwatch를 선택하고Logs왼쪽에. 이제 목록에서 Lambda 함수를 검색하여 로그를 확인하십시오.
기능 오류
아래 코드와 같이 오류 모듈을 사용하여 AWS Lambda에서 사용자 지정 오류 처리를 생성 할 수 있습니다.
// 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)
}
위에 표시된 코드의 출력은 다음과 같습니다.
이 장에서는 C #에서 AWS Lambda 함수를 사용하는 방법을 자세히 설명합니다. 여기에서는 Visual Studio를 사용하여 코드를 작성하고 AWS Lambda에 배포 할 것입니다. Visual Studio 설치 및 Visual Studio에 AWS 도구 키트 추가에 대한 정보 및 도움말은 다음을 참조하십시오.Introduction이 튜토리얼의 장. Visual Studio 설치가 완료되면 아래 단계를 따르십시오. 더 나은 이해를 위해 각 스크린 샷을 참조하십시오-
1 단계
Visual Studio를 열고 단계에 따라 새 프로젝트를 만듭니다. 클릭File -> New -> Project.
2 단계
이제 다음 화면이 표시됩니다. AWS Lambda for Visual C#. 고르다AWS Lambda Project (.NET Core).
필요한 경우 이름을 변경할 수 있으며 여기에서 기본 이름을 유지합니다. 딸깍 하는 소리OK 계속하다.
다음 단계에서는 Blueprint.
고르다 Empty function 이 예에서는 Finish. 아래와 같이 새로운 프로젝트 구조가 생성됩니다.
이제 선택 Function.cs AWS Lambda에 대해 이벤트 및 컨텍스트가있는 핸들러가 생성되는 기본 파일입니다.
Functions.cs 파일의 표시는 다음과 같습니다.
아래에 제공된 명령을 사용하여 입력 및 출력 파라미터를 AWS Lambda 함수에 직렬화 할 수 있습니다.
[assembly:
LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
C #에 대한 처리기 세부 정보
핸들러는 다음과 같이 표시됩니다.
public string FunctionHandler(string input, ILambdaContext context) {
return input?.ToUpper();
}
위 코드의 다양한 구성 요소가 아래에 설명되어 있습니다.
FunctionHandler −이것이 C # AWS Lambda 함수의 시작점입니다.
String input − 핸들러에 대한 매개 변수 string input S3 객체, API 게이트웨이 세부 정보 등과 같은 모든 이벤트 데이터가 있습니다.
ILambdaContext context −ILamdaContext는 컨텍스트 세부 정보가있는 인터페이스입니다. 람다 함수 이름, 메모리 세부 정보, 시간 초과 세부 정보 등과 같은 세부 정보가 있습니다.
Lambda 핸들러는 동기화 및 비동기 방식으로 호출 할 수 있습니다. 위와 같이 동기화 방식으로 호출하면 반환 유형을 가질 수 있습니다. 반환 유형보다 비동기가 무효 인 경우.
이제 AWS Lambda C #을 배포하고 테스트 해 보겠습니다. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고Publish to AWS Lambda 아래와 같이-
채우기 Function Name 그리고 클릭 Next. 표시되는 다음 화면은Advanced Function Details 그림과 같이-
들어가다 Role Name, Memory 과 Timeout. 여기서는 기존 역할을 선택하고 메모리를 128MB로 사용하고 제한 시간을 10 초로 사용했습니다. 완료되면 클릭Upload AWS Lambda 콘솔에 게시합니다.
AWS Lambda 함수가 업로드되면 다음 화면을 볼 수 있습니다. 딸깍 하는 소리Invoke생성 된 AWS Lambda 함수를 실행합니다. 현재 작성된 코드에 따라 약간의 입력이 필요하므로 오류가 표시됩니다.
이제 샘플 입력을 입력하고 Invoke다시. 여기에서 입력 상자에 일부 텍스트를 입력하고 클릭 할 때도 동일한 텍스트를 입력했습니다.invoke응답 섹션에 대문자로 표시됩니다. 로그 출력은 아래에 표시됩니다.
이제 AWS 콘솔도 확인하여 Visual Studio에서 함수를 배포했을 때 함수가 생성되었는지 확인합니다.
위에서 생성 한 Lambda 함수는 다음과 같습니다. aws lambda using csharp 아래에 주어진 스크린 샷과 같이 AWS 콘솔에도 동일하게 표시됩니다.
핸들러 서명
핸들러는 AWS가 실행되는 시작점입니다. 핸들러의 이름은 다음과 같이 정의되어야합니다.
ASSEMBLY::TYPE::METHOD
서명에 대한 자세한 내용은 다음과 같습니다.
ASSEMBLY− 생성 된 응용 프로그램의 .NET 어셈블리 이름입니다. 기본적으로 프로젝트가 생성 된 폴더의 이름입니다.
TYPE− 이것은 핸들러의 이름입니다. 기본적으로 namespace.classname입니다.
METHOD − 이것은 함수 핸들러의 이름입니다.
핸들러 서명의 코드는 다음과 같습니다.
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();
}
}
}
여기서 어셈블리는 AWSLamda3, 유형은 namespace.classname입니다. AWSLambda3.Function 방법은 FunctionHandler. 따라서 핸들러 서명은AWSLamda3::AWSLambda3.Function::FunctionHandler
C #의 컨텍스트 개체
컨텍스트 객체는 AWS 환경의 런타임에 대한 유용한 정보를 제공합니다. 컨텍스트 객체에서 사용할 수있는 속성은 다음 표와 같습니다.
Sr. 아니요 | 속성 및 설명 |
---|---|
1 | MemoryLimitInMB 그러면 AWS Lambda 함수에 대해 구성된 메모리에 대한 세부 정보가 제공됩니다. |
2 | FunctionName AWS Lambda 함수의 이름 |
삼 | FunctionVersion AWS Lambda 함수 버전 |
4 | InvokedFunctionArn 이 함수를 호출하는 데 사용되는 ARN입니다. |
5 | AwsRequestId 생성 된 AWS 함수에 대한 AWS 요청 ID |
6 | LogStreamName Cloudwatch 로그 스트림 이름 |
7 | LogGroupName Cloudwatch 그룹 이름 |
8 | ClientContext AWS 모바일 SDK와 함께 사용할 때 클라이언트 애플리케이션 및 디바이스에 대한 정보 |
9 | Identity AWS Mobile SDK와 함께 사용할 때 Amazon Cogbnito 자격 증명에 대한 정보 |
10 | RemainingTime 함수가 종료 될 때까지 남은 실행 시간 |
11 | Logger 컨텍스트와 연관된 로거 |
예
이 섹션에서는 C #의 AWS Lambda에서 위의 속성 중 일부를 테스트 해 보겠습니다. 아래 주어진 샘플 코드를 관찰하십시오-
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");
}
}
}
위 코드를 호출 할 때 관찰 할 수있는 관련 출력 C# 다음과 같습니다-
위 코드를 호출 할 때 관찰 할 수있는 관련 출력 AWS Console 다음과 같습니다-
C #을 사용하여 로깅
로깅을 위해 두 가지 기능을 사용할 수 있습니다.
context.Logger.Log
LambdaLogger.Log
여기에 표시된 다음 예를 관찰하십시오.
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");
}
위의 코드에 해당하는 출력은 다음과 같습니다.
아래와 같이 CloudWatch에서 로그를 가져올 수 있습니다.
Lambda 함수에 대한 C #의 오류 처리
이 섹션에서는 C #의 오류 처리에 대해 설명합니다. 오류 처리를 위해Exception 클래스는 아래의 예와 같이 확장되어야합니다.
예
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!");
}
}
}
위에 주어진 코드에 해당하는 출력은 다음과 같습니다.
{
"errorType": "LambdaException",
"errorMessage": "Error in AWS Lambda!"
}
이전 장에서는 AWS 콘솔에서 AWS Lambda 함수를 생성하는 방법을 배웠습니다. 그러나 Lambda 함수를 생성하기위한 다른 파라미터가 있습니다. 여기에는 메모리 할당, 시간 초과 등이 포함됩니다.
이 장에서는 AWS Lambda의 다음 구성 속성에 대해 자세히 이해하겠습니다.
메모리 할당
AWS 콘솔에 로그인하고 기존 lambda 함수를 생성하거나 선택합니다. 클릭Configuration할당 된 메모리에 대한 세부 정보를 보려면 탭을 클릭하십시오. 아래에 표시된 스크린 샷을보십시오-
기본적으로 할당 된 메모리는 128MB. 메모리를 늘리려면 슬라이더를 클릭 할 수 있습니다.
메모리는 다음으로 증가합니다. 64MB슬라이더를 움직일 때. 사용 가능한 최대 메모리가3008MB. 아래에 표시된 스크린 샷을보십시오-
당신은 또한 사용할 수 있습니다 aws cli명령 프롬프트에서 메모리 제한을 늘리십시오. 64MB 단위로 메모리를 제공해야합니다.
이제 name을 사용하여 AWS Lambda의 메모리 제한을 늘립니다.myfirstlambdafunction.
함수의 메모리 세부 정보는 아래 스크린 샷에 나와 있습니다.
다음을 사용하여 메모리를 변경하는 데 사용되는 명령 aws cli 다음과 같습니다-
aws lambda update-function-configuration --function-name your function name --
region region where your function resides --memory-size memory amount --
profile admin user
AWS Lambda 함수의 해당 출력 myfirstlambdafunctionAWS 콘솔에서 여기에 표시됩니다. 메모리가 128MB에서 256MB로 변경되었는지 확인합니다.
최대 실행 시간
시간 초과는 시간 초과가 발생하는 경우 종료하기 위해 AWS Lambda 함수에 할당 된 시간입니다. AWS Lambda 함수는 할당 된 시간 내에 실행되거나 지정된 제한 시간을 초과하면 종료됩니다. 함수를 실행하는 데 필요한 시간을 평가하고 그에 따라 시간을 선택해야합니다.Configuration 아래와 같이 AWS 콘솔의 탭-
IAM 역할
AWS Lambda 함수를 생성 할 때 역할 또는 권한을 할당해야합니다. S3 또는 dynamoDB 용 AWS Lambda가 필요한 경우 lambda 서비스와 관련된 권한을 할당해야합니다. 할당 된 역할에 따라 AWS Lambda는 취해야 할 단계를 결정합니다. 예를 들어 dynamodb에 대한 전체 액세스 권한을 부여하면 dynamodb 테이블에서 행을 추가, 업데이트 및 삭제할 수 있습니다.
핸들러 이름
이것은 AWS Lambda 함수의 실행 시작입니다. 핸들러 함수에는 트리거 된 이벤트, 컨텍스트 객체 및 콜백에 대한 세부 정보가 있습니다.success 또는 error AWS Lambda의.
nodejs의 핸들러 함수 형식은 다음과 같습니다.
exports.handler = (event, context, callback) => {
callback(null, "hello from lambda");
};
환경 변수를 사용하는 Lambda 함수
이 섹션에서는 구성 섹션에 추가 된 환경 변수를 사용하여 간단한 Lambda 함수를 생성합니다. 이를 위해 아래 단계를 따르고 각 스크린 샷을 참조하십시오.
1 단계
AWS 콘솔로 이동하고 표시된대로 Lambda에서 함수를 생성합니다.
2 단계
이제 다음과 같이 환경 변수를 추가하십시오.
3 단계
이제 다음과 같이 Lambda 코드에서 동일하게 가져 오겠습니다.
exports.handler = (event, context, callback) => {
var hostName = process.env.host;
var userName = process.env.username;
callback(null, "Environment Variables =>"+hostName+" and "+userName);
};
4 단계
환경 변수에서 세부 정보를 얻으려면 process.env보여진 바와 같이. 이 구문은NodeJS 실행 시간.
var hostName = process.env.host;
var userName = process.env.username;
5 단계
실행시 Lambda 함수의 출력은 다음과 같습니다.
Lambda 함수를 생성하고 AWS 콘솔에서 동일하게 테스트 할 수 있습니다. 이 장에서는 이에 대해 자세히 설명합니다. 이를 위해 여기에 제공된 단계를 따르고 주어진 각 스크린 샷을 관찰해야합니다.
1 단계
AWS 콘솔에 로그인 https://aws.amazon.com/console/. 이제 AWS 서비스가 표시되는 화면으로 리디렉션됩니다.
2 단계
이제 Lambda위에 강조된대로 서비스. 이것은 아래와 같이 기능을 생성하도록 리디렉션됩니다-
3 단계
이제 Create function기능의 세부 사항을 입력하십시오. 그러면 아래와 같은 화면을 볼 수 있습니다.
4 단계
원하는 언어를 선택하여 코드를 작성할 수 있습니다. 선택한 옵션이 코드 인라인 편집인 경우 코드를 편집기에서 작성해야합니다. 사용 가능한 다른 옵션은 다음과 같습니다.
5 단계
완료되면 아래와 같이 오른쪽 상단 모서리에 버튼이 제공되는 변경 사항을 저장해야합니다.
6 단계
이제 Test단추. 이렇게하면 아래와 같이 Lambda 함수 실행에 대한 모든 세부 정보가 제공됩니다.
7 단계
코드 index.js 다음과 같습니다-
exports.handler = (event, context, callback) => {
// TODO implement
callback(null, 'Lambda test');
};
이것은 Callback function결과는 오류 또는 성공 일 수 있습니다. 성공하면Lambda test메시지; 오류가 발생하면 null을 전달합니다.
8 단계
그만큼 Role Lambda 함수에 대한 세부 정보는 구성의 일부이며 아래와 같이 표시됩니다.
9 단계
이제 필요한 경우 역할을 업데이트하고 Lambda 함수를 저장할 수 있습니다. 그런 다음 람다 함수에 대한 메모리 및 시간 초과 세부 정보가 아래와 같이 표시됩니다.
10 단계
이제 이벤트가 발생할 때 실행되도록 Lambda 함수에 트리거를 추가해야합니다. 트리거 세부 정보는 아래와 같이 AWS Lambda 함수 화면의 시작 부분에 표시됩니다.
여기에서 Lambda 함수를 트리거 할 트리거를 선택할 수 있습니다. 트리거를 선택할 때 트리거에 대한 구성 세부 정보를 추가해야합니다.
예를 들어, S3 트리거의 경우 추가 할 구성 세부 정보는 다음과 같습니다.
11 단계
이제 트리거를 적용 할 버킷을 선택합니다. 이벤트 유형에는 다음과 같은 세부 정보가 있습니다.
12 단계
트리거의 경우 접두사 유형 파일 또는 파일 패턴을 언급 할 수도 있습니다. Lambda가 트리거되어야합니다. 세부 사항은 다음과 같습니다.
13 단계
이제 트리거에 필요한 세부 정보를 입력하고 Add 버튼. 트리거를 추가 할 Lambda 함수를 저장합니다. 함수를 저장하면 세부 정보가 배포되며 이제부터는 S3 버킷에 파일이 추가 될 때마다 Lambda가 트리거됩니다.
AWS Lambda에 추가 된 S3 트리거를 보여주는 다음 스크린 샷을 참조하십시오.
14 단계
이제 S3 샘플 이벤트를 사용하여 Lambda 함수를 테스트 해 보겠습니다. 동일한 코드가 여기에 표시됩니다.
Amazon S3 Put 샘플 이벤트
{
"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"
}]
}
S3 put 이벤트에서 업로드 된 파일의 세부 정보를 얻으려면 다음 명령을 사용해야합니다.
event.Records[0].s3.object.key //will display the name of the file
버킷 이름을 얻으려면 다음 명령을 사용해야합니다.
event.Records[0].s3.bucket.name //will give the name of the bucket.
EventName을 얻으려면 다음 명령을 사용해야합니다-
event.Records[0].eventName // will display the event name
15 단계
이제 아래와 같이 S3 세부 정보를 인쇄하도록 AWS Lambda 코드를 업데이트하겠습니다.
exports.lambdahandler = (event, context, callback) => {
callback(null, "Bucket name: "+event.Records[0].s3.bucket.name+"
File name:"+event.Records[0].s3.object.key );
};
16 단계
변경 사항을 저장하십시오. 딸깍 하는 소리Test S3 샘플 이벤트를 입력하십시오-
17 단계
이제 클릭 Test 다음과 같이 출력을 볼 수 있습니다.
18 단계
S3 AWS 서비스를 사용하여 S3에서 트리거를 테스트하려면 S3 버킷에 파일을 업로드하십시오. test bucket trigger. Lambda에서 사용하는 역할을 업데이트하여 권한에 대한 S3 및 SES 정책 (메일 전송)을 가져옵니다. 그러면 트리거가 작동하는지 확인하기 위해 메일을 보내기 위해 AWS Lambda 코드가 업데이트됩니다.
업데이트 된 AWS Lambda 코드는 다음과 같습니다.
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");
}
});
};
해당 스크린 샷은 다음과 같습니다.
19 단계
이제 파일을 업로드하고 AWS Lambda 코드에 제공된 메일 ID를 확인하십시오.
AWS CLIAWS 서비스 작업에 도움이되는 명령 줄 도구입니다. 이를 사용하여 aws lambda 함수를 생성, 업데이트, 삭제, 호출 할 수 있습니다. 이 장에서는 AWS CLI의 설치 및 사용에 대해 자세히 설명합니다.
AWS CLI 설치
이 섹션에서는 다양한 운영 체제에 AWS CLI를 설치하는 방법을 안내합니다. 주어진 단계를 따르고 첨부 된 모든 스크린 샷을 관찰하십시오.
Windows의 경우
Windows 구성을 확인하고 AWS CLI MSI를 설치하려면 다음 링크 중 하나를 선택하십시오.
Windows 64 비트의 경우 − Windows 용 AWS CLI MSI 설치 (64 비트)
Windows 32 비트의 경우 − Windows 용 AWS CLI MSI 설치 (32)
해당 링크를 선택하고 클릭하면 다음과 같은 창을 찾을 수 있습니다.
다음으로 Environment path in windows 아래 스크린 샷과 같이-
완료되면 명령 프롬프트에서 다음 명령을 사용하여 aws cli 설치되어 있습니다-
aws --version
다음 스크린 샷과 같이 aws-cli 버전의 세부 정보를 표시합니다.
Linux / Mac 용
Linux 및 Mac에 설치하려면 Python 2.6.3 이상 버전이 필요합니다. 그런 다음 추가 설치 프로세스를 위해 다음 명령을 사용하십시오.
$ 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
이제 AWS 설정을 구성해야합니다. 이 목적으로 다음 명령을 사용할 수 있습니다.
aws configure
이를 위해 다음과 같은 세부 정보가 필요합니다.
- AWS 액세스 키 ID
- AWS 보안 액세스 키
- 기본 지역 이름
- 형식의 기본 출력
AWS 콘솔에서 이러한 세부 정보를 얻을 수 있습니다. 그림과 같이 오른쪽 상단의 계정 이름으로 이동하십시오-
이제 My Security Credentials왼쪽에서 사용자를 선택합니다. 요청에 따라 세부 정보와 함께 사용자를 추가합니다.
사용자를 추가하고 액세스 키와 비밀 키를 가져옵니다. 새 액세스 키를 보려면Show. 귀하의 자격 증명은 다음과 같습니다.
Access key ID − AOSAIOSFOCDD7Example
Secret access key − aJuirCVtnROUN/K7MDENG/bPxRfiCYExampleKEY
AWS CLIS에 대한 참조 명령
다음 표는 작업에 사용할 수있는 명령 참조를 제공합니다. aws cli.
aws cli 명령의 이름 | 명령 참조 |
---|---|
create-function | create-function --function-name <value> --runtime <value> --role <value> --handler <value> [--code <value>] [--description <value>] [--timeout < 값>] [--memory-size <값>] [--environment <값>] [--kms-key-arn <값>] [--tags <값>] [--zip-file <값> ] [--cli-input-json <값>] |
list-functions | list-functions [--master-region <값>] [--function-version <값>] [--max-items <값>] [--cli-input-json <값>] [--starting- 토큰 <값>] [--page-size <값>] [--generate-cli-skeleton <값>] |
get-function | get-function --function-name <값> [--qualifier <값>] [--cli-input-json <값>] [--generate-cli-skeleton <값>] |
get-function-configuration | get-function-configuration --function-name <값> [--qualifier <값>] [--cli-input-json <값>] [--generate-cli-skeleton <값>] |
get-account-settings | get-account-settings [--cli-input-json <값>] [--generate-cli-skeleton <값>] |
update-function-configuration | update-function-configuration --function-name <value> [--role <value>] [--handler <value>] [--description <value>] [--timeout <value>] [--memory- size <값>] [--vpc-config <값>] [--environment <값>] [--runtime <값>] [--dead-letter-config <값>] [--kms-key- arn <값>] [--tracing-config <값>] [--revision-id <값>] [--cli-input-json <값>] [--generate-cli-skeleton <값>] |
update-function-code | update-function-code --function-name <값> [--zip-file <값>] [--s3-bucket <값>] [--s3-key <값>] [--s3-object- 버전 <값>] [--publish | --no-publish] [--dry-run | --no-dry-run] [--revision-id <값>] [-cli-input-json <값>] [-generate-cli-skeleton <값>] |
delete-function | delete-function --function-name <값> [--qualifier <값>] [--cli-input-json <값>] [--generate-cli-skeleton <값>] |
이제 이러한 명령을 하나씩 자세히 살펴 보겠습니다.
생성 기능
이 API는 새로운 람다 함수를 생성합니다. 코드는 zip 형식으로 제공되어야합니다. 생성 할 함수가 이미 존재하면 api가 실패합니다. 함수 이름은 대소 문자를 구분합니다.
포함 된 명령
create-function과 함께 사용할 수있는 명령 목록은 다음과 같습니다.
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>]
포함 된 옵션
위의 기능과 함께 사용할 수있는 다양한 옵션은 다음과 같습니다.
--function-name (string)− 함수의 이름을받습니다. 이름은 64 비트 문자 일 수 있습니다.
--runtime(string)− 여기서 런타임 환경, 즉 언어 선택을 지정해야합니다. 런타임에 대한 자세한 내용은 다음과 같습니다.
사용 가능한 옵션 | 실행 시간 |
---|---|
Python v3.6 | 파이썬 3.6 |
Python v2.7 | 파이썬 2.7 |
NodeJS v6.10 | nodejs6.10 |
NodeJS v8.10 | nodejs8.10 |
자바 | java8 |
C # 1 | dotnetcore1.0 |
C # 2 | dotnetcore2.0 |
가다 | go1.x |
--role(string)− 이것은 람다 정책의 이름, 즉 다른 서비스에 액세스하기 위해 람다 함수에 부여되는 역할입니다. 지정된 역할에 따라 권한이 있습니다.
--handler (string) − 람다 코드 실행이 시작되는 핸들러의 이름입니다.
- nodejs의 경우 핸들러 이름은 내보내는 모듈 이름입니다.
- java의 경우 package.classname :: handler 또는 package.classname입니다.
- 파이썬의 경우 핸들러는 파일 이름입니다.
--code (structure) −AWS Lambda 코드
--description (string) − AWS Lambda 함수에 대한 설명
--timeout (integer)− timeout에는 람다 함수가 실행을 종료해야하는 시간이 있습니다. 기본값은 3 초입니다.
--memory-size (integer)− 이것은 aws lambda 함수에 주어진 메모리입니다. AWS는 주어진 메모리를 기반으로 CPU 및 메모리 할당량을 할당합니다.
--environment (structure) − aws lambda 함수에 필요한 환경 세부 정보가있는 객체입니다.
e.g : Variables = {Name1 = string, Name2 = string}
--kms-key-arn (string)− 환경 변수를 암호화하는 데 사용되는 Amazon 리소스 이름 (ARN)입니다. 제공하지 않으면 암호화에 기본 설정이 적용됩니다.
--zip-file (blob) − 코드 세부 사항이있는 zip 파일의 경로.
--cli-input-json (string): 제공된 JSON 문자열을 기반으로 서비스 작업을 수행합니다. JSON 문자열은 --generate-cli-skeleton에서 제공하는 형식을 따릅니다. 명령 줄에 다른 인수가 제공되면 CLI 값이 JSON 제공 값을 재정의합니다.
이제 런타임을 nodejs로 사용하여 간단한 AWS Lambda 함수를 생성하고 인쇄 할 console.logs를 추가하겠습니다.
동일한 이해를위한 샘플 코드를 고려하십시오.
exports.handler = async (event) => {
console.log("Using aws cli");
return 'Hello from Lambda from aws cli!'
};
이제 파일을 압축하여 다음과 같이 저장하십시오. awscli.zip.
ARN 받기
역할을 위해 arn우리가 만든 기존 역할에서. ARN을 받으려면 여기에 표시된 단계를 따라야합니다. 첨부 된 각 스크린 샷을 관찰하십시오.
1 단계
IAM으로 이동하여 원하는 역할을 선택하십시오. Roles. 역할에 대한 ARN 세부 정보가 아래와 같이 표시됩니다. 사용하다Role ARN 와 create-function 에 aws cli.
여기서 arn 역할이 arn : aws : iam :: 625297745038 : role / lambdaapipolicy인지 확인합니다.
값이있는 명령 create-function 다음과 같습니다-
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"
이제 aws cli에서 명령을 실행하면 아래와 같이 출력을 찾을 수 있습니다.
AWS 콘솔에서 Lambda 함수는 아래와 같이 표시됩니다.
기능의 세부 사항은 다음과 같습니다.
구성의 세부 사항은 다음과 같습니다-
다음과 같이 기능을 테스트하고 출력을 확인할 수 있습니다.
해당 로그 출력은 다음과 같습니다.
목록 기능
이 API는 AWS Lambda에서 지금까지 생성 된 함수 목록을 제공합니다.
포함 된 명령
다음은이 API와 관련된 명령입니다-
list-functions
[--master-region <value>]
[--function-version <value>]
[--max-items <value>]
[--cli-input-json <value>]
목록 기능 아래의 옵션
다음은이 목록 기능 API에서 사용할 수있는 다양한 옵션입니다.
--master-region(string)− 선택 사항. 기능을 표시해야하는 영역입니다.
--function-version(string)− 선택 사항. 이것은 함수 버전을 제공합니다.
--max-items(integer)− 선택 사항. 그러면 지정된 값에 따라 항목이 제공됩니다.
--cli-input-json(string)− 선택 사항. 제공된 json 파일을 기반으로 작업을 수행합니다.
값이있는 명령 list-functions 다음과 같습니다-
aws lambda list-functions --max-items 3
명령은 다음과 같이 세부 정보를 표시합니다-
get 함수
이 API는 함수에 대한 세부 정보와 create-function을 사용하여 업로드 된 zip 파일이있는 URL 링크를 제공합니다. zip 세부 정보가 포함 된 URL은 10 분 동안 만 유효합니다.
포함 된 명령
다음은이 API와 관련된 명령입니다-
get-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
포함 된 옵션
--function-name− AWS Lambda 함수의 이름. 함수의 Amazon 리소스 이름을 지정할 수도 있습니다.
--qualifier(string)− 선택 사항. 함수 버전을 사용하여 함수의 세부 정보를 얻을 수 있습니다.
get-function 값을 가진 명령은 다음과 같습니다.
aws lambda get-function --function-name awslambdausingcli
명령 표시 세부 사항은 다음과 같습니다-
우편 번호가 업로드 된 URL을 제공합니다. 위의 경우 URL은-
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
그러면 AWS Lambda 함수의 구성 세부 정보가 제공됩니다.
다음은이 API와 함께 사용되는 명령입니다-
get-function-configuration
--function-name <value>
[--qualifier <value>]
The following are the options used with
--function-name (string) −aws lambda 함수의 이름입니다. 함수의 Amazon 리소스 이름을 지정할 수도 있습니다.
--qualifier(string) − 선택 사항. 함수 버전을 사용하여 함수의 세부 사항을 가져올 수 있습니다.
get-function 값을 가진 명령은 다음과 같습니다.
aws lambda get-function-configuration --function-name awslambdausingcli
명령은 다음과 같이 세부 정보를 표시합니다-
get-account-settings
이 API는 계정 설정을 제공합니다.
관련 명령
이 API와 함께 사용할 수있는 명령은 다음과 같습니다.
get-account-settings
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
관련 옵션
이 API와 함께 다음 옵션을 사용할 수 있습니다-
--cli-input-json(string) − 제공된 json 문자열을 기반으로 서비스를 수행합니다.
--generate-cli-skeleton(string) − API 요청을 보내지 않고 json 출력을 인쇄합니다.
get-account-settings에 다음 명령을 사용할 수 있습니다-
aws lambda get-account-settings
위에 주어진 명령을 실행하면 다음 출력을 볼 수 있습니다.
업데이트 기능 구성
이 API는 생성 된 AWS Lambda 함수의 구성 세부 정보를 업데이트하는 데 도움이됩니다. 메모리, 타임 아웃, 핸들러, 역할, 런타임, 설명 등을 변경할 수 있습니다.
관련 명령
다음은 업데이트 기능 구성 API에 관련된 명령입니다-
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>]
관련 옵션
다음은 업데이트 기능 구성 API에 관련된 옵션입니다-
--function-name − aws lambda 함수의 이름
--role (string) −선택 과목. 역할의 ARN을 업데이트해야합니다.
--handler (string) −선택 과목. aws lambda 함수의 핸들러 세부 정보입니다.
--description(string) −선택 과목. 기능에 대한 설명입니다.
--timeout(integer) −선택 과목. aws lambda 함수가 종료되는 데 필요한 시간입니다.
--memory-size(integer) −선택 과목. 이것은 aws lambda 함수에 주어진 메모리입니다. AWS는 주어진 메모리를 기반으로 CPU 및 메모리 할당량을 할당합니다.
--environment (structure) −선택 과목. aws lambda 함수에 필요한 환경 세부 정보가있는 객체입니다.
e.g: Variables = {Name1 = string, Name2 = string}
--runtime(string) − 여기서 런타임 환경, 즉 언어 선택을 지정해야합니다.
런타임에 대한 자세한 내용은 아래 표에 나와 있습니다.
사용 가능한 옵션 | 실행 시간 |
---|---|
Python v3.6 | 파이썬 3.6 |
Python v2.7 | 파이썬 2.7 |
NodeJS v6.10 | nodejs6.10 |
NodeJS v8.10 | nodejs8.10 |
자바 | java8 |
C # 1 | dotnetcore1.0 |
C # 2 | dotnetcore2.0 |
가다 | go1.x |
--cli-input-json (string) −선택 과목. 제공된 json 문자열에 지정된대로 API에서 작업을 수행합니다.
--generate-cli-skeleton (string) −선택 과목. 그러면 API를 실행하지 않고 모든 세부 정보의 JSON 스켈레톤이 출력됩니다. 출력은 입력으로 사용할 수 있습니다.--cli-input-json.
이제 이전에 생성 한 AWS Lambda 함수의 메모리와 시간 초과를 변경하겠습니다. 아래 단계를 따르고이 목적으로 첨부 된 해당 스크린 샷을 관찰하십시오.
1 단계
변경이 발생하기 전의 메모리 및 타임 아웃은 다음과 같습니다.
2 단계
이제 update-function-configuration, 메모리와 타임 아웃을 320MB로, 타임 아웃을 10 초로 변경하겠습니다. 이를 위해 다음 명령을 값과 함께 사용하십시오.
aws lambda update-function-configuration --function-name “awslambdusingcli”
--timeout 10 --memory-size 320
3 단계
그러면 다음 출력을 디스플레이로 볼 수 있습니다.
4 단계
사용 후 AWS 콘솔의 표시 update-function-configuration 다음과 같습니다-
업데이트 기능 코드
이 API는 기존 AWS Lambda 함수의 코드를 업데이트합니다.
관련 명령
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>]
관련 옵션
다음은 업데이트 기능 코드 API와 관련된 옵션입니다-
--function-name(string) − aws lambda 함수의 이름
--zip-file (blob) −선택 과목. 업데이트 할 코드가있는 zip 파일의 경로입니다.
--s3-bucket(string) −선택 과목. 코드가 업로드 된 zip 파일이있는 S3 버킷 이름입니다.
--s3-key(string) −선택 과목. 업로드해야하는 AWS s3 객체 키 이름입니다.
--s3-object-version (string) −선택 과목. AWS s3 객체 버전.
--cli-input-json (string) −선택 과목. 제공된 json 문자열에 지정된대로 API에서 작업을 수행합니다.
--generate-cli-skeleton (string) −선택 과목. 그러면 API를 실행하지 않고 모든 세부 정보의 JSON 스켈레톤이 출력됩니다. 출력은 --cli-input-json에 대한 입력으로 사용할 수 있습니다.
업데이트 된 코드는 다음과 같습니다.
exports.handler = async (event, context) => {
console.log("Using aws cli");
console.log()
return 'Hello from Lambda from aws cli!'
};
다음을 사용할 수 있습니다. command with values for this purpose −
aws lambda update-function-code --function-name "awslambdausingcli"
--zip-file "fileb://awscli.zip"
해당 출력은 다음과 같습니다.
AWS 콘솔의 디스플레이는 다음과 같습니다.
해당 로그 출력은 다음과 같습니다.
삭제 기능
그만큼 delete aws cli api는 주어진 함수를 삭제합니다.
포함 된 명령
동일한 명령 세부 정보가 여기에 제공됩니다.
delete-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
포함 된 옵션
이 API에 포함 된 옵션은 다음과 같습니다.
--function-name(string) − 람다 함수 이름 또는 aws lambda 함수의 arn을 사용합니다.
--qualifier (string) −이것은 선택 사항입니다. 여기에서 삭제해야하는 aws lambda의 버전을 지정할 수 있습니다.
-- cli-input-json(string) −제공된 JSON 문자열을 기반으로 서비스 작업을 수행합니다. JSON 문자열은 --generate-cli-skeleton에서 제공하는 형식을 따릅니다. 명령 줄에 다른 인수가 제공되면 CLI 값이 JSON 제공 값을 재정의합니다.
--generate-cli-skeleton(string) − API 요청을 보내지 않고 json 스켈레톤을 표준 출력으로 인쇄합니다.
aws lambda delete-function --function-name "lambdatestcli"
이제 함수가 AWS Lambda 함수 목록에 표시되지 않습니다.
AWS Lambda는 서버리스 프레임 워크를 사용하여 생성 및 배포 할 수 있습니다. AWS Lambda 트리거를 생성하고 필요한 역할을 생성하여이를 배포 할 수도 있습니다. 서버리스 프레임 워크를 사용하면 큰 프로젝트를 더 쉽게 처리 할 수 있습니다. 필요한 이벤트와 리소스는 한곳에 작성되며 몇 가지 명령만으로 AWS 콘솔에 전체 기능을 배포하는 데 도움이됩니다.
이 장에서는 AWS 서버리스 프레임 워크를 시작하는 방법을 자세히 알아 봅니다.
npm install을 사용하여 서버리스 프레임 워크 설치
시작하려면 먼저 설치해야합니다. nodejs. 다음과 같이 nodejs를 확인할 수 있습니다.
npm 패키지를 사용하여 서버리스를 설치하려면 다음 명령을 사용해야합니다.
npm install -g serverless
npm이 완료되면 AWS Lambda 함수를 생성하고 배포하는 데 사용할 명령 목록을 보여주는 서버리스 명령을 실행합니다. 아래 주어진 스크린 샷을 관찰하십시오-
서버리스 대신 sls를 사용할 수도 있습니다. sls 서버리스를위한 축약 형 명령입니다.
명령에 대한 도움이 필요한 경우 sls, 다음 명령을 사용할 수 있습니다-
sls create --help
서버리스 프레임 워크를 생성하려면 아래 단계를 따라야합니다.
1 단계
서버리스 프레임 워크 사용을 시작하려면 자격 증명을 추가해야합니다. 이를 통해 다음과 같이 AWS 콘솔에서 먼저 사용자를 수행 할 수 있습니다.
2 단계
클릭 Next:Permissions버튼을 눌러 권한을 추가하십시오. 이 사용자에게 기존 정책 또는 관리자 액세스 권한을 연결해야합니다.
3 단계
딸깍 하는 소리 Create User사용자를 추가합니다. 서버리스 프레임 워크를 구성하는 데 필요한 액세스 키와 비밀 키를 표시합니다.
AWS 서버리스 프레임 워크 구성
AWS 서버리스 프레임 워크를 구성하는 방법을 살펴 보겠습니다. 이 목적으로 다음 명령을 사용할 수 있습니다.
sls config credentials --provider aws --key accesskey --secret secretkey
입력 한 자격 증명의 세부 정보, 즉 access key 과 secret key 에 저장됩니다 file /aws/credentials.
먼저 프로젝트 파일을 저장할 폴더를 만듭니다.
다음으로 작업을 시작합니다. aws-serverless 폴더.
서버리스 프레임 워크를 사용하여 AWS Lambda 생성
이제 아래 주어진 단계를 사용하여 서버리스 프레임 워크로 Lambda 함수를 생성 해 보겠습니다.
1 단계
다음은 서버리스에 대한 세부 정보입니다. create 명령-
2 단계
이제 다음과 같은 템플릿을 할당해야합니다.
AWS-nodejs, aws-nodejs-typescript, aws-nodejs-ecma-script, aws-python, aws-python3, aws-groovy-gradle etc.
3 단계
우리는 aws-nodejs서버리스 프레임 워크를 사용하여 첫 번째 프로젝트를 만드는 템플릿입니다. 동일한 목적을위한 명령은 다음과 같습니다.
sls create --template aws-nodejs
이 명령은 aws-nodejs 템플릿에 대한 상용구를 생성합니다.
4 단계
이제 IDE에서 만든 폴더를 엽니 다. 여기서 우리는 Visual Studio 코드를 사용하고 있으며 폴더 구조는 다음과 같습니다.
5 단계
2 개의 파일이 생성됩니다. handler.js 과 Serverless.yml
AWS Lambda 기본 기능 세부 정보는 다음과 같습니다. handler.js 다음과 같이-
'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 });
};
이 파일 Serverless.yml 아래와 같이 서버리스 프레임 워크의 구성 세부 정보가 있습니다.
# 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"
이제 요구 사항에 따라 serverless.yml 파일에 변경 사항을 추가해야합니다. 아래에 주어진 명령을 사용할 수 있습니다-
다음 명령을 사용할 수 있습니다. Service −
service: aws-nodejs # NOTE: update this with your service name
이제 여기에서 서비스를 변경하고 다음과 같이 폴더에 주어진 이름을 추가하십시오.
service: aws-serverless # NOTE: update this with your service name
공급자 세부 정보는 다음과 같습니다.
provider:
name: aws
runtime: nodejs6.10
공급자는 aws 런타임은 nodejs6.10. 우리는 추가해야합니다region 우리가 일하고 stage, 그건 dev or prod프로젝트 환경. 여기에 provider : provider의 업데이트 된 세부 정보가 있습니다.
name: aws
runtime: nodejs6.10
# you can overwrite defaults here
stage: prod
region: us-east-1
IAM 역할
그만큼 iam role즉, Lambda로 작업 할 수있는 권한에 대한 코드가 여기에 나와 있습니다. .yml 파일-
# 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"
# - "/*"
위 섹션에서 다른 AWS 서비스에 필요한 권한 인 역할에 대한 세부 정보를 제공해야합니다.
AWS Lambda 핸들러 세부 정보
내보내기 기능의 이름 handler.js안녕하세요. 따라서 핸들러는 파일 이름과 내보내기 이름입니다.
functions:
hello:
handler: handler.hello
아래에 표시된대로 추가 된 s3 서비스에 대한 리소스 세부 정보-
# 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"
서버리스 프레임 워크를 사용하여 AWS Lambda 배포
위의 lambda 함수를 AWS 콘솔에 배포 해 보겠습니다. 이를 위해 다음 단계를 사용할 수 있습니다.
1 단계
먼저 다음 명령을 사용해야합니다.
sls deploy
2 단계
이제 그림과 같이 AWS 콘솔에 함수가 표시됩니다. 서버리스 AWS의 세부 정보는 AWS 클라우드 형성에 기록됩니다. 이를 위해 AWS 서비스로 이동하여CloudFormation. AWS Lambda의 세부 정보는 다음과 같이 표시됩니다.
주어진 이름이 프로젝트 이름 뒤에 사용 된 단계인지 확인합니다.
3 단계
AWS Lambda에 대한 iam 역할과 AWS cloudwatch에 대한 로그 그룹을 생성합니다. 코드 세부 정보와 구성 세부 정보가 저장된 S3 버킷이 생성됩니다.
이것은 명령에 의해 생성됩니다 sls deploy. iam 역할을 지정할 필요는 없습니다. 대신 기본적으로deploy 단계.
4 단계
자세한 이벤트 흐름은 클라우드 형성 서비스에서 아래에 표시됩니다.
AWS Lambda 코드
AWS Lambda 코드와 실행 설정은 아래 스크린 샷에 나와 있습니다.
Lambda 함수를 테스트하면 다음 출력을 찾을 수 있습니다.
위 기능에 대한 로그 출력은 다음과 같습니다.
또한 아래와 같이 서버리스 명령을 사용하여 AWS Lambda 함수를 테스트 할 수 있습니다.
sls invoke --function hello
invoke 명령의 구문은 다음과 같습니다.
sls invoke --function hello
이 호출 명령은 AWS Lambda 함수를 트리거하고 아래와 같이 명령 프롬프트에 출력을 표시합니다.
배포하기 전에 Lambda 함수를 테스트하고 다음 명령을 사용하여 동일한 명령을 테스트 할 수도 있습니다.
sls invoke local --function hello
S3 및 DynanoDB와 같은 리소스는 로컬 환경에서 시뮬레이션 할 수 없으므로 항상 로컬에서 테스트 할 수있는 것은 아닙니다. 기본 함수 호출 만 로컬에서 테스트 할 수 있습니다.
서버리스 프레임 워크와 함께 API Gateway 및 AWS Lambda 사용
Lambda 및 api 게이트웨이를 사용할 새 프로젝트를 생성하는 방법을 살펴 보겠습니다. 이 목적으로 다음 명령을 사용할 수 있습니다.
sls create --template aws-nodejs
자, 열다 aws-api시각적 코드로 프로젝트. 당신은 볼 수 있습니다handler.js 과 serverless.yml생성 된 파일. API 게이트웨이 추가를 위해 변경해 보겠습니다.
다음과 같이 변경해야합니다. serverless.yml −
이제 AWS Lambda를 사용한 API 게이트웨이 활성화를 위해 추가 된 이벤트 세부 정보-
여기에 추가 된 새로운 것이 있습니다. events. 이벤트를 다음과 같이 지정했습니다.http, 경로 및 방법과 함께.
경로는 api 게이트웨이 경로가 생성 될 때 사용할 끝점이며 사용 방법은 GET입니다.
핸들러가 handler.hello, hello는 handler.js의 내보내기 이름입니다.
서버리스 프레임 워크가 수행하므로 여기에서 api 게이트웨이를 배포 할 필요가 없습니다.
이제 우리는 sls deploy 트리거를 사용하여 AWS Lambda 함수를 생성하는 명령 api gateway.
sls deploy
배포 세부 정보가 위에 나열되어 있는지 확인하십시오. 그것은 준다Get경로 세부 사항으로 끝 점이있는 url. 무대는prodURL에서도 동일하게 사용됩니다. 함수의 이름은aws-api-prod-hello.
URL을 입력하고 출력을 보겠습니다. 다음은 api-gateway get url에서 얻은 응답을 볼 수 있습니다.
{"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}}
이벤트 세부 정보는 URL을 눌렀을 때 출력에서도 사용할 수 있습니다. httpMethod는 GET이고 queryStringParameters는 쿼리 문자열에 아무것도 전달되지 않으므로 null입니다. 이벤트 세부 정보는input AWS Lambda 핸들러에서 지정했습니다.
api 게이트웨이에서 얻은 출력은 body 다음과 같은 세부 사항 message 과 input. 응답은 api 게이트웨이와 출력으로 표시하는 방법에 의해 전적으로 제어됩니다.
이제 쿼리 문자열의 GET URL에 입력을 전달하고 디스플레이를 살펴 보겠습니다.
그러면 아래와 같이 querystring의 출력을 볼 수 있습니다.
{"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}}
아래와 같이 쿼리 문자열 세부 정보 만 표시하도록 AWS Lambda 함수를 변경해 보겠습니다.
'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 });
};
쿼리 문자열을 기반으로 메시지를 변경했는지 확인하십시오. display message. 그러면 함수가 다시 배포되고 출력이 확인됩니다. 다음과 같이 쿼리 문자열 변수 표시 메시지에있는 세부 정보를 표시합니다.
이제 추가하겠습니다 post 아래와 같이 생성 된 이벤트에 대한 메소드-
이제 변경 사항을 배포하고 배포 명령에서 다음 출력을 볼 수 있습니다.
브라우저에서 직접 게시 URL을 테스트하면 세부 정보가 제공되지 않습니다. 게시물 URL을 테스트해야합니다.postman.
우편 배달원을 얻으려면 https://www.getpostman.com/apps. OS에 따라 앱을 다운로드하십시오. 설치가 완료되면 아래와 같이 게시물 URL을 테스트 할 수 있습니다.
Lambda 함수에 추가 한 메시지가 표시됩니다.
이 장에서는 Lambda 함수를 실행하고 호출하는 프로세스와 관련 단계에 대해 자세히 설명합니다.
AWS Lambda 실행 모델
AWS 실행은 AWS Lambda 함수에 추가 된 구성 세부 정보에 따라 다릅니다. 함수가 생성되면memory 과 time allotted, AWS Lambda 함수 실행에 사용됩니다.
구성 세부 정보의 도움으로 AWS Lambda는 실행 컨텍스트를 생성합니다. 실행 컨텍스트는 데이터베이스 연결, http 엔드 포인트, 타사 라이브러리 등과 같은 외부 종속성 (있는 경우)으로 준비된 임시 런타임 환경입니다.
AWS Lambda 함수가 처음으로 호출되거나 lambda 함수가 업데이트 된 경우 실행 컨텍스트 설정으로 인해 추가 지연 시간이 거의 없습니다. 그러나 후속 호출은 첫 번째 호출에 비해 더 빠릅니다. AWS Lambda는 Lambda 함수가 더 짧은 시간에 호출되면 실행 컨텍스트를 다시 재사용하려고합니다.
실행 컨텍스트의 재사용은 다음과 같은 의미를 갖습니다.
Lambda 실행을 위해 데이터베이스 연결이 완료된 경우 재사용을 위해 연결이 유지됩니다. 따라서 Lambda 코드는 연결이 존재하고 재사용되는 경우 먼저 확인해야하는 것과 같아야합니다. 그렇지 않으면 새로운 연결을 만들어야합니다.
실행 컨텍스트는 500MB의 디스크 공간을 유지합니다. /tmp예배 규칙서. 필요한 데이터는이 디렉토리에 캐시됩니다. 데이터가 있는지 확인하기 위해 코드를 추가로 확인할 수 있습니다.
Lambda 함수가 호출 될 때 콜백 또는 일부 백그라운드 프로세스가 완료되지 않은 경우 Lambda 함수가 다시 호출 될 때 실행이 시작됩니다. 그런 일이 필요하지 않은 경우 함수 실행이 완료되면 프로세스가 모두 올바르게 종료되었는지 확인하십시오.
실행 컨텍스트와 tmp 디렉토리에 저장된 데이터를 사용해야합니다. 새 데이터를 만들기 전에 필요한 데이터가 있는지 확인하기 위해 코드에 필요한 검사를 추가해야합니다. 이렇게하면 실행하는 동안 시간이 절약되고 더 빨라집니다.
AWS Lambda 함수 호출
다음을 사용하여 AWS를 수동으로 호출 할 수 있습니다. aws cli. 우리는 이미 다음을 사용하여 AWS Lambda를 생성하고 배포하는 방법을 보았습니다.cli. 여기서는 먼저aws cli 동일한 것을 호출하십시오.
AWS CLI를 사용하여 AWS Lambda 함수 생성
다음 명령을 사용하여 AWS Lambda 함수를 생성 할 수 있습니다. 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"
출력은 다음과 같습니다.
AWS 콘솔에서 생성 된 함수는 다음과 같습니다.
이제 다음 명령을 사용하여 함수를 호출 할 수 있습니다.invoke
--function-name <value>
[--invocation-type <value>]
[--log-type <value>]
[--client-context <value>]
[--payload <value>]
[--qualifier <value>]
outfile <value>
Options
--function-name − 호출하려는 함수의 이름을 지정하십시오.
--invocation-type(string) − 기본적으로 호출 유형은 다음과 같습니다. requestresponse. 호출 유형과 함께 사용할 수있는 값은 다음과 같습니다.RequestResponse, Event 과 DryRun.
이벤트 호출 유형은 비동기 응답에 사용됩니다.
DryRun은 실행하지 않고 Lambda 함수를 확인하려는 경우에 사용됩니다.
--log-type − 그것은 될 것입니다 Tail호출 유형이 RequestResponse 인 경우. 마지막 4KB base64로 인코딩 된 로그 데이터를 제공합니다. 가능한 값은 다음과 같습니다.Tail 과 None.
--client-context −Lambda 함수에 클라이언트 별 세부 정보를 전달할 수 있습니다. clientcontext는 json 형식이고 base64로 인코딩되어야합니다. 최대 파일 크기는 3583 바이트입니다.
--payload − 람다 함수에 json 형식 입력.
--qualifier −Lambda 함수 버전 또는 별칭 이름을 지정할 수 있습니다. 함수 버전을 전달하면 api가 정규화 된 함수 arn을 사용하여 Lambda 함수를 호출합니다. 별칭 이름을 지정하면 api는 별칭 ARN을 사용하여 Lambda 함수를 호출합니다.
outfile − 콘텐츠가 저장 될 파일 이름입니다.
Command with values
aws lambda invoke --function-name "lambdainvoke" --log-type
Tail C:\nodeproject\outputfile.txt
페이로드 옵션을 사용하여 아래와 같이 json 형식으로 람다 함수에 더미 이벤트를 보낼 수 있습니다.
관련 AWS Lambda 코드는 다음과 같습니다.
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);
};
코드에 콘솔이 있습니다. event.name 과 event.addr. 이제 aws cli의 페이로드 옵션을 사용하여 다음과 같이 이름과 주소로 이벤트를 보내겠습니다.
aws lambda invoke --function-name "lambdainvoke" --log-type
Tail --payload file://C:\clioutput\input.txt C:\clioutput\outputfile.txt
Thenpayload는 다음과 같이 json 입력이있는 파일 경로로 입력을받습니다.
{"name":"Roy Singh", "addr":"Mumbai"}
해당 출력은 다음과 같습니다.
출력은 파일에 저장됩니다. C:\clioutput\outputfile.txt 다음과 같이-
"Hello Roy Singh and address is Mumbai"
샘플 이벤트
샘플 이벤트를 전달하여 AWS Lambda 함수를 테스트 할 수 있습니다. 이 섹션에서는 AWS 서비스에 대한 몇 가지 샘플 이벤트를 제공합니다. 사용할 수 있습니다invoke모든 서비스로 트리거 될 때 출력을 테스트하는 명령. 아래의 해당 샘플 이벤트에 대해 주어진 코드를 관찰하십시오.
Amazon S3 Put 샘플 이벤트
{
"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"
}]
}
얻기 위해 details of the file from the s3 put event, 다음 명령을 사용할 수 있습니다-
event.Records[0].s3.object.key //will display the name of the file
에 get the bucket name, 다음 명령을 사용할 수 있습니다-
event.Records[0].s3.bucket.name //will give the name of the bucket.
에 see the EventName, 다음 명령을 사용할 수 있습니다-
event.Records[0].eventName // will display the eventname
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는 DynamoDB 테이블이 변경 될 때 AWS Lambda에서 이벤트가 될 수 있습니다. DynamodDB 테이블에서 항목 추가, 레코드 업데이트 및 삭제와 같은 작업을 수행 할 수 있습니다.
DynamoDB 추가, 삽입 및 삭제 이벤트에 대한 샘플 이벤트는 다음과 같습니다.
{
"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"
}]
}
Amazon Simple Notification Service
AWS Lambda는 다음에서 생성 된 알림을 처리하는 데 도움이 될 수 있습니다. Simple Notification Service (SNS). SNS에 게시 된 메시지가있을 때마다 메시지 세부 정보가 포함 된 SNS 이벤트로 Lambda 기능을 트리거 할 수 있습니다. 이 메시지는 Lambda 함수 내에서 처리 될 수 있으며 요구 사항에 따라 다른 서비스로 추가로 전송할 수 있습니다.
메시지가 입력되면 SNS가 Lambda 기능을 트리거합니다. 오류가 발생하여 Lambda 함수 호출을 시도하면 SNS는 최대 세 번까지 lambda 함수 호출을 재 시도합니다.
Amazon SNS 샘플 이벤트
추가 프로세스를 수행하기 위해 AWS Lambda 함수에서 사용할 수있는 모든 세부 정보가있는 샘플 이벤트는 다음과 같습니다.
{
"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"
}
}]
}
Amazon Simple Mail 서비스
Amazon Simple Mail Service를 사용하여 메시지를 보내고받을 수도 있습니다. 메시지가 수신되면 Simple Mail Service에서 AWS Lambda 함수를 호출 할 수 있습니다.
Amazon SES 이메일 수신 샘플 이벤트
AWS Lambda 내에서 사용될 때 SES 이벤트에 대한 세부 정보는 다음과 같습니다.
{
"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 로그
AWS Lambda는 다음을 사용하여 Amazon CloudWatch Logs에서 트리거 할 수 있습니다. CloudWatch Logs Subscriptions. CloudWatch Logs 구독에는 AWS Lambda 내에서 처리 및 분석 할 수 있거나 다른 시스템에로드하는 데 사용할 수있는 로그에 대한 실시간 데이터가 있습니다.
Amazon CloudWatch Logs 샘플 이벤트
{
"awslogs": {
"data": "H4sIAAAAAAAAAHWPwQqCQBCGX0Xm7EFtK+smZBEUgXoLCdMhFtKV3akI8d0bLYmibvPPN3wz00CJxmQnTO41whwW
QRIctmEcB6sQbFC3CjW3XW8kxpOpP+OC22d1Wml1qZkQGtoMsScxaczKN3plG8zlaHIta5KqWsozoTYw3/djzwhpL
wivWFGHGpAFe7DL68JlBUk+l7KSN7tCOEJ4M3/qOI49vMHj+zCKdlFqLaU2ZHV2a4Ct/an0/ivdX8oYc1UVX860fQ
DQiMdxRQEAAA=="
}
}
Amazon API Gateway
AWS Lambda 함수는 다음에서 호출 할 수 있습니다. httpsurl. IT는GET, POST, PUT. https URL이 호출되면 AWS Lambda 함수도 트리거되고 get / post를 사용하여 https로 전달 된 데이터를 AWS Lambda 내에서 사용 가능하게하여 DynamoDB에 삽입하거나 메일을 보내는 데 사용할 수 있습니다.
API Gateway 프록시 요청 이벤트
{
"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"
}
}
API Gateway 프록시 응답 이벤트
{
"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"
}
AWS Lambda 함수를 삭제하면 AWS 콘솔에서 AWS Lambda가 제거됩니다. AWS Lambda 함수를 삭제하는 방법에는 두 가지가 있습니다.
- AWS 콘솔 사용.
- AWS CLI 명령 사용
이 장에서는 이러한 두 가지 방법에 대해 자세히 설명합니다.
AWS 콘솔 사용
AWS 콘솔을 사용하여 Lambda 함수를 삭제하려면 아래 단계를 따르십시오.
1 단계
AWS 콘솔에 로그인하고 AWS Lambda 서비스로 이동합니다. 지금까지 생성 된 AWS 람다 함수는 아래와 같이 AWS 콘솔에 나열되어 있습니다.
이 목록은 지금까지 생성 된 AWS Lambda 함수가 23 개 있음을 보여줍니다. 상단에 제공된 페이지 매김을 사용하여 보거나 검색 상자를 사용하여 AWS Lambda를 검색 할 수 있습니다.
2 단계
각 AWS Lambda 함수에 라디오 버튼이 있는지 확인합니다. 삭제할 기능을 선택하십시오. 아래에 표시된 스크린 샷을 확인하십시오.
3 단계
AWS Lambda 함수를 선택하면 Action이전에 회색으로 표시된 드롭 다운이 이제 강조 표시됩니다. 이제 콤보 상자를 열면 다음과 같은 옵션이 표시됩니다.
4 단계
선택 Delete버튼을 눌러 AWS Lambda 함수를 삭제합니다. 클릭하면Delete, 그것은 다음과 같은 메시지를 표시합니다-
5 단계
메시지를주의 깊게 읽고 나중에 클릭 Delete 버튼을 눌러 AWS lambda 함수를 영구적으로 제거합니다.
Note− aws lambda를 삭제해도 연결된 역할은 삭제되지 않습니다. 역할을 제거하려면 IAM으로 이동하여 역할을 제거해야합니다.
6 단계
지금까지 생성 된 역할 목록은 다음과 같습니다. 있는지 관찰하십시오Create role 버튼 및 Delete role 단추.
삭제할 역할에있는 확인란을 클릭합니다. 한 번에 삭제할 여러 역할을 선택할 수도 있습니다.
7 단계
삭제 버튼을 클릭하면 아래와 같은 확인 메시지가 나타납니다.
이제 언급 된 세부 정보를주의 깊게 읽고 나중에 Yes, delete 단추.
AWS CLI 명령 사용
먼저 aws cli를 사용하여 Lambda 함수를 생성하고 동일한 명령을 사용하여 동일한 함수를 삭제하겠습니다. 이 목적을 위해 아래에 주어진 단계를 따르십시오-
1 단계
create-function에 대한 값을 가진 명령은 다음과 같습니다.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"
해당 출력은 다음과 같습니다.
2 단계
생성 된 AWS Lambda 함수는 다음과 같습니다. lambdatestcli. 기존 역할 arn을 사용하여 람다 함수를 만들었습니다.
그러면 아래와 같이 AWS 콘솔에 표시된이 함수를 찾을 수 있습니다.
3 단계
이제 표시된 명령을 사용하여 출력을 테스트하는 함수를 호출하겠습니다.aws lambda invoke --function-name "lambdatestcli" --log-type Tail
C:\demotest\outputfile.txt
이 명령은 다음과 같이 출력을 제공합니다.
4 단계
람다 함수에 대한 Cloudwatch의 로그를 관찰 할 수 있습니다. lambdatestcli5 단계
이제 AWS 함수를 삭제하는 실제 부분을 살펴 보겠습니다. Delete aws cli api주어진 기능을 삭제합니다. 이 목적으로 사용되는 명령의 세부 사항은 다음과 같습니다.Command
delete-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Options
--function-name(string) − Lambda 함수 이름 또는 AWS Lambda 함수의 arn을 사용합니다.
--qualifier (string)− 이것은 선택 사항입니다. 여기에서 삭제해야하는 AWS Lambda 버전을 지정할 수 있습니다.
-- cli-input-json(string)− 제공된 JSON 문자열을 기반으로 서비스 작업을 수행합니다. JSON 문자열은 제공된 형식을 따릅니다.by --generate-cli-skeleton. 명령 줄에 다른 인수가 제공되면 CLI 값이 JSON 제공 값을 재정의합니다.
--generate-cli-skeleton(string) − API 요청을 보내지 않고 json 스켈레톤을 표준 출력으로 인쇄합니다.
Command with values
aws lambda delete-function --function-name "lambdatestcli"
해당 출력은 다음과 같습니다.
6 단계
지금 확인하면 아래 스크린 샷과 같이 AWS Lambda 함수 목록에 해당 함수가 표시되지 않는 것을 확인할 수 있습니다.Amazon API Gateway 작업
AWS Lambda 함수는 다음에서 호출 할 수 있습니다. HTTPSurl. GET, POST, PUT에서 수행 할 수 있습니다. HTTPS URL이 호출되면 AWS Lambda 함수도 트리거 될 수 있으며 데이터는 다음을 사용하여 HTTPS로 전달됩니다.get/post AWS Lambda에서 DynamoDB에 삽입하거나 메일 등을 보내는 데 사용할 수 있습니다.
이 장에서는 AWS Lambda 및 API Gateway 작업과 관련된 다양한 프로세스에 대해 자세히 설명합니다.
관련된 프로세스
다음은 AWS lambda 및 API Gateway 작업과 관련된 프로세스입니다.
- 권한을위한 IAM 역할 생성
- AWS Lambda 함수 생성
- API 게이트웨이 생성
- 람다 함수를 API 게이트웨이에 연결
- API 게이트웨이로 데이터 전달
API 게이트웨이와 AWS Lambda의 작동을 설명하는 기본 다이어그램이 여기에 있습니다.
이러한 프로세스는 관련 스크린 샷과 함께이 장에서 자세히 설명합니다.
권한을위한 IAM 역할 생성
아래와 같이 Amazon 서비스에서 Lambda 함수에서 사용할 역할을 생성하기 위해 IAM을 선택합니다.
IAM으로 이동하여 Roles 아래 그림과 같이 왼쪽 섹션에서-
딸깍 하는 소리 Create role Lambda 함수.
Lambda를 선택하고 Permissions하단에. API Gateway 및 Lambda에 필요한 권한을 선택합니다.
검색에서 API 게이트웨이를 검색하면 모든 관련 권한이 나열됩니다. 여기에서는 아래와 같이 API 게이트웨이에 대한 전체 액세스 권한을 선택했습니다.
이제 API 게이트웨이를 검색하면 모든 관련 권한이 나열됩니다. 여기에서는 아래와 같이 API 게이트웨이에 대한 전체 액세스 권한을 선택했습니다.
정책에 대해서도 동일한 프로세스를 반복해야합니다.
필요한 정책 선택을 마치면 Review다음 단계를 위해. 아래와 같이 선택에 따라 역할의 이름을 입력하십시오-
역할에 연결된 정책이 표시됩니다. 딸깍 하는 소리Create role 역할 생성이 완료되었으며 람다 함수를 진행할 수 있습니다.
AWS Lambda 함수 생성
AWS 서비스로 이동하고 lambda 서비스를 클릭하여 API 게이트웨이와 연결하기위한 함수를 생성합니다.
Lambda 함수의 UI 화면은 다음과 같습니다. 딸깍 하는 소리Create function 버튼을 눌러 Lambda 함수 생성을 진행합니다.
기능의 이름을 입력하고 위에서 생성 한 기존 역할을 선택합니다.
이름이있는 기능이 lambdawithapigateway 성공적으로 생성되었습니다.
여기서 우리는 nodejs코드를 작성하는 런타임. AWS 코드helloworld 메시지는 다음과 같습니다-
AWS Lambda 코드는 index.js파일. 핸들러라는 함수에는 매개 변수가 있습니다.events, context 과 callback.
콜백 함수에는 기본적으로 오류와 성공 메시지가 있습니다. 여기에는 오류 관련 코드가 없으므로 null이 전달되고 성공 메시지는HelloWorld from lambda.
마지막으로 추가 된 변경 사항을 저장하고 API 게이트웨이에 Lambda 함수를 추가하겠습니다.
API 게이트웨이 생성
AWS 계정에 로그인하고 아래와 같이 API Gateway를 엽니 다.
API Gateway를 클릭하면 새 API 게이트웨이를 생성 할 수있는 화면으로 이동합니다.
딸깍 하는 소리 Create API 다음과 같이 세부 정보를 추가하십시오-
클릭 Create API화면 오른쪽에있는 버튼을 클릭합니다. 화면 왼쪽에 새로 생성 된 API가 표시됩니다.
클릭 Actions 드롭 다운을 클릭하여 API에 대한 새 리소스를 만듭니다.
이제 아래와 같이 새 리소스를 만듭니다.
들어가다 Resource Name아래 그림과 같이. 마지막에 생성 된 URL에 입력 된 리소스의 이름이 표시됩니다. 딸깍 하는 소리Create Resource 다음과 같이 화면에 표시됩니다.
더하다 GET/POST아래와 같이 생성 된 리소스에 대한 메서드. 방법을 선택하십시오Actions 쓰러지 다.
클릭 GET 메소드를 API에 추가합니다.
다음 단계는 Lambda 함수와 통합하는 통합입니다. 이제 아래와 같이 Lambda 함수를 추가하십시오.
Lambda 함수를 API Gateway에 연결
앞서 만든 람다 함수를 선택합니다.
변경 사항을 저장하면 아래와 같이 권한을 요청하는 대화 상자를 볼 수 있습니다.
딸깍 하는 소리 OK허가를 위해. 이것은 API 게이트웨이 HTTP 요청과 Lambda 함수 사이의 실행 세부 정보입니다.
이제 API 게이트웨이 변경 사항을 배포하겠습니다. 이를 위해 우리는Deploy API ...에서 Actions 아래에 표시된대로 드롭 다운-
고르다 Deploy API. 배포 상태를 묻습니다. 고르다New Stage 배포 단계 드롭 다운에서 단계 이름을 다음과 같이 추가합니다. Production.
딸깍 하는 소리 Deploy 버튼을 누르면 아래와 같이 URL로 리디렉션됩니다.
선택 GET왼쪽에서 URL을 가져옵니다. Lambda 함수의 메시지를 보려면 새 탭에서 URL을 엽니 다.
이것은 AWS Lambda 및 AWS API Gateway 작업의 기본 예입니다. 위의 예에서는 Lambda 함수에 메시지를 하드 코딩했습니다.
이제 API Gateway에서 메시지 세부 정보를 가져 오겠습니다. HTTPS 호출이 다른 도메인에서 호출되어야하는 경우 (예 : API에 대한 AJAX 호출) 생성 된 API 게이트웨이에 대해 CORS를 활성화해야합니다.
API 용으로 생성 된 reSource를 선택하고 Actions 드롭 다운-
지금, Enable CORS 다음 화면이 열립니다-
CORS를 활성화하는 데 몇 가지 방법을 사용할 수 있습니다. Access-Control-Allow-Origin *로 표시되어 있으면 모든 도메인의 API 게이트웨이에서 콘텐츠를 가져올 수 있습니다.
API로 작업 할 도메인 이름을 지정할 수도 있습니다. 딸깍 하는 소리Enable CORS and replace existing CORS headers 버튼을 누르면 아래와 같이 확인 메시지가 표시됩니다.
딸깍 하는 소리 Yes, replace existing values활성화하려면 버튼을 누르십시오. 그만큼Enable CORS 화면은 아래와 같이 보입니다-
API Gateway에 데이터 전달
API Gateway에서 생성 된 API 열기 displayhelloworld 아래와 같이-
딸깍 하는 소리 Integration Request 아래와 같이 데이터를 보내려면-
고르다 Body Mapping Templates 그리고 추가 Content-Type 이 예에서는 application/json. 추가 된 컨텐츠 유형을 클릭하여 다음과 같이 세부 사항을 추가하십시오.
이제 아래와 같이 JSON 형식으로 템플릿을 추가합니다.
API Gateway에서 데이터를 가져와 AWS Lambda와 공유하기 위해 메시지를 파라미터로 가져 왔는지 확인합니다. 세부 정보를 가져 오는 구문은 위와 같습니다.
이제 API를 배포하여 API Gateway URL에서 변경 사항을 사용할 수 있도록합니다. 이를 위해 API Gateway URL을 기반으로 데이터를 표시하도록 Lambda 함수를 변경해야합니다. Lambda 함수의 코드는 아래 givn입니다. 이벤트에서 메시지를 가져와 콜백으로 전달합니다.
exports.handler = (event, context, callback) => {
let message = event.message;
callback(null, message);
};
이제 Lambda에 변경 사항을 저장하고 URL을 눌러 변경 사항을 확인합니다. 아래 주어진 스크린 샷을 관찰하십시오-
아래와 같이 URL을 클릭하십시오-
https://rw2ek1xung.execute-api.us-east-
1.amazonaws.com/prod/hello?message=hello%20from%20api%20gateway
여기에서 GET URL에 쿼리 문자열로 메시지를 전달하고 있음을 확인하십시오. 그런 다음 아래와 같이 출력을 관찰 할 수 있습니다.
URL에서 메시지로 보낸 세부 정보를 읽고 브라우저에 동일하게 표시합니다.
Amazon S3에서 Lambda 함수 사용
Amazon S3 서비스는 파일을 업로드하거나 제거 할 수있는 파일 스토리지에 사용됩니다. S3 버킷에 파일 업로드가있을 때 S3에서 AWS Lambda를 트리거 할 수 있습니다. AWS Lambda에는 AWS Lambda 함수의 시작점 역할을하는 핸들러 함수가 있습니다. 핸들러에는 이벤트의 세부 사항이 있습니다. 이 장에서는 S3 버킷에 파일을 업로드 할 때 AWS S3를 사용하여 AWS Lambda 함수를 트리거하는 방법을 살펴 보겠습니다.
Amazon S3에서 AWS Lambda 함수를 사용하는 단계
Amazon S3에서 AWS Lambda 사용을 시작하려면 다음이 필요합니다.
- S3 버킷 생성
- s3 및 람다 작업 권한이있는 역할 생성
- 람다 함수를 만들고 s3를 트리거로 추가합니다.
예
Amazon S3와 AWS Lambda 간의 기본 상호 작용을 보여주는 예제를 통해 이러한 단계를 살펴 보겠습니다.
사용자가 Amazon S3 버킷에 파일을 업로드합니다.
파일이 업로드되면 백그라운드에서 AWS Lambda 함수를 트리거하여 파일이 업로드되었다는 콘솔 메시지의 형태로 출력을 표시합니다.
사용자는 파일이 업로드되면 Cloudwatch 로그에서 메시지를 볼 수 있습니다.
예제의 흐름을 설명하는 블록 다이어그램은 다음과 같습니다.
S3 버킷 생성
먼저 아래 단계를 사용하여 AWS 콘솔에서 s3 버킷을 생성 해 보겠습니다.
1 단계
Amazon 서비스로 이동하여 S3 아래 주어진 이미지에서 강조 표시된대로 저장 섹션에서-
2 단계
S3 스토리지를 클릭하고 Create bucket 업로드 된 파일을 저장합니다.
3 단계
클릭하면 Create bucket 버튼을 누르면 다음과 같은 화면을 볼 수 있습니다.
4 단계
세부 사항을 입력하십시오 Bucket name, Select the Region 클릭 Create왼쪽 하단에있는 버튼. 따라서 이름이있는 버킷을 만들었습니다.workingwithlambdaands3.
5 단계
이제 버킷 이름을 클릭하면 아래와 같이 파일을 업로드하라는 메시지가 표시됩니다.
따라서 S3에서 버킷 생성이 완료되었습니다.
S3 및 Lambda에서 작동하는 역할 생성
S3 및 Lambda에서 작동하는 역할을 생성하려면 아래 단계를 따르십시오.
1 단계
AWS 서비스로 이동하여 아래와 같이 IAM을 선택합니다.
2 단계
이제 IAM -> Roles 아래와 같이-
3 단계
이제 Create role이 역할을 사용할 서비스를 선택합니다. Lambda를 선택하고Permission 단추.
4 단계
아래에서 권한을 추가하고 클릭 Review.
5 단계
다음 권한을 선택했는지 확인하십시오.
우리가 선택한 정책이 AmazonS3FullAccess, AWSLambdaFullAccess 과 CloudWatchFullAccess.
6 단계
이제 역할 이름, 역할 설명을 입력하고 Create Role 하단의 버튼.
따라서 우리의 역할은 lambdawiths3service 생성됩니다.
Lambda 함수 생성 및 S3 트리거 추가
이 섹션에서는 Lambda 함수를 생성하고 여기에 S3 트리거를 추가하는 방법을 살펴 보겠습니다. 이를 위해 아래에 주어진 단계를 따라야합니다.
1 단계
AWS 서비스로 이동하여 아래와 같이 Lambda를 선택합니다.
2 단계
딸깍 하는 소리 Lambda 추가 프로세스를 따르십시오. Name. 선택Runtime, Role등을 만들고 함수를 만듭니다. 우리가 생성 한 Lambda 함수는 아래 스크린 샷에 나와 있습니다.
3 단계
이제 S3 트리거를 추가하겠습니다.
4 단계
위에서 트리거를 선택하고 아래 표시된대로 세부 사항을 추가하십시오.
5 단계
버킷 드롭 다운에서 생성 된 버킷을 선택합니다. 이벤트 유형에는 다음과 같은 세부 정보가 있습니다.
고르다 Object Created (All), 파일 업로드, 제거 등의 경우 AWS Lambda 트리거가 필요하기 때문입니다.
6 단계
추가 된 파일을 필터링하는 데 사용되는 Prefix 및 File 패턴을 추가 할 수 있습니다. 예를 들어 .jpg 이미지에 대해서만 람다를 트리거합니다. 업로드 된 모든 파일에 대해 Lambda를 트리거해야하므로 지금은 비워 둡니다. 딸깍 하는 소리Add 버튼을 눌러 트리거를 추가합니다.
7 단계
아래와 같이 Lambda 함수에 대한 트리거 디스플레이를 찾을 수 있습니다.
aws lambda 함수에 대한 세부 정보를 추가하겠습니다. 여기에서는 온라인 편집기를 사용하여 코드를 추가하고 nodejs를 런타임 환경으로 사용합니다.
8 단계
AWS Lambda로 S3를 트리거하려면 아래와 같이 코드에서 S3 이벤트를 사용해야합니다.
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);
};
이벤트 매개 변수에는 S3event의 세부 사항이 있습니다. S3bucket에서 이미지를 업로드 할 때 기록 될 버킷 이름과 파일 이름을 관리했습니다.
9 단계
이제 변경 사항을 저장하고 S3upload를 사용하여 lambda 함수를 테스트 해 보겠습니다. 다음은 AWS Lambda에 추가 된 코드 세부 정보입니다.
10 단계
이제 역할, 메모리 및 시간 제한을 추가하겠습니다.
11 단계
이제 Lambda 함수를 저장합니다. Amazon 서비스에서 S3를 열고 앞서 생성 한 버킷을 엽니 다.workingwithlambdaands3.
아래와 같이 이미지를 업로드하십시오-
12 단계
딸깍 하는 소리 Upload 그림과 같이 파일을 추가하는 버튼-
13 단계
딸깍 하는 소리 Add files파일을 추가합니다. 파일을 끌어서 놓을 수도 있습니다. 이제Upload 단추.
따라서 S3 버킷에 하나의 이미지를 업로드했습니다.
14 단계
트리거 세부 정보를 보려면 AWS 서비스로 이동하여 CloudWatch. Lambda 함수에 대한 로그를 열고 다음 코드를 사용하십시오.
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);
};
Cloudwatch에서 관찰 할 수있는 출력은 다음과 같습니다.
AWS Lambda 함수는 파일이 S3 버킷에 업로드되고 세부 정보가 아래와 같이 Cloudwatch에 기록 될 때 트리거됩니다.
Amazon DynamoDB에서 Lambda 함수 사용
DynamoDB는 데이터가 테이블에 추가, 업데이트 또는 삭제 될 때 AWS Lambda를 트리거 할 수 있습니다. 이 장에서는 DynamoDB 테이블 및 데이터를 읽고 추가 된 데이터와 함께 메일을 보내는 AWS Lambda에 항목을 추가하는 간단한 예제를 살펴 보겠습니다.
필수 조건
Amazon DB 및 AWS Lambda를 사용하려면 다음 단계를 따라야합니다.
기본 키를 사용하여 DynamoDB에 테이블 생성
DynamoDB 및 AWS Lambda를 사용할 권한이있는 역할을 생성합니다.
AWS Lambda에서 함수 생성
메일을 보내기위한 AWS Lambda 트리거
DynamoDB에 데이터 추가
이 단계 각각에 대해 자세히 설명하겠습니다.
예
DynamoDB와 AWS Lambda 간의 기본 상호 작용을 보여주는 다음 예제를 살펴 보겠습니다. 이 예는 다음 작업을 이해하는 데 도움이됩니다.
Dynamodb 테이블에 customer라는 테이블을 만들고 해당 테이블에 데이터를 입력하는 방법.
데이터가 입력되면 AWS Lambda 함수를 트리거하고 Amazon SES 서비스를 사용하여 메일을 보냅니다.
예제의 흐름을 설명하는 기본 블록 다이어그램은 다음과 같습니다.
기본 키를 사용하여 DynamoDB에 테이블 생성
AWS 콘솔에 로그인합니다. AWS 서비스로 이동하여 아래와 같이 DynamoDB를 선택합니다. DynamoDB를 선택합니다.
DynamoDB는 아래와 같은 옵션을 보여줍니다.
이제 Create table그림과 같이 테이블을 만듭니다. 테이블 이름을 다음과 같이 지정했습니다.customer 해당 테이블의 기본 키를 cust_id. 클릭Create 버튼을 눌러 테이블을 dynamodb에 추가합니다.
생성 된 테이블은 다음과 같습니다.
다음과 같이 생성 된 테이블에 항목을 추가 할 수 있습니다.
딸깍 하는 소리 Items 클릭 Create item 버튼-
DynamoDB 및 AWS Lambda 작업 권한이있는 역할 생성
역할을 생성하려면 AWS 서비스로 이동하고 IAM을 클릭합니다.
이전에 생성 한 DynamoDB 테이블에만 사용할 정책을 생성하겠습니다.
이제 Service. 우리가 선택한 서비스가DynamoDB. 에 대한Actions 우리는 모두 가져 갔다 Dynamodb즉, 목록, 읽기 및 쓰기에 대한 액세스. 에 대한resources, 테이블 리소스 유형 작업을 선택합니다. 클릭하면 다음과 같은 화면을 볼 수 있습니다.
이제 선택 table 과 Add ARN그림과 같이 그것에. 우리는 얻을 것이다ARN 세부 정보 customer table 아래와 같이 생성-
시작하다 arn 여기에 세부 사항-
딸깍 하는 소리 Add버튼을 눌러 변경 사항을 저장하십시오. 완료되면Click on Review policy. 아래와 같이 정책 이름, 설명 등을 입력하십시오-
클릭 create policy저장합니다. 생성 할 역할에 정책을 추가합니다. 고르다Role 왼쪽에서 세부 정보를 입력하십시오.
추가 된 정책이 newpolicyfordynamdb, awslambdafullaccess, cloudwatchfullaccess 과 amazonsesfullaccess. 역할을 추가하고 AWS Lambda 함수를 생성하는 동안 사용합니다.
AWS Lambda에서 함수 생성
따라서 우리는 Lambda 함수를 생성했습니다. newlambdafordynamodb 보여진 바와 같이.
이제 생성 된 AWS Lambda에 DynamodDB 트리거를 추가하겠습니다. 우리가 사용할 런타임은 Node.js입니다.
AWS Lambda 용으로 구성 할 Dynamodb 트리거에서 다음 세부 정보를 찾을 수 있습니다.
이제 간단히 Add AWS Lambda에 트리거를 추가합니다.
메일을 보내기위한 AWS Lambda 트리거
데이터가 AWS Lambda에 삽입되면 AWS Lambda가 트리거됩니다. 이벤트 매개 변수에는 dynamodb 데이터가 삽입됩니다. 이벤트에서 데이터를 읽고 이메일을 보냅니다.
이메일 보내기
이메일을 보내려면 아래 단계를 따라야합니다.
1 단계
AWS 서비스로 이동하여 SES (단순 이메일 서비스)를 선택합니다. 다음과 같이 이메일을 보내야하는 이메일을 확인합니다.
2 단계
버튼을 클릭 Verify a New Email Address 이메일 주소를 추가합니다.
3 단계
확인을 위해 이메일 주소를 입력하십시오. 이메일 주소는 클릭해야하는 Amazon으로부터 활성화 메일을 수신합니다. 활성화가 완료되면 이메일 ID가 확인되고 AWS 서비스에서 사용할 수 있습니다.
4 단계
이벤트에서 데이터를 읽고 이메일을 보내는 AWS Lambda 코드는 다음과 같습니다.
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");
}
});
}
이제 Lambda 함수와 데이터를 DynamoDB 테이블에 저장합니다.
DynamoDB에 데이터 추가
다음 순서에 따라 DynamoDB에 데이터를 추가합니다.
1 단계
테이블로 이동 customer Dynamodb에서 생성되었습니다.
2 단계
딸깍 하는 소리 Create item.
3 단계
딸깍 하는 소리 Save 버튼을 클릭하고 AWS Lambda에 제공된 이메일 ID를 확인하여 메일이 AWS Lambda에서 전송되었는지 확인합니다.
예약 된 이벤트와 함께 Lambda 함수 사용
예약 된 이벤트는 규칙 세트에 따라 정기적으로 발생한다고 가정합니다. 예약 된 이벤트는 Cloudwatch 서비스에 정의 된 간격 후에 Lambda 기능을 실행하는 데 사용됩니다. AWS Lambda와 함께 크론 작업을 수행하는 데 가장 적합합니다. 이 장에서는 예약 된 이벤트와 AWS Lambda를 사용하여 5 분마다 메일을 보내는 방법을 간단한 예제로 설명합니다.
필수 조건
예약 된 이벤트와 함께 Lambda 함수를 사용하기위한 요구 사항은 다음과 같습니다.
- AWS SES를 사용하여 이메일 ID 확인
- AWS SES, Cloudwatch 및 AWS Lambda를 사용하기위한 역할 생성
- 이메일을 보낼 Lambda 함수 생성
- AWS CloudWatch에서 예약 된 이벤트에 대한 규칙 추가
예
고려할 예제는 AWS Lambda 함수에 CloudWatch 이벤트를 추가합니다. Cloudwatch는 연결된 시간 패턴을 기반으로 AWS Lambda를 트리거합니다. 예를 들어 아래 예에서는 5 분을 트리거로 사용했습니다. 즉, 5 분마다 AWS Lambda가 트리거되고 AWS Lambda가 트리거 될 때마다 메일을 보냅니다.
동일한 기본 블록 다이어그램은 다음과 같습니다.
AWS SES를 사용하여 이메일 ID 확인
AWS에 로그인하고 아래와 같이 AWS SES 서비스로 이동합니다.
이제 Simple Email 표시된 서비스-
딸깍 하는 소리 Email Addresses 그림과 같이 왼쪽에-
버튼을 표시합니다 Verify a New Email Address. 클릭하세요.
시작하다 Email Address확인하고 싶습니다. 딸깍 하는 소리Verify This Email Address단추. 이메일 제목이 Amazon Web Services – 미국 동부 (버지니아 북부) 지역의 이메일 주소 확인 요청 인 해당 이메일 ID로 AWS로부터 메일을 받게됩니다.
메일에 제공된 링크를 클릭하여 이메일 주소를 확인하십시오. 확인되면 다음과 같이 이메일 ID가 표시됩니다.
AWS SES, Cloudwatch 및 AWS Lambda를 사용하기위한 역할 생성
서비스 사용 권한을 부여하는 역할을 만들 수도 있습니다. 이를 위해 IAM으로 이동하여 역할을 선택합니다. 필요한 정책을 추가하고 역할을 만듭니다. 여기에 생성 된 역할이events with lambda.
이메일을 보낼 Lambda 함수 생성
런타임을 nodejs로 사용하여 Lambda 함수를 생성하는 단계를 따라야합니다.
이제 다음과 같이 Lambda에 트리거를 추가합니다.
세부 정보 추가 CloudWatch Events Trigger 아래와 같이-
이벤트는 생성 된 규칙 트리거에 따라 5 분마다 트리거됩니다.
이메일 전송을위한 Lambda 코드는 다음과 같습니다.
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");
}
});
};
이제 AWS SES 서비스가 필요합니다. 다음과 같은 코드를 사용하여 추가 할 수 있습니다.
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
메일을 보내려면 nodejs, 우리는 eParams 다음과 같은 세부 사항이있는 객체 example mail, to mail id 과 the body with message 다음과 같이-
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]"
};
이메일을 보내는 Lambda 코드는 다음과 같습니다.
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");
}
});
이제이 Lambda 함수를 저장하고 메일의 이메일 ID를 확인하겠습니다. 아래 스크린 샷은 메일이 5 분마다 AWS Lambda에서 전송되었음을 보여줍니다.
Amazon SNS에서 Lambda 함수 사용
Amazon SNS는 푸시 알림에 사용되는 서비스입니다. 이 장에서는 다음 작업을 수행하는 예제를 통해 AWS Lambda 및 Amazon SNS의 작동을 설명합니다.
SNS 서비스에서 주제 생성 및 AWS Lambda 사용 CloudWatch에 주제 추가
주어진 전화 번호로 SNS 문자 메시지를 보냅니다.
필수 조건
SNS 서비스에서 주제를 생성하고 AWS Lambda를 사용하기 위해 CloudWatch에 주제를 추가하려면 아래에 제공된 단계를 따를 필요가 없습니다.
- SNS에서 주제 만들기
- IAM에서 권한을위한 역할 생성
- AWS Lambda 함수 생성
- 주제에 게시하여 트리거 활성화
- CloudWatch 서비스에서 메시지 세부 정보를 확인하십시오.
주어진 전화 번호로 SNS 문자 메시지를 보내려면 다음을 수행해야합니다.
- AWS Lambda에 코드를 추가하여 전화기로 메시지를 보냅니다.
예
이 예에서는 SNS에 주제를 생성합니다. 게시 할 주제에 세부 정보를 입력하면 AWS Lambda가 트리거됩니다. 주제 세부 정보는 CloudWatch에 기록되고 AWS Lambda에서 전화로 메시지를 보냅니다.
다음은 동일한 내용을 설명하는 기본 블록 다이어그램입니다.
SNS에서 주제 만들기
SNS에서 주제를 생성하려면 아래 단계를 따라야합니다.
1 단계
AWS 콘솔에 로그인하고 아래와 같이 Amazon의 SNS 서비스로 이동합니다.
2 단계
딸깍 하는 소리 Simple Notification 서비스 및 Create topic 그것에.
3 단계
그런 다음 클릭해야 Create new topic 버튼-
4 단계
들어가다 Topic name 과 Display name 그리고 클릭 Create topic. 다음과 같이 디스플레이에 주제 이름이 표시되어야합니다.
IAM에서 권한을위한 역할 생성
AWS Lambda 및 SNS 서비스를 사용할 역할을 생성하려면 AWS 콘솔에 로그인해야합니다. 그런 다음 Amazon 서비스에서 IAM을 선택하고 아래와 같이 왼쪽에서 역할을 클릭합니다.
SNS, Lambda 및 CloudWatch에 대한 정책이 추가되었는지 확인하십시오. 역할 이름을 추가하고 역할 생성 버튼을 클릭하여 역할 생성 프로세스를 완료합니다.
AWS Lambda 함수 생성
이 섹션에서는 nodejs를 런타임으로 사용하여 AWS Lambda 함수를 생성하는 방법을 이해하겠습니다.
이를 위해 AWS 콘솔에 로그인하고 AWS 서비스에서 AWS Lambda를 선택합니다. 함수 이름, 역할 세부 정보 등을 추가하고 그림과 같이 AWS Lambda 함수를 생성합니다.
SNS 트리거 추가
SNS 트리거를 추가하려면 다음과 같이 SNS 구성 세부 정보를 입력하십시오.
그런 다음 SNS topic 과 Add 다음과 같이 AWS Lambda 함수에 대한 트리거-
그런 다음 아래 주어진 AWS 람다 코드를 추가하십시오.
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);
};
위의 코드에서 event.Records[0].Sns.Message추가 된 메시지 세부 정보를 제공합니다. CloudWatch에서 볼 수 있도록 콘솔 로그를 추가했습니다. 이제 필요한 메모리 및 시간 할당과 함께 Lambda 함수를 저장합니다.
주제에 게시하여 트리거 활성화
1 단계에서 SNS에 이미 주제를 생성했습니다. 이제 주제를 게시하고 AWS Lambda에 의해 트리거 될 CloudWatch의 세부 정보를 볼 것입니다.
주제에 게시
먼저 게시 할 주제의 이름을 선택합니다. 클릭Publish to topic 버튼 −
들어가다 Subject 과 Message 아래에 표시된 세부 사항-
당신은 또한 선택할 수 있습니다 JSON 보낼 메시지 형식 JSON스타일. 딸깍 하는 소리Publish the message 화면 끝에 버튼을 클릭합니다.
CloudWatch 서비스에서 메시지 세부 정보 확인
AWS 콘솔에 로그인하고 CloudWatch 서비스를 엽니 다. 왼쪽의 로그를 클릭하고 생성 된 AWS Lambda 함수에 대한 로그를 선택합니다. 위와 같이 생성 된 메시지가있는 로그에 대해 다음 디스플레이를 찾을 수 있습니다.
AWS Lambda에 코드를 추가하여 전화기로 메시지 보내기
여기에서는 SNS 문자 메시지를 사용하여 AWS Lambda를 사용하여 전화로 메시지를 보냅니다. 다음 코드를 사용하여 다음과 같이 AWS Lambda 코드를 업데이트 할 수 있습니다.
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);
}
});
};
메시지를 보내는 데 사용할 AWS SDK 및 SNS 서비스를 추가했습니다. SNS에서 오는 이벤트 메시지는 주어진 전화 번호로 문자 메시지로 전송됩니다.
예를 들어 다음 코드를 관찰하십시오-
sns.publish({
Message: snsmessage,
PhoneNumber: '+911212121212'
}, function (err, data) {
if (err) {
console.log(err);
callback(err, null);
} else {
console.log(data);
callback(null, data);
}
});
지금 주제를 입력하여 Cloudwatch의 메시지와 위에 제공된 전화 번호를 확인하십시오.
딸깍 하는 소리 Publish message메시지를 게시합니다. 다음과 같이 주어진 전화 번호에 메시지가 표시됩니다.
CloudTrail과 함께 Lambda 함수 사용
AWS CloudTrailAmazon에서 제공하는 서비스로, AWS 콘솔 내에서 수행 된 모든 활동을 기록하는 데 도움이됩니다. 모든 API 호출을 기록하고 기록을 저장하며 나중에 디버깅 목적으로 사용할 수 있습니다. CloudTrail에서 Lambda를 트리거 할 수 없습니다. 대신 CloudTrail은 모든 기록을 S3 버킷에 로그 형식으로 저장하고 S3에서 AWS Lambda를 트리거 할 수 있습니다. 로그가 처리되면 S3 버킷에 로그가 추가 될 때마다 AWS Lambda가 트리거됩니다.
필수 조건
AWS CloudTrail, S3 및 AWS Lambda 작업을 시작하기 전에 다음을 수행해야합니다.
- CloudTrail 로그를 저장할 S3 버킷 생성
- SNS 서비스 생성
- CloudTrail에서 추적을 생성하고 S3 버킷 및 SNS 서비스 할당
- 권한이있는 IAM 역할을 생성합니다.
- AWS Lambda 함수 생성
- AWS Lambda 구성
예
AWS CloudTrail, S3 및 AWS Lambda의 작동을 보여주는 예를 고려해 보겠습니다. 여기에서는 AWS 콘솔에서 수행 된 모든 상호 작용에 대한 모든 로그를 저장할 S3 버킷을 생성합니다. SNS 주제를 만들어 게시 해 보겠습니다. 이 작업의 경우 로그가 S3에 파일로 입력됩니다. AWS lambda가 트리거되어 Amazon SES 서비스를 사용하여 메일을 보냅니다.
이 과정을 설명하기위한 블록 다이어그램은 다음과 같습니다.
CloudTrail 로그를 저장할 S3 버킷 생성
AWS 콘솔로 이동하여 S3 서비스를 클릭합니다. 딸깍 하는 소리Create bucket 다음과 같이 cloudtrail 로그를 저장할 버킷의 이름을 입력하십시오.
여기에서 S3 버킷이 생성되었는지 확인합니다. cloudtraillogsaws 로그를 저장하기 위해.
SNS 서비스 생성
AWS 콘솔로 이동하여 Simple notification Service. 왼쪽에서 주제를 선택하고 새 주제 만들기 버튼을 클릭합니다.
우리는라는 주제를 만들었습니다. displaytrail주제를 게시합니다. 세부 정보는 위에서 생성 된 S3bucket에 저장됩니다.
Cloudtrail에서 추적을 생성하고 S3 버킷 및 SNS 서비스 할당
AWS 콘솔로 이동하여 CloudTrail 표시된대로 관리 도구에서 서비스-
딸깍 하는 소리 Trails 아래 그림과 같이 왼쪽에서-
딸깍 하는 소리 Create Trail단추. 들어가다Trail name, Apply trail to all regions 그리고 선택 Yes. 그러면 모든 지역에 로그가 적용됩니다.
에 대한 Read/Write events, 선택 All. 추가S3 bucket 과 SNS topic세부 사항은 아래와 같습니다. 여기에서 새 항목을 만들거나 기존 항목을 추가 할 수 있습니다.
사용할 수있는 옵션이 있습니다. encrypt log files, enable log file validation, send sns notification for every log file delivery등. 여기서 기본값을 사용했습니다. 파일 암호화를 허용 할 수 있으며 암호화 키를 요청합니다. 세부 정보가 추가되면 트레일 생성 버튼을 클릭합니다.
권한이있는 IAM 역할 생성
AWS 콘솔로 이동하여 IAM을 선택합니다. 이메일 전송을 위해 S3, Lambda, CloudTrail 및 SES에 대한 권한이있는 역할을 생성합니다. 생성 된 역할은 다음과 같습니다.
AWS Lambda 함수 생성
AWS 서비스로 이동하여 Lambda서비스. 함수 이름을 추가하고 런타임을 다음으로 선택하십시오.nodejs을 클릭하고 lambda 함수에 대해 생성 된 역할을 선택합니다. 다음은 생성 된 람다 함수입니다.
AWS Lambda 구성
다음으로 생성 된 AWS lambda에 대한 트리거로 S3를 추가해야합니다.
S3 버킷 세부 정보를 추가하여 트리거를 추가하고 다음 AWS Lambda 코드를 추가합니다.
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");
}
});
};
위와 같이 이벤트에서 S3 버킷 및 로그 세부 정보를 가져와 SES 서비스를 사용하여 메일을 보냅니다.
AWS 콘솔에서 활동이 발생할 때마다 로그가 S3 버킷으로 전송되고 동시에 AWS lambda가 트리거되고 메일이 코드에 언급 된 이메일 ID로 전송됩니다.
AWS Lambda에서 필요에 따라 로그를 처리 할 수 있습니다.
Amazon Kinesis에서 Lambda 함수 사용
AWS Kinesis서비스는 웹 사이트 클릭, 로그, 소셜 미디어 피드에서 발생하는 실시간 추적 데이터를 캡처 / 저장하는 데 사용됩니다. 이 로그에서 추가 처리를 수행하도록 AWS Lambda를 트리거 할 수 있습니다.
필수 조건
Kinesis 및 AWS Lambda를 시작하기위한 기본 요구 사항은 다음과 같습니다.
- 필요한 권한이있는 역할 만들기
- Kinesis에서 데이터 스트림 생성
- AWS Lambda 함수를 생성합니다.
- AWS Lambda에 코드 추가
- Kinesis 데이터 스트림에 데이터 추가
예
Kinesis의 데이터 스트림을 처리하기 위해 AWS Lambda를 트리거하고 수신 된 데이터와 함께 메일을 보내는 예제를 살펴 보겠습니다.
프로세스를 설명하기위한 간단한 블록 다이어그램은 다음과 같습니다.
필요한 권한이있는 역할 만들기
AWS 콘솔로 이동하여 역할을 생성합니다.
Kinesis에서 데이터 스트림 생성
AWS 콘솔로 이동하여 kinesis에서 데이터 스트림을 생성합니다.
다음과 같이 4 가지 옵션이 있습니다. 이 예제에서는 Create data stream에 대해 작업합니다.
딸깍 하는 소리 Create data stream. 아래 주어진 Kinesis 스트림 이름에 이름을 입력합니다.
데이터 스트림의 샤드 수를 입력합니다.
샤드의 세부 사항은 다음과 같습니다.
이름을 입력하고 Create Kinesis stream 하단의 버튼.
스트림이 활성화 되려면 일정 시간이 걸립니다.
AWS Lambda 함수 생성
AWS 콘솔로 이동하여 Lambda를 클릭합니다. 다음과 같이 AWS Lambda 함수를 생성합니다.
딸깍 하는 소리 Create function화면 끝에 버튼을 클릭합니다. Kinesis를 AWS Lambda에 트리거로 추가합니다.
Kinesis 트리거에 구성 세부 정보 추가-
트리거를 추가하고 이제 AWS Lambda에 코드를 추가합니다.
AWS Lambda에 코드 추가
이를 위해 nodejs를 런타임으로 사용합니다. AWS Lambda가 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");
}
});
};
이벤트 매개 변수에는 키네 시스 데이터 스트림에 입력 된 데이터가 있습니다. 위의 aws lambda 코드는 kinesis 데이터 스트림에 데이터가 입력되면 활성화됩니다.
Kinesis Data Stream에 데이터 추가
여기에서는 AWS CLI를 사용하여 아래와 같이 데이터 키네 시스 데이터 스트림을 추가합니다. 이를 위해 다음 명령을 사용할 수 있습니다.
aws kinesis put-record --stream-name kinesisdemo --data "hello world" --
partition-key "789675"
그런 다음 AWS Lambda가 활성화되고 메일이 전송됩니다.
사용자 지정 사용자 애플리케이션과 함께 Lambda 함수 사용
AWS lambda 함수를 사용하여 다음 두 가지 방법으로 사용자 애플리케이션에서 생성 된 이벤트를 사용하여 처리 할 수 있습니다.
- AWS 콘솔 사용
- AWS CLI 사용
AWS 콘솔 사용
AWS 콘솔에서 이벤트 및 AWS Lambda를 사용합니다. 이를 위해 AWS 콘솔로 이동하여 lambda 함수를 생성합니다.
다음으로 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);
};
위 코드에서는 이벤트를 사용하여 이름과 주소를 인쇄하고 있습니다.
이벤트에 대한 세부 정보는 다음과 같이 생성 된 테스트 이벤트를 사용하여 제공됩니다.
이제 이벤트를 저장하고 테스트하십시오.
해당 로그 출력은 다음과 같습니다.
AWS CLI 사용
다음과 같이 AWS CLI를 사용하여 위의 함수를 호출 할 수 있습니다.
aws lambda invoke --function-name "lambdauserevent" --log-type Tail --
payload file://C:\clioutput\input.txt C:\clioutput\outputfile.txt
이벤트 세부 정보는 페이로드에 제공되고 출력은 다음 위치에 저장됩니다. C:\clioutput\outputfile.txt. 다음과 같이-
input.txt
{"name":"Roy Singh", "addr":"Mumbai"}
AWS CLI를 사용하여 Lambda를 호출하면 다음과 같은 출력을 볼 수 있습니다.
마찬가지로 다른 AWS 서비스에 대해 AWS Lambda를 테스트하려는 경우 AWS 콘솔 및 AWS CLI의 테스트 이벤트를 사용하여 수행 할 수 있습니다. 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"
}
}]
}
위에 표시된 샘플 이벤트를 추가하고 다음과 같이 테스트 해 보겠습니다.
AWS Lambda에서 코드는 아래 주어진 예와 같이 SNS 메시지를 인쇄합니다.
exports.handler = (event, context, callback) => {
// TODO implement
console.log(event.Records[0].Sns.Message);
callback(null, event.Records[0].Sns.Message);};
AWS CLI를 사용하여 동일하게 호출하겠습니다. 이벤트를 파일에 저장하고 표시된 명령을 사용하여 페이로드에 사용하겠습니다.
aws lambda invoke --function-name "lambdauserevent" --log-type Tail --
payload file://C:\clioutput\sns.txt C:\clioutput\snsoutput.txt
CloudFront와 함께 AWS Lambda @ Edge 사용
Lambda @ Edge는 cloudfront가 제공하는 콘텐츠를 사용자 지정하는 데 사용되는 AWS Lambda 컴퓨팅 서비스에 추가 된 것입니다.
AWS의 cloudfront와 AWS Lambda의 작동을 보여주는 블록 다이어그램은 다음과 같습니다.
AWS Lambda를 사용할 수있는 네 가지 방법이 있습니다.
Viewer Request − 최종 사용자가 CloudFront에 Viewer Request라는 요청을합니다.
Origin Request − CloudFront가 오리진에 요청을 전달합니다.
Origin Response − CloudFront는 오리진에서 응답을받습니다.
Viewer Response − CloudFront는 최종 사용자에게 응답을 보냅니다.
Lambda @ Edge를 다음 목적으로 사용할 수 있습니다.
요청 및 응답 시간에 헤더를 변경합니다.
헤더에 쿠키 세부 사항을 추가하십시오. 요청 및 응답에 따라 AB 테스트를 수행합니다.
헤더 세부 사항에 따라 URL을 다른 사이트로 리디렉션합니다.
헤더에서 사용자 에이전트를 가져와 브라우저, OS 등의 세부 정보를 찾을 수 있습니다.
필수 조건
CloudFront 및 Lambda @ Edge 작업을 시작하려면 다음이 필요합니다.
파일 세부 정보가있는 S3 스토리지 버킷 생성
CloudFront 및 Lambda @ Edge 작업 권한을 허용하는 역할 생성
CloudFront 배포 생성
람다 함수 만들기
Cloudfront에 람다 함수 세부 정보 추가
브라우저에서 Cloudfront URL 확인
CloudFront 및 Lambda @ Egde를 사용하여 예제를 작업 할 것입니다. 여기서 페이지를 호스팅하고 데스크톱 및 디바이스로 감지되면 응답을 변경합니다.
파일 세부 정보로 S3 스토리지 버킷 생성
AWS 콘솔에 로그인하고 S3에서 버킷을 생성하고 . html 표시하려는 파일.
클릭 S3 과 Create bucket 아래와 같이-
이제 Create bucket 버튼을 클릭하고 아래와 같이 버킷의 세부 정보를 추가합니다.
클릭 Create 버튼을 클릭하고 .html을 업로드하십시오.
역할 생성
AWS 콘솔로 이동하여 IAM.
이제 Roles -> Create role 버튼-
에 대한 권한 선택 S3, Lambda 과 Cloudfront. ARN 세부 정보를 사용하여 필요한 기능인 스토리지에만 권한을 부여하는 정책을 생성하는 것이 좋습니다.
아래에 설명 된 예에서 우리는 Full Access허가. 역할 이름에 대한 정책role for cloudfront위와 같이 추가됩니다. 역할 만들기를 클릭합니다.
lambda @ edge 및 cloudfront에 필요한 모든 정책은 위와 같습니다. cloudfront의 경우 지역 전체에서 URL을 사용할 수 있고 우리가 사용하는 서비스 간의 신뢰 관계가 필요하기 때문에 여기서 수행해야 할 추가 단계가 있습니다.
이제 생성 된 역할에 대해 Trust relationships 그림과 같이 탭-
클릭 Edit Trust Relationship 아래와 같이-
정책 문서를 표시합니다. 다른 서비스를 추가해야합니다.Principal -> Service우리가 사용할 계획입니다. 최종 신뢰 관계 정책 문서는 다음과 같습니다.
딸깍 하는 소리 Update Trust Policy 버튼을 눌러 변경 사항을 저장하십시오.
CloudFront 배포 생성
아래와 같이 CloudFront 서비스로 이동합니다.
CloudFront 서비스를 클릭하고 Create Distribution −
오리진 설정, 동작 설정 및 배포 설정
이러한 설정을 하나씩 살펴 보겠습니다.
Origin Settings
Origin 설정의 다양한 매개 변수는 다음과 같습니다.
Origin Domain Name −html 파일을 저장 한 S3 버킷의 이름입니다. 또한 원하는 폴더를 생성하여 S3 버킷에 이미지를 저장할 수도 있습니다.
Origin Path −여기에 파일이 저장된 폴더의 이름을 입력해야합니다. 현재이 폴더가 없으므로 지금은 비워 둡니다.
Origin ID −원본 도메인 이름을 선택하면 채워집니다. 선택에 따라 ID를 변경할 수 있습니다.
Restrict Bucket Access − 여기에서 우리는 옵션을 선택합니다 yes. 여기에서는 아무도 S3 버킷에 액세스 할 수 없도록 S3 버킷에 대한 보안이 필요합니다. 이 옵션에는 다음과 같은 추가 옵션이 있습니다.Origin Access Identity, Comment and Grant Read Permission on Bucket.
Origin Access Identity −우리는 새로운 신원 만들기 옵션을 사용했습니다. 기존 ID를 선택할 수도 있습니다. 그러면 CloudFront에서 S3 버킷에서 세부 정보를 읽는 데 사용되는 새 ID가 생성됩니다.
Grand Read Permission on Bucket − 이를 위해 옵션을 선택하십시오. Yes.
Origin Custom Headers − 지금은 세부 정보가 필요하지 않으므로 여기에서는 헤더를 비워 둡니다.
다음으로 토론하고 작성하겠습니다. Behaviour Settings Cloudront 배포 용-
이제 프로토콜 (https 또는 http)과 캐싱 옵션을 선택합니다. 기본 캐싱은 86400 또는 24 시간입니다. 요구 사항에 따라이 값을 변경할 수 있습니다.
딸깍 하는 소리 Object Caching(사용자 정의 옵션) 캐싱을 변경합니다. 당신이 사용할 수있는smooth streaming페이지에 동영상이있는 경우. 여기서는 기본 옵션을 계속 사용할 수 있습니다. 람다 함수가 생성되면 세부 정보가 추가됩니다.
배포 설정에 대한 자세한 내용은 다음과 같습니다.
배포 설정의 다양한 매개 변수가 아래에 설명되어 있습니다.
Price class −사용자 트래픽의 출처와 같은 세부 정보가 있습니다. 여기서는 기본 항목을 선택했습니다.Use All Edge Locations.
AWS WAF Web ACL −웹 애플리케이션 방화벽 선택을위한 것입니다. 여기에는 다음과 같은 옵션이 있습니다.None. 먼저 AWS에서 방화벽을 생성해야합니다. 사이트에 보안을 제공합니다.
Alternate Domain Names − 여기에서 도메인 이름을 지정할 수 있습니다.
SSL Certificate −여기에는 SSL 인증서에 대해 선택할 모든 세부 정보가 있습니다. 기본 설정을 유지합니다.
Default Root Object −여기에서는 S3에 업로드 한 파일 이름을 지정합니다. 이를 위해 기본적으로 표시 할 .html의 콘텐츠가 필요합니다.
나머지는 기본 설정을 유지합니다.
딸깍 하는 소리 Create Distribution 버튼을 눌러 배포를 추가합니다.
배포가 배포 됨으로 상태를 표시하는 데 약간의 시간이 걸립니다.
AWS Lambda 함수 생성
AWS 콘솔로 이동하여 Lambda 함수를 생성합니다.
AWS Lambda 코드에서 요청 헤더를 가져 와서 사용자 에이전트를 확인합니다. user-agent가 데스크톱에있는 경우 메시지를 표시하도록 응답을 변경합니다.“DESKTOP : Welcome to AWS Lambda with Cloudfront!” 장치의 경우 메시지가“MOBILE DEVICES : Hello from Lambda@Edge!”
해당 AWS Lambda 코드는 다음과 같습니다.
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);
};
이제 Lambda 함수를 저장합니다. 모든 리전에서 사용할 수 있도록 Lambda 함수를 게시해야합니다. 게시하려면 다음을 수행해야합니다.
작업 드롭 다운에서 Publish new version 아래와 같이-
당신이 클릭 Publish new version, 다음 화면이 표시됩니다-
이제 버전 설명을 입력하고 Publish. ARN은 아래와 같이 생성 된 AWS Lambda 함수의 버전을 표시합니다.
아래와 같이 생성 된 새 버전에 CloudFront 트리거를 추가합니다.
이제 CloudFront에 대한 구성 세부 정보를 추가합니다. CloudFront 이벤트에는Viewer request, Origin request, Origin response, 및 Viewer response.
다음으로 앞서 생성 한 CloudFront 배포를 선택합니다. 에서events, 우리는 Viewer request. 뷰어 요청에 따라 사용자 에이전트의 데스크톱 / 디바이스가 결정되고 응답이 변경됩니다. 다음으로 트리거 세부 정보를 추가합니다.
트리거가 추가되면 CloudFront의 배포가 배포 될 때까지 기다려야합니다.
상태가 다음으로 변경되면 Deployed, CloudFront URL을 테스트하고 브라우저에서 도메인 이름을 확인할 수 있습니다.
데스크톱 브라우저의 디스플레이는 다음과 같습니다. 여기에서는 뷰어 요청 이벤트에서 사용자 에이전트를 인쇄했습니다.
이것은 모바일 장치의 디스플레이입니다.
따라서 위의 예에서는 Lambda @ Edge를 사용하여 데스크톱 및 모바일 디바이스의 응답을 변경했습니다.
Cloudwatch를 사용한 모니터링 및 문제 해결
AWS Lambda에서 생성 된 함수는 Amazon CloudWatch에서 모니터링합니다. 트리거 될 때 Lambda 함수에 대한 모든 요청을 기록하는 데 도움이됩니다.
다음 코드는 함수 이름이 다음과 같이 AWS Lambda에 업로드됩니다. lambda and cloudwatch.
exports.handler = (event, context, callback) => {
// TODO implement
console.log("Lambda monitoring using amazon cloudwatch");
callback(null, 'Hello from Lambda');
};
함수가 테스트되거나 트리거되면 Cloudwatch에 항목이 표시되어야합니다. 이를 위해 AWS 서비스로 이동하여 CloudWatch를 클릭합니다.
왼쪽에서 로그를 선택하십시오.
클릭하면 Logs, 그것은 Log Groups계정에서 생성 된 AWS Lambda 함수의 AWS Lambda 함수를 선택하고 세부 정보를 확인하십시오. 여기서는 이름이있는 Lambda 함수를 참조합니다.lambdaandcloudwatch. Lambda 함수에 추가 된 로그는 다음과 같이 여기에 표시됩니다.
이제 Lambda 함수에 S3 트리거를 추가하고 아래와 같이 CloudWatch에서 로그 세부 정보를 확인하겠습니다.
아래 주어진 코드와 같이 업로드 된 파일과 버킷 이름을 표시하도록 AWS Lambda 코드를 업데이트하겠습니다.
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');
};
이제 파일 추가 s3storetestlambdaEventbucket 그림과 같이-
When the file is uploaded, AWS Lambda functions will get triggered and the console log messages from Lambda code are displayed in CloudWatch as shown below −
If there is any error, CloudWatch gives the error details as shown below −
Note that we have referred to the bucket name wrongly in AWS Lambda code as shown −
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');
};
The bucket name reference from the event is wrong. Thus, we should see an error displayed in CloudWatch as shown below −
CloudWatch Metrics
The details of the Lambda function execution can be seen in the metrics. Click Metrics displayed in the left side.
The graph details for the lambda function lambdaandcloudwatch are as shown below −
It gives details such as the duration for which the Lambda function is executed, number of times it is invoked and the errors from the Lambda function.
AWS Lambda – Additional Example
Till now, we have seen working of AWS Lambda with AWS services. Based on that knowledge, let us create a simple user registration form and post the data using API gateway to AWS Lambda. AWS Lambda will get the data from the event or theAPI gateway trigger and will add those details to DynamoDB table.
Example
Let us consider an example and perform the following functionalities on it −
Create DynamoDB Table
Create Form for User Registration
Create AWS Lambda and API gateway to send message to Phone using AWS SNS service
Create AWS Lambda and API gateway to POST form data and insert in DynamoDb table
Create AWS Lambda and API gateway to read data from Dynamodb table
Final Working of the User Registration Form
Create DynamoDB Table
The data entered will be stored in DynamodDB table. We will use API gateway to share data entered with AWS Lambda and later AWS Lambda will add the details in DynamoDB.
You can use the following details to create DynamodDB table in AWS console. First, go to AWS Service and click DynamoDB. Click Table 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;
}
}