### Apache Airflow version

2.1.3 (latest released)

### Operating System

Linux

### Versions of Apache Airflow Providers

apache-airflow-providers-amazon==1.4.0
apache-airflow-providers-docker==1.2.0
apache-airflow-providers-ftp==1.1.0
apache-airflow-providers-http==1.1.1
apache-airflow-providers-imap==1.0.1
apache-airflow-providers-postgres==2.0.0
apache-airflow-providers-sqlite==1.0.2

### Deployment

Other

### Deployment details

_No response_

### What happened

[2021-09-08 00:30:00,035] {taskinstance.py:1462} ERROR - Task failed with exception
Traceback (most recent call last):
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/models/taskinstance.py", line 1164, in _run_raw_task
    self._prepare_and_execute_task_with_callbacks(context, task)
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/models/taskinstance.py", line 1282, in _prepare_and_execute_task_with_callbacks
    result = self._execute_task(context, task_copy)
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/models/taskinstance.py", line 1312, in _execute_task
    result = task_copy.execute(context=context)
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/utils/session.py", line 70, in wrapper
    return func(*args, session=session, **kwargs)
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/providers/amazon/aws/operators/ecs.py", line 230, in execute
    self._check_success_task()
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/providers/amazon/aws/operators/ecs.py", line 380, in _check_success_task
    if container.get('lastStatus') == 'STOPPED' and container['exitCode'] != 0:
KeyError: 'exitCode'

### What you expected to happen

I Expect to see the error reason reported by the ECS operator not the KeyError when the code tries to access the exit code from the container.

Maybe something like:
` if container.get('lastStatus') == 'STOPPED' and container.get('exitCode', 1) != 0:`
to avoid the exception and some error handling that would make is easier to find the reason the container failed.
currently we have to search through the big huge info log with the Failed INFO. 

### How to reproduce

Run ECS Task with bad creds to pull docker image from gitlab repo

### Anything else

_No response_

### Are you willing to submit PR?

- [X] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

tests/providers/amazon/aws/operators/test_ecs.py
client_mock = mock.Mock()
        self.ecs.arn = 'arn'
        self.ecs.client = client_mock
        client_mock.describe_tasks.return_value = {
            'tasks': [{'containers': [{'name': 'foo', 'lastStatus': 'STOPPED', 'exitCode': 1}]}]
        }
        task_log_fetcher = mock.Mock()
        self.ecs.task_log_fetcher = task_log_fetcher
        task_log_fetcher.get_last_log_messages.return_value = ["1", "2", "3", "4", "5"]
        with pytest.raises(Exception) as ctx:
            self.ecs._check_success_task()
        assert str(ctx.value) == (
            "This task is not in success state - last 10 logs from Cloudwatch:\n1\n2\n3\n4\n5"
        )
        client_mock.describe_tasks.assert_called_once_with(cluster='c', tasks=['arn'])
    def test_check_success_tasks_raises_cloudwatch_logs_empty(self):