Use SQS parameter message group id for sqs targets in events rule.
diff --git a/localstack/services/events/events_listener.py b/localstack/services/events/events_listener.py
index c1bf4cb00d453..8076d20bcc904 100644
--- a/localstack/services/events/events_listener.py
+++ b/localstack/services/events/events_listener.py
@@ -60,7 +60,8 @@ def func(*args):
         for target in targets:
             arn = target.get('Arn')
             event = json.loads(target.get('Input') or '{}')
-            aws_stack.send_event_to_target(arn, event)
+            attr = aws_stack.get_events_target_attributes(target)
+            aws_stack.send_event_to_target(arn, event, target_attributes=attr)
     return func
 
 
diff --git a/localstack/utils/aws/aws_stack.py b/localstack/utils/aws/aws_stack.py
index e5fa262d8c815..d97543e14ef6a 100644
--- a/localstack/utils/aws/aws_stack.py
+++ b/localstack/utils/aws/aws_stack.py
@@ -524,7 +524,7 @@ def _resource_arn(name, pattern, account_id=None, region_name=None):
     return pattern % (region_name, account_id, name)
 
 
-def send_event_to_target(arn, event):
+def send_event_to_target(arn, event, target_attributes=None):
     if ':lambda:' in arn:
         from localstack.services.awslambda import lambda_api
         lambda_api.run_lambda(event=event, context={}, func_arn=arn)
@@ -536,7 +536,10 @@ def send_event_to_target(arn, event):
     elif ':sqs:' in arn:
         sqs_client = connect_to_service('sqs')
         queue_url = get_sqs_queue_url(arn)
-        sqs_client.send_message(QueueUrl=queue_url, MessageBody=json.dumps(event))
+
+        msg_group_id = (target_attributes or {}).get('MessageGroupId')
+        kwargs = {'MessageGroupId': msg_group_id} if msg_group_id else {}
+        sqs_client.send_message(QueueUrl=queue_url, MessageBody=json.dumps(event), **kwargs)
 
     elif ':states' in arn:
         stepfunctions_client = connect_to_service('stepfunctions')
@@ -546,6 +549,12 @@ def send_event_to_target(arn, event):
         LOG.info('Unsupported Events rule target ARN "%s"' % arn)
 
 
+def get_events_target_attributes(target):
+    # added for sqs, if needed can be moved to an if else
+    # block for multiple targets
+    return target.get('SqsParameters')
+
+
 def create_sqs_queue(queue_name, env=None):
     env = get_environment(env)
     # queue
diff --git a/tests/integration/test_events.py b/tests/integration/test_events.py
index 53aa917bbced1..c697f98036967 100644
--- a/tests/integration/test_events.py
+++ b/tests/integration/test_events.py
@@ -349,6 +349,7 @@ def forward_request(self, method, path, data, headers):
 
         topic_name = 'topic-{}'.format(short_uid())
         queue_name = 'queue-{}'.format(short_uid())
+        fifo_queue_name = 'queue-{}.fifo'.format(short_uid())
         rule_name = 'rule-{}'.format(short_uid())
         endpoint = '{}://{}:{}'.format(get_service_protocol(), config.LOCALSTACK_HOSTNAME, local_port)
         sm_role_arn = aws_stack.role_arn('sfn_role')
@@ -356,6 +357,7 @@ def forward_request(self, method, path, data, headers):
         topic_target_id = 'target-{}'.format(short_uid())
         sm_target_id = 'target-{}'.format(short_uid())
         queue_target_id = 'target-{}'.format(short_uid())
+        fifo_queue_target_id = 'target-{}'.format(short_uid())
 
         events = []
         state_machine_definition = """
@@ -381,7 +383,10 @@ def forward_request(self, method, path, data, headers):
         self.sns_client.subscribe(TopicArn=topic_arn, Protocol='http', Endpoint=endpoint)
 
         queue_url = self.sqs_client.create_queue(QueueName=queue_name)['QueueUrl']
+        fifo_queue_url = self.sqs_client.create_queue(
+            QueueName=fifo_queue_name, Attributes={'FifoQueue': 'true'})['QueueUrl']
         queue_arn = aws_stack.sqs_queue_arn(queue_name)
+        fifo_queue_arn = aws_stack.sqs_queue_arn(fifo_queue_name)
 
         event = {
             'env': 'testing'
@@ -409,11 +414,20 @@ def forward_request(self, method, path, data, headers):
                     'Id': queue_target_id,
                     'Arn': queue_arn,
                     'Input': json.dumps(event)
+                },
+                {
+                    'Id': fifo_queue_target_id,
+                    'Arn': fifo_queue_arn,
+                    'Input': json.dumps(event),
+                    'SqsParameters': {
+                        'MessageGroupId': '123'
+                    }
+
                 }
             ]
         )
 
-        def received(q_url):
+        def received(q_urls):
             # state machine got executed
             executions = self.sfn_client.list_executions(stateMachineArn=state_machine_arn)['executions']
             self.assertGreaterEqual(len(executions), 1)
@@ -427,16 +441,22 @@ def received(q_url):
             execution_arn = executions[0]['executionArn']
             execution_input = self.sfn_client.describe_execution(executionArn=execution_arn)['input']
 
+            all_msgs = []
             # get message from queue
-            msgs = self.sqs_client.receive_message(QueueUrl=q_url).get('Messages', [])
-            self.assertGreaterEqual(len(msgs), 1)
+            for url in q_urls:
+                msgs = self.sqs_client.receive_message(QueueUrl=url).get('Messages', [])
+                self.assertGreaterEqual(len(msgs), 1)
+                all_msgs.append(msgs[0])
 
-            return execution_input, notifications[0], msgs[0]
+            return execution_input, notifications[0], all_msgs
 
-        execution_input, notification, msg_received = retry(received, retries=5, sleep=15, q_url=queue_url)
+        execution_input, notification, msgs_received = retry(
+            received, retries=5, sleep=15, q_urls=[queue_url, fifo_queue_url]
+        )
         self.assertEqual(json.loads(notification), event)
         self.assertEqual(json.loads(execution_input), event)
-        self.assertEqual(json.loads(msg_received['Body']), event)
+        for msg_received in msgs_received:
+            self.assertEqual(json.loads(msg_received['Body']), event)
 
         proxy.stop()
 

- addresses https://github.com/localstack/localstack/issues/3402
