AWSTemplateFormatVersion: 2010-09-09
Resources:
  Queue:
    Type: 'AWS::SQS::Queue'
    Properties:
      MessageRetentionPeriod: 300
      SqsManagedSseEnabled: true
  QueuePolicy:
    Type: 'AWS::SQS::QueuePolicy'
    Properties:
      Queues:
        - !Ref Queue
      PolicyDocument:
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - events.amazonaws.com
                - sqs.amazonaws.com
            Action: 'sqs:SendMessage'
            Resource: !GetAtt Queue.Arn
  ASGTermRule:
    Type: 'AWS::Events::Rule'
    Properties:
      EventPattern:
        source:
          - aws.autoscaling
        detail-type:
          - EC2 Instance-terminate Lifecycle Action
      Targets:
        - Id: 1
          Arn: !GetAtt Queue.Arn
  ScheduledChangeRule:
    Type: 'AWS::Events::Rule'
    Properties:
      EventPattern:
        source:
          - aws.health
        detail-type:
          - AWS Health Event
        detail:
          service:
            - EC2
          eventTypeCategory:
            - scheduledChange
      Targets:
        - Id: 1
          Arn: !GetAtt Queue.Arn
  SpotTermRule:
    Type: 'AWS::Events::Rule'
    Properties:
      EventPattern:
        source:
          - aws.ec2
        detail-type:
          - EC2 Spot Instance Interruption Warning
      Targets:
        - Id: 1
          Arn: !GetAtt Queue.Arn
  RebalanceRule:
    Type: 'AWS::Events::Rule'
    Properties:
      EventPattern:
        source:
          - aws.ec2
        detail-type:
          - EC2 Instance Rebalance Recommendation
      Targets:
        - Id: 1
          Arn: !GetAtt Queue.Arn
  InstanceStateChangeRule:
    Type: 'AWS::Events::Rule'
    Properties:
      EventPattern:
        source:
          - aws.ec2
        detail-type:
          - EC2 Instance State-change Notification
      Targets:
        - Id: 1
          Arn: !GetAtt Queue.Arn
Outputs:
  QueueURL:
    Description: Queue url for AWS NTH controller
    Value: !Ref Queue