클라이언트-서버 모델
서버를 구축하는 방법
서버리스 컴퓨팅
AWS Lambda를 사용하면 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행할 수 있습니다.
작동 방식
사용사례
실시간 파일 처리
IoT 백엔드
다음 링크를 클릭하여, Eclipse 용 AWS Toolkit 설정 작업을 수행합니다.
javax/xml/bind/JAXBException발생한다. 따라서, Eclipse가 Java 8에서 동작하도록 설정을 변경해야 함.
AWS 자격 증명 설정을 아래 절차에 따라 진행해 주세요
다음 링크를 클릭하여 AWS Toolkit for Eclipse에 AWS 액세스 키를 추가합니다.
Amazon Simple Notification Service(SNS)란?
[AWS 실습] Amazon SNS용 액세스 설정 [생략 가능]
[AWS 실습] Amazon SNS 시작하기
*handleRequest 함수의 내용을 다음 코드로 바꿉니다.
final String AccessKey="chage-to-your-AccessKey";
final String SecretKey="chage-to-your-SecretKey";
final String topicArn="chage-to-your-topicArn";
@Override
public String handleRequest(Object input, Context context) {
context.getLogger().log("Input: " + input);
final String AccessKey="chage-to-your-accesskey";
final String SecretKey="change-to-your-secretkey";
final String topicArn="change-to-your-topicArn"; // 이전 단계에서 생성한 SNS 주제에 대한 Arn을 지정
BasicAWSCredentials awsCreds = new BasicAWSCredentials(AccessKey, SecretKey);
AmazonSNS sns = AmazonSNSClientBuilder.standard()
.withRegion(Regions.AP_NORTHEAST_2)
.withCredentials( new AWSStaticCredentialsProvider(awsCreds) )
.build();
String msg = "If you receive this message, publishing a message to an Amazon SNS topic works.";
String subject = ""+input;
PublishRequest publishRequest = new PublishRequest(topicArn, msg, subject);
PublishResult publishResponse = sns.publish(publishRequest);
// TODO: implement your handler
return "SNS completed from Lambda!";
}
Lambda에 함수를 업로드하려면, Eclipse 코드 창에서 마우스 오른쪽 버튼을 클릭하고 [AWS Lambda]와 [Upload function to AWS Lambda]를 차례대로 선택합니다.
[Select Target Lambda Function] 페이지에서 사용할 AWS 리전을 선택합니다. 이 리전은 Amazon S3 버킷에 대해 선택한 리전과 동일해야 합니다.
새 Lambda 함수 생성을 선택하고 함수 이름(예: SNSFunction)을 입력합니다.
[Next]를 선택합니다.
함수 구성 페이지에서 대상 Lambda 함수에 대한 설명을 입력하고 함수에서 사용할 IAM 역할 선택합니다.
Lambda 함수에 대해 새로운 Amazon S3 버킷을 생성하고 싶은 경우에는 함수 구성 페이지로 이동하여 함수 코드에 대한 S3 버킷 섹션에서 생성을 선택합니다. 버킷 생성 대화 상자에 버킷 이름을 입력합니다.
Finish를 선택하여 Lambda 함수를 AWS에 업로드합니다.
Lambda 함수를 호출하려면, Eclipse 코드 창에서 마우스 오른쪽 버튼을 클릭하고 AWS Lambda를 선택한 후 Run Function on AWS Lambda(AWS Lambda에서 함수 실행)를 선택합니다.
입력 상자에서 SNS Test
와 같이 유효한 JSON 문자열을 입력합니다.
Invoke를 선택하여 Lambda 함수에 입력 데이터를 전송합니다.
SNS 주제에 구독중인 이메일로 메시지가 도착했는지 확인한다.
이번 실습에서는 수집된 온도가 25도를 넘어갈 경우, AWS SNS를 통해 경고 이메일을 전송하는 IoT 백엔드를 AWS IoT Core, AWS Lambda, Amazon SNS 서비스를 이용하여 구축한다.
IoT 서비스 아키텍처
Amazon SNS 시작하기 실습에서 진행한 방식대로 이메일을 위한 SNS 주제를 생성한다.
다음 예와 같은 주제 ARN을 클립보드에 복사합니다.
arn:aws:sns:ap-northeast-2:123456789012:temerature_warning_topic
생성한 주제에 대한 구독을 생성합니다.
<dependencies> 태그 안에 gson에 대한 의존성을 추가합니다.
<dependencies>
...
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>
</dependencies>
Eclipse 프로젝트 탐색기를 사용하여 MonitoringLambda 프로젝트에서 Monitoring.java를 엽니다.
*handleRequest 함수의 내용을 다음 코드로 바꿉니다.
final String AccessKey="chage-to-your-AccessKey";
final String SecretKey="chage-to-your-SecretKey";
final String topicArn="chage-to-your-topicArn";
@Override
public String handleRequest(Object input, Context context) {
context.getLogger().log("Input: " + input);
String json = ""+input;
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(json);
JsonElement state = element.getAsJsonObject().get("state");
JsonElement reported = state.getAsJsonObject().get("reported");
String temperature = reported.getAsJsonObject().get("temperature").getAsString();
double temp = Double.valueOf(temperature);
final String AccessKey="chage-to-your-AccessKey";
final String SecretKey="chage-to-your-SecretKey";
final String topicArn="chage-to-your-topicArn";
BasicAWSCredentials awsCreds = new BasicAWSCredentials(AccessKey, SecretKey);
AmazonSNS sns = AmazonSNSClientBuilder.standard()
.withRegion(Regions.AP_NORTHEAST_2)
.withCredentials( new AWSStaticCredentialsProvider(awsCreds) )
.build();
final String msg = "*Temperature Critical*\n" + "Your device temperature is " + temp + "C";
final String subject = "Critical Warning";
if (temp >= 26.0) {
PublishRequest publishRequest = new PublishRequest(topicArn, msg, subject);
PublishResult publishResponse = sns.publish(publishRequest);
}
return subject+ "temperature = " + temperature + "!";
}
Lambda에 함수를 업로드하려면, Eclipse 코드 창에서 마우스 오른쪽 버튼을 클릭하고 [AWS Lambda]와 [Upload function to AWS Lambda]를 차례대로 선택합니다.
[Select Target Lambda Function] 페이지에서 사용할 AWS 리전을 선택합니다. 이 리전은 Amazon S3 버킷에 대해 선택한 리전과 동일해야 합니다.
새 Lambda 함수 생성을 선택하고 함수 이름(예: MonitoringFunction)을 입력합니다.
[Next]를 선택합니다.
함수 구성 페이지에서 대상 Lambda 함수에 대한 설명을 입력하고 함수에서 사용할 IAM 역할 선택합니다.
Lambda 함수에 대해 새로운 Amazon S3 버킷을 생성하고 싶은 경우에는 함수 구성 페이지로 이동하여 함수 코드에 대한 S3 버킷 섹션에서 생성을 선택합니다. 버킷 생성 대화 상자에 버킷 이름을 입력합니다.
Finish를 선택하여 Lambda 함수를 AWS에 업로드합니다.
작성된 Lambda함수가 정상적으로 동작하는 지를 테스트해 보기 위해서 다음 절차를 수행합니다.
입력 상자에서 다음과 같은 JSON 문자열을 입력합니다.
{
"state": {
"reported": {
"temperature": "27.0", "LED":"OFF"
}
}
}
Invoke 버튼을 선택하여 Console 창에 다음과 같은 메시지가 출력되는 지 확인하고, SNS 주제에 구독한 이메일로 메시지가 수신되었는지를 확인한다.
...
================== FUNCTION OUTPUT ===================
"Critical Warning temperature = 27.0!"
================== FUNCTION LOG OUTPUT ===============
...
SQL 문 구성 페이지에서 'SQL 문'란에 다음 쿼리를 입력하고, 다음 버튼을 클릭합니다.
SELECT * FROM '$aws/things/MyMKRWiFi1010/shadow/update/accepted'
[규칙 작업 연결] 페이지의 [규칙 작업]항목에서 작업 선택아래에서 Lambda를 선택한 다음, Lambda 함수에서 (MonitoringFunction)를 선택합니다.
규칙 작업 추가를 선택합니다.