Search code examples
amazon-ecsaws-fargate

AWS ECS Fargate service deployment is failing "Invalid request provided: CreateService error: Container Port is missing "


I am deploying my containerized spring boot app on ECS Fargate using cloud formation templates. Note I am using internal ALB with a Target group of type IP.

My TAskDefinition is good but the service stack gives the below error while creating the stack.

Resource handler returned message: "Invalid request provided: CreateService error: Container Port is missing (Service: AmazonECS; Status Code: 400; Error Code: InvalidParameterException; Request ID: XXX-XXX-XXX; Proxy: null)" (RequestToken: xxx-xxx-xxx, HandlerErrorCode: InvalidRequest)

Does anyone know what this error says? I have specified a container with port in the task definition

My template

AWSTemplateFormatVersion: "2010-09-09"
Description: "CloudFormation template for creating a task definition"


Parameters:
  taskDefName:
    Type: String
    Default: 'task-def'
  springActiveProfile:
    Type: String
    Default: 'Dev'
  appDefaultPort:
    Type: Number
    Default: 3070
  heapMemLimit:
    Type: String
    Default: "-Xms512M -Xmx512M"    

Resources:
  MyTaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      RequiresCompatibilities:
        - "FARGATE"
      Family: !Ref taskDefName
      NetworkMode: "awsvpc"
      RuntimePlatform:
        CpuArchitecture: X86_64
        OperatingSystemFamily: LINUX
      ExecutionRoleArn: "xxxxx"
      Cpu: 0.25vCPU
      Memory: 0.5GB
      ContainerDefinitions:
        - Name: "container1"
          Image: xxx
          MemoryReservation: 128
          Memory: 512
          PortMappings:
            - ContainerPort: 3070
              Protocol: tcp
          LogConfiguration:
            LogDriver: awslogs
            Options:
              awslogs-group: 'ecs'
              awslogs-region: us-east-1
              awslogs-stream-prefix: 'spec'  

  OneService:
    Type: AWS::ECS::Service
    Properties:
      LaunchType: FARGATE
      TaskDefinition: !Ref MyTaskDefinition
      Cluster: "clusterName"
      DesiredCount: 2
      DeploymentConfiguration:
        MaximumPercent: 100
        MinimumHealthyPercent: 70
      NetworkConfiguration:
        AwsvpcConfiguration:
          Subnets:
            - subnet-xxx
            - subnet-xxx
          SecurityGroups: 
            - sg-xxx
      LoadBalancers:
        - ContainerName: container1
        - ContainerPort: 3070        
        - TargetGroupArn: arn:xxx

Solution

  • This was due to the YAML format. Incorrect

    LoadBalancers: - ContainerName: container1 - ContainerPort: 3070
    - TargetGroupArn: arn:xxx

    Correct

    LoadBalancers: - ContainerName: container1 ContainerPort: 3070
    TargetGroupArn: arn:xxx