API Gateway에서 받은 REST를 AWS IoT에 게시하는 방법

6648 단어 APIGatewayawsIoTAWS

하고 싶은 일



HTTP REST 하지만 말할 수 없는 앱의 데이터에서도 AWS IoT에 Publish하고 싶다!

개요



AWS IoT에 Publish하는 것은 MQTT뿐만 아니라 HTTP REST에서도 가능

Clients can publish by sending a POST message to <AWS IoT Endpoint>/topics/<url_encoded_topic_name>?qos=1
반면에 API Gateway는 AWS Service Proxy에서 AWS 서비스에 REST 요청을 프록시 할 수 있습니다.

  • Amazon API Gateway에서 AWS Service Proxy를 사용하여 DynamoDB에 액세스 | Developers.IO
  • Amazon API Gateway에서 AWS Service Proxy 사용

  • 이를 결합하면 자체 REST 클라이언트의 요청을 AWS IoT로 데이터를 보낼 수 있습니다.



    이론보다 코드


  • IAM 정책 만들기
  • IAM 역할 만들기
  • API 게이트웨이에서 API 끝점 생성

  • IAM 정책 생성



    정책
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "Stmt1460435015000",
                "Effect": "Allow",
                "Action": [
                    "iot:Publish"
                ],
                "Resource": [
                    "*"
                ]
            }
        ]
    }
    

    iot : publish가 있으면 OK입니다.

    IAM 역할 만들기 및 정책 연결


    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Sid": "",
                "Principal": {
                    "Service": "apigateway.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    

    위와 같이 신뢰할 수있는 엔티티의 ID에 apigateway.amazonaws.com이 지정되면 OK입니다.

    또한 이 역할에 앞서 만든 정책을 연결하세요.

    Endpoint 만들기



    Integration Request를 아래와 같이 만들면


    품목
    설정 내용


    통합 유형
    AWS Service Proxy

    AWS Region

    AWS Service
    Iot Data

    AWS Subdomain
    <aws iot describe-endpoint로 표시되는 XXXXX.iot.REGION.amazonaws.com의 XXXXX 부분>

    HTTP method
    POST

    Action Type
    Path override 으로 topics/{tp_lv1}/{tp_lv2}
    Execution role
    <앞에서 만든 역할의 ARN>

    Credentials cache
    Do not add caller credentials to cache key


    화면에 이런 느낌이



    해설과 포인트



    포인트는 Action Type 을 Path override 로 하는 곳에 있습니다
    이렇게 하면 API Gateway에서 AWS의 서비스로 HTTP REST 요청이 전송됩니다.

    또한 최종적으로 호출되는 URI는 <AWS Subdomain>.iot.<AWS Region>.amazonaws.com/<Path override>?<URL Query String Parameters>입니다.

    URL Path Parameters;

    Path override의 {param_name}를 Mapped from으로 바꿉니다.
    또한 Path override의 {...}은 URL Path Parameters로 대체됩니다.

    아래의 예라면 결국 A33XXXXXXXXXT.iot.ap-northeast1.amazonaws.com/topics/sensor/geo?qos=1이 호출되고 역할에 할당 된 정책 (iot : publish)의 권한 사용하여 게시 할 수 있습니다.

    후기



    Content-Type: application/octet-stream 요청도 API Gateway $util와 매핑을 사용하여 JSON화할 수 있으므로 AWS IoT를 통해 원하는 서비스를 호출할 수 있습니다.

    ※Amazon API Gateway에서 바이너리 데이터를 조사했습니다.

    Lambda를 그대로 사용하면? 라는 목소리도 들릴 것 같지만.

    좋은 웹페이지 즐겨찾기