AWS Severless IoT 14 – Iot-Lambda

AWS Severless IoT에 대해 알아봅니다.

작성자

홍세민

홍세민

MarcusHong

AWS IOT

AWS IOT는 사물 인터넷을 위한 서비스이다. 사물 인터넷이라고 하면 서버와 통신하는 버튼, 기기 등을 생각할 수 있다. 하지만 모바일 디바이스 또한 IOT의 일종이다. AWS에서는 IOT SDK를 사용하면, IOS, Android, Web에서 Web socket을 사용할 수 있으므로, 이를 통해서 백엔드와 프론트엔드가 소켓 통신을 할 수 있다.

IOT Rule

Lambda 함수에서는 Web socket 채널에 publish 되는 이벤트를 트리거할 수 있는 옵션이 있다. SQL 구문과 상당히 유사하다. (자세히 보기) 아래는 AWS SAM으로 Iot Rule을 만들고 Lambda 함수에서 채널에 publish 된 메세지를 데이터 베이스에 저장하는 기능을 구현한 예제이다.

Cloudformation

Resources:
  ChatHandler:
    Type: 'AWS::Serverless::Function'
    Properties:
      CodeUri: src
      Handler: lambda/iot.chatHandler
      Runtime: nodejs6.10
      Role:
        'Fn::GetAtt':
          - BasicExecutionRole
          - Arn
      Timeout: 30
      VpcConfig:
        SecurityGroupIds:
          - Ref: VPCLambdaSecurityGroup
        SubnetIds:
          - Ref: PublicSubnetA
          - Ref: PublicSubnetB
      Events:
        Iot:
          Type: IoTRule
          Properties:
            AwsIotSqlVersion: '2016-03-23'
            Sql: >-
              SELECT *, topic(4) as chatId, clientid() as userId FROM
              'sample/dev/chat/+'

  ChatHandlerLogGroup:
    Type: 'AWS::Logs::LogGroup'
    DependsOn: ChatHandler
    Properties:
      RetentionInDays: 14
      LogGroupName:
        'Fn::Join':
          - ''
          - - /aws/lambda/
            - Ref: ChatHandler

Lambda Function

module.exports.chatHandler = async (event, context, callback) => {
  try {
    if (event.chatId) {
      event.chatId = parseInt(event.chatId)
      const result = await Message.addMessage(event) // pseudo code
      callback(null, result)
    }
    else {
      callback(result)
    }
  }
  catch (err) {
    callback(err)
  }
}

주의점

  • 여기서는 express.js를 쓰지 않으므로, callback으로 처리를 해야한다는 것을 명심하자.

Tags : aws 

comments powered by Disqus