Repository: getmoto/moto

Issue:
`mock_ecs.describe_container_instances` missing value `registeredAt`
The [official ECS documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ecs.html#ECS.Client.describe_container_instances) states that the response of `client.describe_container_instances()` contains :
>registeredAt (datetime) --
The Unix timestamp for when the container instance was registered.

But as far as I know, moto mock of that call doesn't.

### to Reproduce:
Inspired from [`test_run_task()`](https://github.com/spulec/moto/blob/a668349a70ffce571c74c77074e6270f3cb59dd7/tests/test_ecs/test_ecs_boto3.py#L1087)

```python 
@mock_ec2
@mock_ecs
def test():
    client = boto3.client("ecs", region_name="us-east-1")
    ec2 = boto3.resource("ec2", region_name="us-east-1")

    test_cluster_name = "test_ecs_cluster"

    _ = client.create_cluster(clusterName=test_cluster_name)

    test_instance = ec2.create_instances(
        ImageId="ami-1234abcd", MinCount=1, MaxCount=1
    )[0]

    instance_id_document = json.dumps(
        ec2_utils.generate_instance_identity_document(test_instance)
    )

    response = client.register_container_instance(
        cluster=test_cluster_name, instanceIdentityDocument=instance_id_document
    )

    _ = client.register_task_definition(
        family="test_ecs_task",
        containerDefinitions=[
            {
                "name": "hello_world",
                "image": "docker/hello-world:latest",
                "cpu": 1024,
                "memory": 400,
                "essential": True,
                "environment": [
                    {"name": "AWS_ACCESS_KEY_ID", "value": "SOME_ACCESS_KEY"}
                ],
                "logConfiguration": {"logDriver": "json-file"},
            }
        ],
    )
    response = client.run_task(
        cluster="test_ecs_cluster",
        overrides={},
        taskDefinition="test_ecs_task",
        count=2,
        startedBy="moto",
    )
    node = self.ecs.describe_container_instances(
        cluster="test_ecs_cluster",
        containerInstances=self.ecs.list_container_instances(cluster="test_ecs_cluster", status="ACTIVE")["containerInstanceArns"],
    )
    print(node["containerInstances"][0]["registeredAt"]) #KeyError: 'registeredAt'
```
Logs : 
```
Traceback (most recent call last):
  File "/path/to/python3.6/site-packages/moto/core/models.py", line 100, in wrapper
    result = func(*args, **kwargs)
  File "/path/to/python3.6/site-packages/moto/core/models.py", line 100, in wrapper
    result = func(*args, **kwargs)
  File "/path/topython3.6/site-packages/moto/core/models.py", line 100, in wrapper
    result = func(*args, **kwargs)
  File "/path/to/my/file.py", line 147, in test_test
    print(node["containerInstances"][0]["registeredAt"])
KeyError: 'registeredAt'
```

moto version : 1.3.16

This attribute is quite important to us, because we want to have a script that shuts down instances if they are "too old" or something like that, and properly testing that script is key. 


Discussion:
Thanks for raising this @Ellynas - marking it as an enhancement.

Resolving patch:
diff --git a/moto/ecs/models.py b/moto/ecs/models.py
--- a/moto/ecs/models.py
+++ b/moto/ecs/models.py
@@ -1,18 +1,18 @@
 from __future__ import unicode_literals
+
 import re
 import uuid
+from copy import copy
 from datetime import datetime
 from random import random, randint
 
 import pytz
 from boto3 import Session
 
-from moto.core.exceptions import JsonRESTError
 from moto.core import BaseBackend, BaseModel, CloudFormationModel
+from moto.core.exceptions import JsonRESTError
 from moto.core.utils import unix_time
 from moto.ec2 import ec2_backends
-from copy import copy
-
 from .exceptions import (
     ServiceNotFoundException,
     TaskDefinitionNotFoundException,
@@ -481,6 +481,7 @@ def __init__(self, ec2_instance_id, region_name):
             if ec2_instance.platform == "windows"
             else "linux",  # options are windows and linux, linux is default
         }
+        self.registered_at = datetime.now(pytz.utc)
 
     @property
     def response_object(self):
@@ -489,6 +490,10 @@ def response_object(self):
             self._format_attribute(name, value)
             for name, value in response_object["attributes"].items()
         ]
+        if isinstance(response_object["registeredAt"], datetime):
+            response_object["registeredAt"] = unix_time(
+                response_object["registeredAt"].replace(tzinfo=None)
+            )
         return response_object
 
     def _format_attribute(self, name, value):


Test patch:
diff --git a/tests/test_ecs/test_ecs_boto3.py b/tests/test_ecs/test_ecs_boto3.py
--- a/tests/test_ecs/test_ecs_boto3.py
+++ b/tests/test_ecs/test_ecs_boto3.py
@@ -950,6 +950,7 @@ def test_describe_container_instances():
     for instance in response["containerInstances"]:
         instance.keys().should.contain("runningTasksCount")
         instance.keys().should.contain("pendingTasksCount")
+        instance["registeredAt"].should.be.a("datetime.datetime")
 
     with assert_raises(ClientError) as e:
         ecs_client.describe_container_instances(