AWS CodePipeline Fails: "Exception while trying to read the task definition artifact filef rom: SourceArtifact"

Viewed 1009

I have an AWS CodePipeline setup that is meant to pull from CodeCommit, use CodeBuild, and then do a Blue/Green deployment via CodeDeploy.

I believe it to be configured correctly (will discuss specifics below), but every time I get to the "Deploy" stage, I get the error message:

Invalid action configuration: Exception while trying to read the task definition artifact file from: SourceArtifact

I've looked through other SO answers, and I've checked the following:

  • SourceArtifact is well under 3MB in size.
  • The files taskdef.json and appspec.yml are both inside the SourceArtifact (these are the names as configured in my CodePipeline definition) which is generated in the first stage of the CodePipeline.
  • The artifact is able to be decrypted via KMS key as the CodePipeline is configured to make use of one (since SourceArtifact comes from a different account) and the CodeBuild step is able to successfully complete (it creates a Docker image and saves to ECR).
  • I can see no syntax errors of any kind in taskdef.json or appspec.yml as they're essentially copies from working versions of those files from different projects. The placeholder names remain the same.

Checking CodeTrail and checking list-action-executions (via CLI) don't show any additional error information.

Here's the "Deploy" stage config (as entered via a Terraform script):

 stage {
      name = "Deploy"

      action {
        name = "Deploy"
        category = "Deploy"
        owner = "AWS"
        provider = "CodeDeployToECS"
        version = "1"
        input_artifacts = ["SourceArtifact", var.charting_artifact_name]

        configuration = {
          ApplicationName = aws_codedeploy_app.charting_codedeploy.name
          DeploymentGroupName = aws_codedeploy_app.charting_codedeploy.name

          TaskDefinitionTemplateArtifact = "SourceArtifact"
          AppSpecTemplateArtifact = "SourceArtifact"

          TaskDefinitionTemplatePath = "taskdef.json"
          AppSpecTemplatePath = "appspec.yml"

          Image1ArtifactName = var.charting_artifact_name
          Image1ContainerName = "IMAGE1_NAME"
        }
      }
    }

taskdef.json (account numbers redacted):

{
  "executionRoleArn": "arn:aws:iam::<ACCOUNT_NUM>:role/fargate-iam-role",
  "containerDefinitions": [
    {
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/sentiment-logs",
          "awslogs-region": "us-east-1",
          "awslogs-stream-prefix": "sentiment-charting"
        }
      },
      "portMappings": [
        {
          "hostPort": 80,
          "protocol": "tcp",
          "containerPort": 80
        }
      ],
      "cpu": 0,
      "environment": [],
      "mountPoints": [],
      "volumesFrom": [],
      "image": "<IMAGE1_NAME>",
      "name": "sentiment-charting"
    }
  ],
  "placementConstraints": [],
  "memory": "4096",
  "compatibilities": [
    "EC2",
    "FARGATE"
  ],
  "taskDefinitionArn": "arn:aws:ecs:us-east-1:<ACCOUNT_NUM>:task-definition/sentiment-charting-taskdef:4",
  "family": "sentiment-charting-taskdef",
  "requiresAttributes": [
    {
      "name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
    },
    {
      "name": "ecs.capability.execution-role-awslogs"
    },
    {
      "name": "com.amazonaws.ecs.capability.ecr-auth"
    },
    {
      "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
    },
    {
      "name": "ecs.capability.execution-role-ecr-pull"
    },
    {
      "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
    },
    {
      "name": "ecs.capability.task-eni"
    }
  ],
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "networkMode": "awsvpc",
  "cpu": "2048",
  "revision": 4,
  "status": "ACTIVE",
  "volumes": []
}

appspec.yml:

version: 0.0
Resources:
  - TargetService:
      Type: AWS::ECS::Service
      Properties:
        TaskDefinition: "<TASK_DEFINITION>"
        LoadBalancerInfo:
          ContainerName: "sentiment-charting"
          ContainerPort: 80
        PlatformVersion: "LATEST"

I'm at a bit of a loss as to how best to continue troubleshooting without spinning my wheels. Any help would be greatly appreciated.

TIA

0 Answers
Related