[AWS CloudFormation] IoT 규칙 정의

4814 단어 samCloudFormationAWS

AWS::IoT::TopicRule을 사용한 IoT 규칙 정의



구문에 대해서는 공식 문서 참조
다만, 이하와 같이 기재되어 있다 YAML 예가 YAML

영어 사이트의 경우는 JSON 예는 제대로 YAML단, bool 값의 개소가 YAML 라고 문자열로 되어 있다(대개는 'true'

그래서 다음은 실제 IoT 규칙 정의

  # IoTルール
  EdgeRecvMessageTopicRule:
    Type: AWS::IoT::TopicRule
    Properties:
      TopicRulePayload:
        RuleDisabled: false
        Sql: SELECT * FROM '+/info'
        Actions: # IoTルールに合致した場合に実行するアクション(今回はLambda)
          - Lambda:
              FunctionArn: !GetAtt EdgeRecvMessageHook.Arn

  # IoTルールに合致した場合にフックされるLambda定義
  EdgeRecvMessageHook:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: !Sub '${StackName}_EdgeRecvMessageHook'
      CodeUri: Edge-Recv-Message/
      Handler: function.lambda_handler
      Runtime: python3.8

  # IoTからLambdaを実行する権限付与定義
  EdgeRecvMessageHookPermission:
      Type: AWS::Lambda::Permission
      Properties:
        Action: lambda:InvokeFunction
        FunctionName: !GetAtt EdgeRecvMessageHook.Arn 
        Principal: iot.amazonaws.com

IoT 규칙의 이름 정보


  EdgeRecvMessageTopicRule:
    Type: AWS::IoT::TopicRule
    Properties:
      RuleName:
        !Sub '${StackName}_EdgeRecvMessage'
      TopicRulePayload:
        RuleDisabled: false
        Sql: SELECT * FROM '+/info'
        Actions:
          - Lambda:
              FunctionArn: !GetAtt EdgeRecvMessageHook.Arn

위와 같이 스택 이름을 prefix로 했다 true 로 하려고 생각했지만,
스택 이름에 RuleName가 포함되어 있기 때문에 오류가 발생했습니다.

IoT 규칙의 이름에는 -를 사용할 수 있지만 _는 사용할 수 없습니다.
반대로 CloudFormation의 스택 이름에는 -를 사용할 수 있지만 -는 사용할 수 없습니다.
덧붙여서 S3 버킷명은 스택명과 같이, _ (은)는 사용할 수 있지만, - (은)는 사용할 수 없다.
_ 는 필수 항목이 아니기 때문에, 자동 생성되는 이름으로 도망치는 손은 있어.
자동 생성된 룰명에는 prefix로서 스택명으로부터 RuleName (을)를 제외한 캐릭터 라인이 붙는다.

좋은 웹페이지 즐겨찾기