LoginSignup
1
1

More than 3 years have passed since last update.

[AWS CloudFormation] IoTルールの定義

Posted at

AWS::IoT::TopicRuleを使用したIoTルール定義

構文については公式ドキュメント参照
ただし、以下のように記載されているYAML例がYAMLではなくJSON
image.png

英語サイトの場合は、YAML例はちゃんとYAMLになっている
ただし、bool値の箇所が'true'と文字列になっている(ただしくはtrue)等の誤りがあったりするので注意
1.png

ということで以下が実際の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にしたRuleNameにしようと考えたが、
スタック名に-が入っていたためエラーとなった。

IoTルールの名前には_は使用できるが、-は使用できない。
逆にCloudFormationのスタック名には-は使用できるが、_は使用できない。
ちなみにS3バケット名はスタック名と同様、-は使用できるが、_は使用できない。

RuleNameは必須項目ではないので、自動生成される名前で逃げる手はあり。
自動生成されたルール名にはprefixとしてスタック名から-を除いた文字列が付く。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1