0
votes

I am trying to define an ECs cluster deployment using CLoudFormation. So far I have been successful with defining and executing the template.

I decided to externalize the environment variables for the container by using the EnvironmentFile property in the AWS::ECS::TaskDefinition resource.

I think I'm using the correct syntax according to the documentation:

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html

However running the template in CF generates an error, telling me that the keys I'm using for the EnviromentFile definition are not permitted.

The most strange thing is that the stack update since to complete successfully and I can see the property when I look at the task definition in the console. Is this an error I should ignore or Is there a more correct way to define these property

CloudFormation snippet:

  TaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      Family: !Ref 'ServiceName'
      Cpu: !Ref 'ContainerCpu'
      Memory: !Ref 'ContainerMemory'
      NetworkMode: awsvpc
      RequiresCompatibilities:
        - FARGATE
      ExecutionRoleArn: !Ref 'ECSTaskExecutionRole'
      TaskRoleArn:
        Fn::If:
          - 'HasCustomRole'
          - !Ref 'Role'
          - !Ref "AWS::NoValue"
      ContainerDefinitions:
        - Name: !Ref 'ServiceName'
          Cpu: !Ref 'ContainerCpu'
          Memory: !Ref 'ContainerMemory'
          Image: !Ref 'ImageUrl'
          EnvironmentFiles:
            - value: !Ref EnvFile
              type: s3
          PortMappings:
            - ContainerPort: !Ref 'ContainerPort'
          LogConfiguration:
            LogDriver: awslogs
            Options:
              awslogs-group: !Ref ApplicationLogGroup
              awslogs-region: !Ref AWS::Region
              awslogs-stream-prefix: !Sub ${AWS::StackName}-ecs-service

Reported error:

Resource template validation failed for resource TaskDefinition as the template has invalid properties. 
Please refer to the resource documentation to fix the template. 
Properties validation failed for resource TaskDefinition with message:
#/ContainerDefinitions/0/EnvironmentFiles/0: extraneous key [type] is not permitted
#/ContainerDefinitions/0/EnvironmentFiles/0: extraneous key [value] is not permitted
1

1 Answers

1
votes

Ok, I'm answering this to close it. After trying several things I realize that the value and type property were in lover case and CloudFomation enforces that the properties need to start with Uppercase. making this change removed the error

EnvironmentFiles:
 - Value: !Ref EnvFile
   Type: s3